* [Bug] org-in-src-block-p returns t when not in source block
@ 2023-11-27 15:49 No Wayman
2023-11-27 15:55 ` Ihor Radchenko
0 siblings, 1 reply; 8+ messages in thread
From: No Wayman @ 2023-11-27 15:49 UTC (permalink / raw)
To: emacs-orgmode
When on an empty line before a source block, org-in-src-block-p
correctly returns nil.
However, when on an empty line after a source block, it returns t.
This is reproducible on my end with both the built-in version of
Org and 9.7-pre.
Yodel[1] Report 2023-11-27 10:42:54
===================================
--8<---------------cut here---------------start------------->8---
(yodel
:post*
(require 'org)
(org-version nil 'full 'message)
(yodel-file
:point "|"
:with* "#+begin_src text\n#+end_src\n|"
:then* (message "org-in-src-block-p below: %s"
(org-in-src-block-p)))
(yodel-file
:point "|"
:with* "|\n#+begin_src text\n#+end_src"
:then* (message "org-in-src-block-p above: %s"
(org-in-src-block-p))))
--8<---------------cut here---------------end--------------->8---
STDOUT
======
> Org mode version 9.6.11 (release_9.6.11 @
> /usr/share/emacs/30.0.50/lisp/org/)
> org-in-src-block-p below: t
> org-in-src-block-p above: nil
Environment
===========
- emacs version: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu,
GTK+ Version 3.24.38, cairo version 1.18.0)
of 2023-11-16
- system type: gnu/linux
[1] https://www.github.com/progfolio/yodel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
2023-11-27 15:49 [Bug] org-in-src-block-p returns t when not in source block No Wayman
@ 2023-11-27 15:55 ` Ihor Radchenko
[not found] ` <87cyvv9nag.fsf@gmail.com>
0 siblings, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2023-11-27 15:55 UTC (permalink / raw)
To: No Wayman; +Cc: emacs-orgmode
No Wayman <iarchivedmywholelife@gmail.com> writes:
> When on an empty line before a source block, org-in-src-block-p
> correctly returns nil.
> However, when on an empty line after a source block, it returns t.
> This is reproducible on my end with both the built-in version of
> Org and 9.7-pre.
This is not a bug - Org considers blank lines after element as a part of
it. This includes source blocks.
If you want to check if point is inside source block code, use INSIDE
argument.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
[not found] ` <87cyvv9nag.fsf@gmail.com>
@ 2023-11-27 19:59 ` Ihor Radchenko
0 siblings, 0 replies; 8+ messages in thread
From: Ihor Radchenko @ 2023-11-27 19:59 UTC (permalink / raw)
To: No Wayman; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 895 bytes --]
[ Adding Org mailing list back to CC ]
No Wayman <iarchivedmywholelife@gmail.com> writes:
>> This is not a bug - Org considers blank lines after element as a
>> part of
>> it. This includes source blocks.
>
> I would've reversed the semantics of the INSIDE argument.
> e.g.
>
> (defun org-in-src-block-p (&optional lax element)
> ...
> That's less confusing and mirrors other functions, such as
> org-at-timestamp-p.
This is very different from LAX argument in `org-at-timestamp-p' -
timestamp-like text may not be proper syntactically correct Org markup
element, but is still considered by agenda for historical and practical
reasons.
> However, that's a breaking change, and I feel like adding another,
> similarly named function will cause more confusion than it
> prevents.
This too.
> ... With that in mind, the docstring could be improved.
> ...
What about the attached patch?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-org.el-org-in-src-block-p-Improve-docstring.patch --]
[-- Type: text/x-patch, Size: 1374 bytes --]
From e5d5ab915eb4309082a4a274170fddc60a75c28b Mon Sep 17 00:00:00 2001
Message-ID: <e5d5ab915eb4309082a4a274170fddc60a75c28b.1701114969.git.yantar92@posteo.net>
From: Ihor Radchenko <yantar92@posteo.net>
Date: Mon, 27 Nov 2023 20:54:42 +0100
Subject: [PATCH] lisp/org.el (org-in-src-block-p): Improve docstring
* lisp/org.el (org-in-src-block-p):
Reported-by: No Wayman <iarchivedmywholelife@gmail.com>
Link: https://orgmode.org/list/87il5n9owq.fsf@gmail.com
---
lisp/org.el | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index d2cd0b9b7..19887ff1e 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -18786,9 +18786,13 @@ (defun org-quote-vert (s)
s)
(defun org-in-src-block-p (&optional inside element)
- "Whether point is in a code source block.
-When INSIDE is non-nil, don't consider we are within a source
-block when point is at #+BEGIN_SRC or #+END_SRC.
+ "Return t when point is at a source block element.
+When INSIDE is non-nil, return t only when point is between #+BEGIN_SRC
+and #+END_SRC lines.
+
+Note that affiliated keywords and blank lines after are considered a
+part of a source block.
+
When ELEMENT is provided, it is considered to be element at point."
(save-match-data (setq element (or element (org-element-at-point))))
(when (org-element-type-p element 'src-block)
--
2.42.0
[-- Attachment #3: Type: text/plain, Size: 224 bytes --]
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
@ 2023-11-27 20:14 No Wayman
2023-11-27 20:30 ` Ihor Radchenko
0 siblings, 1 reply; 8+ messages in thread
From: No Wayman @ 2023-11-27 20:14 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[Apologies for the duplicate message, Ihor. mu4e recently changed it's default
reply behavior without my noticing]
Ihor Radchenko <yantar92@posteo.net> writes:
> This is very different from LAX argument in `org-at-timestamp-p' -
> timestamp-like text may not be proper syntactically correct Org markup
> element, but is still considered by agenda for historical and practical
> reasons.
Fair enough.
> What about the attached patch?
That is much clearer. Thank you.
> If you want to check if point is inside source block code, use INSIDE
> argument.
Using the INSIDE argument still appears to fail in some cases:
Yodel[1] Report 2023-11-27 14:55:05
===================================
--8<---------------cut here---------------start------------->8---
(yodel
:post*
(require 'org)
(org-version nil 'full 'message)
(message "(org-in-source-block-p 'inside)")
(yodel-file "before.org" :point "|"
:with* "|\n#+begin_src text\ntest\n#+end_src\n"
:then* (message "point on preceding blank line: %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS")))
(yodel-file "begin.org" :point "|"
:with* "\n#+begin|_src text\ntest\n#+end_src\n"
:then* (message "point on begin_src: %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS")))
(yodel-file "in.org" :point "|"
:with* "\n#+begin_src text\nte|st\n#+end_src\n"
:then* (message "point between begin_src end_src: %s"
(if (org-in-src-block-p 'inside) "PASS" "FAIL")))
(yodel-file "end-non-blank.org" :point "|"
:with* "\n#+begin_src text\ntest\n#+end|_src\ntest"
:then* (message "point on end_src (non-blank line after): %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS")))
(yodel-file "end.org" :point "|"
:with* "\n#+begin_src text\ntest\n#+end|_src\n"
:then* (message "point on end_src (blank line after): %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS")))
(yodel-file "end-eobp.org" :point "|"
:with* "\n#+begin_src text\ntest\n#+end|_src"
:then* (message "point on end_src (no line after): %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS")))
(yodel-file "after.org" :point "|"
:with* "\n#+begin_src text\ntest\n#+end_src\n|"
:then* (message "point on trailing blank line: %s"
(if (org-in-src-block-p 'inside) "FAIL" "PASS"))))
--8<---------------cut here---------------end--------------->8---
STDOUT
======
> Org mode version 9.6.11 (release_9.6.11 @ /usr/share/emacs/30.0.50/lisp/org/)
> (org-in-source-block-p ’inside)
> point on preceding blank line: PASS
> point on begin_src: PASS
> point between begin_src end_src: PASS
> point on end_src (non-blank line after): PASS
> point on end_src (blank line after): PASS
> point on end_src (no line after): FAIL
> point on trailing blank line: FAIL
Environment
===========
- emacs version: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.38, cairo version 1.18.0)
of 2023-11-16
- system type: gnu/linux
[1] https://www.github.com/progfolio/yodel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
2023-11-27 20:14 No Wayman
@ 2023-11-27 20:30 ` Ihor Radchenko
2023-11-27 20:39 ` No Wayman
2023-11-28 20:32 ` Jens Schmidt
0 siblings, 2 replies; 8+ messages in thread
From: Ihor Radchenko @ 2023-11-27 20:30 UTC (permalink / raw)
To: No Wayman; +Cc: emacs-orgmode
No Wayman <iarchivedmywholelife@gmail.com> writes:
>> What about the attached patch?
>
> That is much clearer. Thank you.
Applied, onto main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=bd7fab212
>> If you want to check if point is inside source block code, use INSIDE
>> argument.
>
> Using the INSIDE argument still appears to fail in some cases:
>
> ...
>> Org mode version 9.6.11 (release_9.6.11 @ /usr/share/emacs/30.0.50/lisp/org/)
>> (org-in-source-block-p ’inside)
>> point on preceding blank line: PASS
>> point on begin_src: PASS
>> point between begin_src end_src: PASS
>> point on end_src (non-blank line after): PASS
>> point on end_src (blank line after): PASS
>> point on end_src (no line after): FAIL
This one passed on main.
>> point on trailing blank line: FAIL
Fixed, on main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6d7c7917a
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
2023-11-27 20:30 ` Ihor Radchenko
@ 2023-11-27 20:39 ` No Wayman
2023-11-28 20:32 ` Jens Schmidt
1 sibling, 0 replies; 8+ messages in thread
From: No Wayman @ 2023-11-27 20:39 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
Ihor Radchenko <yantar92@posteo.net> writes:
>>> point on trailing blank line: FAIL
>
> Fixed, on main.
> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6d7c7917a
Confirmed on my end by adding `:packages* org` to the previous
test:
Yodel[1] Report 2023-11-27 15:34:45
===================================
STDOUT
======
> INFO Scraping files for loaddefs...
> INFO Scraping files for loaddefs...done
> GEN ../elpaca-autoloads.el
> Cloning into '/tmp/yodel-yCfbwq/elpaca/repos/elpaca'...
> Your branch is up to date with 'origin/master'.
> Checking /tmp/yodel-yCfbwq/elpaca/repos/elpaca...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-info.el...
> Compiling /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-log.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-manager.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-menu-elpa.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-menu-melpa.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-menu-org.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-process.el...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-test.el...
> Compiling /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca-ui.el...
> Compiling /tmp/yodel-yCfbwq/elpaca/repos/elpaca/elpaca.el...
> Checking /tmp/yodel-yCfbwq/elpaca/repos/elpaca/doc...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/doc/early-init.el...
> Compiling /tmp/yodel-yCfbwq/elpaca/repos/elpaca/doc/init.el...
> Checking /tmp/yodel-yCfbwq/elpaca/repos/elpaca/extensions...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/extensions/elpaca-use-package.el...
> Checking /tmp/yodel-yCfbwq/elpaca/repos/elpaca/images...
> Checking /tmp/yodel-yCfbwq/elpaca/repos/elpaca/test...
> Compiling
> /tmp/yodel-yCfbwq/elpaca/repos/elpaca/test/elpaca-test.el...
> Done (Total of 11 files compiled, 3 skipped in 4 directories)
> Downloading MELPA recipes...
> Downloading MELPA recipes...100%
> Downloading NonGNU-devel ELPA...
> Downloading GNU-devel ELPA...
> Downloading NonGNU ELPA...
> Downloading GNU ELPA...
> Org mode version 9.7-pre (9.7-pre-n/a-g6d7c79
> @ /tmp/yodel-yCfbwq/elpaca/builds/org/)
> (org-in-source-block-p ’inside)
> point on preceding blank line: PASS
> point on begin_src: PASS
> point between begin_src end_src: PASS
> point on end_src (non-blank line after): PASS
> point on end_src (blank line after): PASS
> point on end_src (no line after): PASS
> point on trailing blank line: PASS
Environment
===========
- emacs version: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu,
GTK+ Version 3.24.38, cairo version 1.18.0)
of 2023-11-16
- system type: gnu/linux
Packages
========
- elpaca
https://github.com/progfolio/elpaca/commit/86a562c0a7c0a009803172eb0ed55fdaf17c4559
- org
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6d7c7917a0294bb71c3294119984207b1d9b0385
[1] https://www.github.com/progfolio/yodel
Thanks again.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
2023-11-27 20:30 ` Ihor Radchenko
2023-11-27 20:39 ` No Wayman
@ 2023-11-28 20:32 ` Jens Schmidt
2023-11-29 10:07 ` Ihor Radchenko
1 sibling, 1 reply; 8+ messages in thread
From: Jens Schmidt @ 2023-11-28 20:32 UTC (permalink / raw)
To: Ihor Radchenko, No Wayman; +Cc: emacs-orgmode
On 2023-11-27 21:30, Ihor Radchenko wrote:
> Fixed, on main.
> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6d7c7917a
Which is currently my HEAD, and there are still edge cases that do not
seem to be handled well.
Start off from "make vanilla" and the following buffer
------------------------- test.org -------------------------
#+begin_src shell
foo
#+end_src
bar
------------------------- test.org -------------------------
Navigate to BOL of the "#+end_src" line and
M-: (org-in-src-block-p t)
=> nil
As expected. Now add a space on the empty line *after* the
"#+end_src" line, navigate back to BOL of the "#+end_src" line and
M-: (org-in-src-block-p t)
=> t
When I wrote my own inner-boundary function, I looked with envy at
the elegance of the arithmetic done in `org-in-src-block-p' but thought
that this probably would not always work ... or did I misunderstand
something here?
Thanks Jens
Here is the lossage corresponding to my test case, just in case:
C-s ;; isearch-forward
# ;; isearch-printing-char
+ ;; isearch-printing-char
e ;; isearch-printing-char
n ;; isearch-printing-char
d ;; isearch-printing-char
C-a ;; org-beginning-of-line
M-: (org-in-src-block-p t)
<return> ;; read--expression-try-read
C-n ;; next-line
SPC ;; org-self-insert-command
C-a ;; org-beginning-of-line
C-p ;; previous-line
M-: (org-in-src-block-p t)
<return> ;; read--expression-try-read
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bug] org-in-src-block-p returns t when not in source block
2023-11-28 20:32 ` Jens Schmidt
@ 2023-11-29 10:07 ` Ihor Radchenko
0 siblings, 0 replies; 8+ messages in thread
From: Ihor Radchenko @ 2023-11-29 10:07 UTC (permalink / raw)
To: Jens Schmidt; +Cc: No Wayman, emacs-orgmode
Jens Schmidt <jschmidt4gnu@vodafonemail.de> writes:
> On 2023-11-27 21:30, Ihor Radchenko wrote:
>
>> Fixed, on main.
>> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6d7c7917a
>
> Which is currently my HEAD, and there are still edge cases that do not
> seem to be handled well.
> ...
> When I wrote my own inner-boundary function, I looked with envy at
> the elegance of the arithmetic done in `org-in-src-block-p' but thought
> that this probably would not always work ... or did I misunderstand
> something here?
You are right.
Fixed, on main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=57b94f344
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-11-29 10:05 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-27 15:49 [Bug] org-in-src-block-p returns t when not in source block No Wayman
2023-11-27 15:55 ` Ihor Radchenko
[not found] ` <87cyvv9nag.fsf@gmail.com>
2023-11-27 19:59 ` Ihor Radchenko
-- strict thread matches above, loose matches on Subject: below --
2023-11-27 20:14 No Wayman
2023-11-27 20:30 ` Ihor Radchenko
2023-11-27 20:39 ` No Wayman
2023-11-28 20:32 ` Jens Schmidt
2023-11-29 10:07 ` Ihor Radchenko
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).