emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Ignore Local Variables list in source blocks
@ 2024-12-18  4:13 Joseph Turner
  2024-12-18 17:16 ` Max Nikulin
  0 siblings, 1 reply; 9+ messages in thread
From: Joseph Turner @ 2024-12-18  4:13 UTC (permalink / raw)
  To: Org Mode Mailing List; +Cc: bohonghuang

Hello!

Is there a way to make Emacs ignore Local Variables lists which appear
inside of source blocks?

For example, is there a way to include the following content in an Org
file without Emacs attempting to locally set foo to bar?

#+BEGIN_EXAMPLE
  # Local Variables:
  # foo: 'bar
  # End:
#+END_EXAMPLE

This issue first came up in org-srs:

https://github.com/bohonghuang/org-srs/issues/7

Thank you,

Joseph


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-18  4:13 Ignore Local Variables list in source blocks Joseph Turner
@ 2024-12-18 17:16 ` Max Nikulin
  2024-12-19 21:37   ` Joseph Turner via General discussions about Org-mode.
  0 siblings, 1 reply; 9+ messages in thread
From: Max Nikulin @ 2024-12-18 17:16 UTC (permalink / raw)
  To: Joseph Turner, emacs-orgmode; +Cc: bohonghuang

On 18/12/2024 11:13, Joseph Turner wrote:
> 
> Is there a way to make Emacs ignore Local Variables lists which appear
> inside of source blocks?
> 
> For example, is there a way to include the following content in an Org
> file without Emacs attempting to locally set foo to bar?
> 
> #+BEGIN_EXAMPLE
>    # Local Variables:
>    # foo: 'bar
>    # End:
> #+END_EXAMPLE

Have you tried to create a comment block below?

#+begin_comment
Deactivate local variables above in the example block:
Local Variables:
End:
#+end_comment

If it is not enough (and breaking the example into 2 parts is not 
acceptable) then ask Emacs developers. I do not think, Org should (and 
has a chance) to deal with this feature

(info "(emacs) Specifying File Variables")
<https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-18 17:16 ` Max Nikulin
@ 2024-12-19 21:37   ` Joseph Turner via General discussions about Org-mode.
  2024-12-20 14:46     ` Max Nikulin
  2024-12-20 15:37     ` Copy info node name (was: Re: Ignore Local Variables list in source blocks) Max Nikulin
  0 siblings, 2 replies; 9+ messages in thread
From: Joseph Turner via General discussions about Org-mode. @ 2024-12-19 21:37 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: bohonghuang, Max Nikulin

Max Nikulin <manikulin@gmail.com> writes:

> On 18/12/2024 11:13, Joseph Turner wrote:
>> Is there a way to make Emacs ignore Local Variables lists which
>> appear
>> inside of source blocks?
>> For example, is there a way to include the following content in an
>> Org
>> file without Emacs attempting to locally set foo to bar?
>> #+BEGIN_EXAMPLE
>>    # Local Variables:
>>    # foo: 'bar
>>    # End:
>> #+END_EXAMPLE
>
> Have you tried to create a comment block below?
>
> #+begin_comment
> Deactivate local variables above in the example block:
> Local Variables:
> End:
> #+end_comment

In my testing, in order to make Emacs ignore the `foo: bar' binding, the
empty Local Variables list actually needs to go first.

> If it is not enough (and breaking the example into 2 parts is not
> acceptable) then ask Emacs developers. I do not think, Org should (and
> has a chance) to deal with this feature

Yes, I agree that Org should not deal with this feature.

Splitting the example into two parts results in "File mode specification
error: (user-error Local variables entry is missing the prefix) " upon
opening the file.  You can test with this:

--8<---------------cut here---------------start------------->8---
#+BEGIN_SRC org
  # Local Variables:
#+END_SRC

#+BEGIN_SRC org
  # org-srs-review-new-items-per-day: 30
  # org-srs-review-max-reviews-per-day: 100
  # End:
#+END_SRC
--8<---------------cut here---------------end--------------->8---

> (info "(emacs) Specifying File Variables")

By the way, is there a built-in command to copy that (info ...) sexp
when viewing that info page?

> <https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>

Thanks, I just re-read that page more carefully, and I see this:

    If some unrelated text might look to Emacs as a local variables
    list, you can countermand that by inserting a form-feed character (a
    page delimiter, *note Pages::) after that text.  Emacs only looks for
    file-local variables in the last page of a file, after the last page
    delimiter.

In the org-srs README.org, I think we can just throw a \f at the bottom
of the file (or before a Local Variables list which we do want to use).

Problem solved!  Thank you, Max!

Joseph


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-19 21:37   ` Joseph Turner via General discussions about Org-mode.
@ 2024-12-20 14:46     ` Max Nikulin
  2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
  2024-12-21  2:11       ` Joseph Turner
  2024-12-20 15:37     ` Copy info node name (was: Re: Ignore Local Variables list in source blocks) Max Nikulin
  1 sibling, 2 replies; 9+ messages in thread
From: Max Nikulin @ 2024-12-20 14:46 UTC (permalink / raw)
  To: Joseph Turner, emacs-orgmode; +Cc: bohonghuang

On 20/12/2024 04:37, Joseph Turner wrote:
> Max Nikulin writes:
>> Have you tried to create a comment block below?
>>
>> #+begin_comment
>> Deactivate local variables above in the example block:
>> Local Variables:
>> End:
>> #+end_comment
> 
> In my testing, in order to make Emacs ignore the `foo: bar' binding, the
> empty Local Variables list actually needs to go first.

Then it is more fragile in the case of complex documents, but still may 
be viable for simple ones with single example.

> Splitting the example into two parts results in "File mode specification
> error: (user-error Local variables entry is missing the prefix) " upon
> opening the file.

I expected that the code looking up for local variables is reasonably shy.

> You can test with this:
> #+BEGIN_SRC org
>    # Local Variables:
> #+END_SRC
> 
> #+BEGIN_SRC org
>    # org-srs-review-new-items-per-day: 30
>    # org-srs-review-max-reviews-per-day: 100
>    # End:
> #+END_SRC

Unfortunately

:   # Local Variables:
#+BEGIN_EXAMPLE
   # org-srs-review-new-items-per-day: 30
   # org-srs-review-max-reviews-per-day: 100
   # End:
#+END_EXAMPLE

Causes a warning as well:
"Local variables list is not properly terminated"

>> (info "(emacs) Specifying File Variables")
> 
> By the way, is there a built-in command to copy that (info ...) sexp
> when viewing that info page?

A short answer "C-0 c" or "C-0 w". Maybe I will send a longer one, 
dropping bohonghuang from Cc.

>> <https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>
> 
> Thanks, I just re-read that page more carefully, and I see this:
> 
>      If some unrelated text might look to Emacs as a local variables
>      list, you can countermand that by inserting a form-feed character (a
>      page delimiter, *note Pages::) after that text.  Emacs only looks for
>      file-local variables in the last page of a file, after the last page
>      delimiter.

I do not like non-printable characters. E.g. Thunderbird rendered your 
message with confusingly large vertical space in the middle. Outside of 
Emacs, kludges like ";;; org.el ends here" are not common. I would not 
be surprised by some issues on attempt to edit the README.org file on 
the GitHub site directly.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-20 14:46     ` Max Nikulin
@ 2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
  2024-12-21  2:13         ` Joseph Turner
  2024-12-21  2:13         ` Joseph Turner
  2024-12-21  2:11       ` Joseph Turner
  1 sibling, 2 replies; 9+ messages in thread
From: Nikolaos Chatzikonstantinou @ 2024-12-20 14:53 UTC (permalink / raw)
  To: Joseph Turner, emacs-orgmode, bohonghuang

On Fri, Dec 20, 2024 at 9:46 AM Max Nikulin <manikulin@gmail.com> wrote:
>
> On 20/12/2024 04:37, Joseph Turner wrote:
> > Max Nikulin writes:
> >> Have you tried to create a comment block below?
> >>
> >> #+begin_comment
> >> Deactivate local variables above in the example block:
> >> Local Variables:
> >> End:
> >> #+end_comment
> >
> > In my testing, in order to make Emacs ignore the `foo: bar' binding, the
> > empty Local Variables list actually needs to go first.
>
> Then it is more fragile in the case of complex documents, but still may
> be viable for simple ones with single example.
>
> > Splitting the example into two parts results in "File mode specification
> > error: (user-error Local variables entry is missing the prefix) " upon
> > opening the file.
>
> I expected that the code looking up for local variables is reasonably shy.
>
> > You can test with this:
> > #+BEGIN_SRC org
> >    # Local Variables:
> > #+END_SRC
> >
> > #+BEGIN_SRC org
> >    # org-srs-review-new-items-per-day: 30
> >    # org-srs-review-max-reviews-per-day: 100
> >    # End:
> > #+END_SRC
>
> Unfortunately
>
> :   # Local Variables:
> #+BEGIN_EXAMPLE
>    # org-srs-review-new-items-per-day: 30
>    # org-srs-review-max-reviews-per-day: 100
>    # End:
> #+END_EXAMPLE
>
> Causes a warning as well:
> "Local variables list is not properly terminated"
>
> >> (info "(emacs) Specifying File Variables")
> >
> > By the way, is there a built-in command to copy that (info ...) sexp
> > when viewing that info page?
>
> A short answer "C-0 c" or "C-0 w". Maybe I will send a longer one,
> dropping bohonghuang from Cc.
>
> >> <https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>
> >
> > Thanks, I just re-read that page more carefully, and I see this:
> >
> >      If some unrelated text might look to Emacs as a local variables
> >      list, you can countermand that by inserting a form-feed character (a
> >      page delimiter, *note Pages::) after that text.  Emacs only looks for
> >      file-local variables in the last page of a file, after the last page
> >      delimiter.
>
> I do not like non-printable characters. E.g. Thunderbird rendered your
> message with confusingly large vertical space in the middle. Outside of
> Emacs, kludges like ";;; org.el ends here" are not common. I would not
> be surprised by some issues on attempt to edit the README.org file on
> the GitHub site directly.


If I do something like

#+begin_comment
Local Variables:
End:
#+end_comment

#+begin_src
Local Variables:
foo: 40
End:
#+end_src

Then the variable is not set, as Emacs does not look for a Local
Variables list more than once.

Regards,
Nikolaos Chatzikonstantinou


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Copy info node name (was: Re: Ignore Local Variables list in source blocks)
  2024-12-19 21:37   ` Joseph Turner via General discussions about Org-mode.
  2024-12-20 14:46     ` Max Nikulin
@ 2024-12-20 15:37     ` Max Nikulin
  1 sibling, 0 replies; 9+ messages in thread
From: Max Nikulin @ 2024-12-20 15:37 UTC (permalink / raw)
  To: Joseph Turner, emacs-orgmode; +Cc: rms

Due to a recent texinfo thread on emacs-devel, I have added RMS to Cc.

On 20/12/2024 04:37, Joseph Turner wrote:
> Max Nikulin writes:
>> (info "(emacs) Specifying File Variables")
> By the way, is there a built-in command to copy that (info ...) sexp
> when viewing that info page?

TLDR;

"C-0 c" or "C-0 w"

Actually to get the reference above I copied and edited the file part of 
the HTTP URL

>> <https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>

Autocompletion from browsing history in address bar is a rather 
convenient feature to quickly open some document visited earlier.

Unfortunately HTML page metadata does not contain manual and node names, 
so a browser extension that copies info references, while possible, 
would not be reliable. (I have noticed that HTML links may have extra 
data-manual="elisp" attributes without data-node conterpart.)

Back to Emacs, `org-store-link' allows to save an info link for 
insertion into an Org mode document.

However I am unaware of any command that allows to create a more precise 
reference. Enough nodes have index anchors and it may be more convenient:
<https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-_005f>
An issue with Org links to index anchors that they can not be easily 
exported to html_node variant of the texinfo document, especially if the 
manual is not installed on the machine. (E.g. sphinx puts 
machine-readable index of sections and anchors along with HTML files.)

Earlier I have not tries to find if it is possible to copy info node 
name as *a command*. Actually neither (info "(info)"), nor (info 
"(info-stnd"), nor (info "(emacs)") describe how to copy current node 
name, so the feature is a part of hidden UI. I still had an impression 
that I have seen a keybinding somewhere. This time I found it in "C-h m" 
list, it is present in "?" info help as well (of course, without details 
related to sexp).

The final step is the docstring for the "c" and "w" key bindings.

`Info-copy-current-node-name'

An advantage of the

     (info "(emacs) Specifying File Variables")

form is that it usually can be used to open specific part of the 
document in a standalone info browser. (Eli believes they are dead.)

Another feature I missed in info browsers is equivalent of browser "copy 
link" context menu option for links. It is handy to copy link for notes 
without leaving the current document.

I am not surprised that people use any option (HTTP URL, etc.), but not 
"(emacs) Specifying File Variables" form (or some dedicated URL scheme). 
The feature is hidden (and incompatible with yelp and khelpcenter).


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-20 14:46     ` Max Nikulin
  2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
@ 2024-12-21  2:11       ` Joseph Turner
  1 sibling, 0 replies; 9+ messages in thread
From: Joseph Turner @ 2024-12-21  2:11 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: bohonghuang

Max Nikulin <manikulin@gmail.com> writes:

[...]

>>> (info "(emacs) Specifying File Variables")
>> By the way, is there a built-in command to copy that (info ...) sexp
>> when viewing that info page?
>
> A short answer "C-0 c" or "C-0 w". Maybe I will send a longer one,
> dropping bohonghuang from Cc.

Thanks!  Very good to know about!

>>> <https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html>
>> Thanks, I just re-read that page more carefully, and I see this:
>>      If some unrelated text might look to Emacs as a local variables
>>      list, you can countermand that by inserting a form-feed character (a
>>      page delimiter, *note Pages::) after that text.  Emacs only looks for
>>      file-local variables in the last page of a file, after the last page
>>      delimiter.
>
> I do not like non-printable characters. E.g. Thunderbird rendered your
> message with confusingly large vertical space in the middle. Outside
> of Emacs, kludges like ";;; org.el ends here" are not common. I would
> not be surprised by some issues on attempt to edit the README.org file
> on the GitHub site directly.

Also good to know about.

Thanks!

Joseph


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
@ 2024-12-21  2:13         ` Joseph Turner
  2024-12-21  2:13         ` Joseph Turner
  1 sibling, 0 replies; 9+ messages in thread
From: Joseph Turner @ 2024-12-21  2:13 UTC (permalink / raw)
  To: Nikolaos Chatzikonstantinou; +Cc: emacs-orgmode, bohonghuang

Nikolaos Chatzikonstantinou <nchatz314@gmail.com> writes:

[...]

> If I do something like
>
> #+begin_comment
> Local Variables:
> End:
> #+end_comment
>
> #+begin_src
> Local Variables:
> foo: 40
> End:
> #+end_src
>
> Then the variable is not set, as Emacs does not look for a Local
> Variables list more than once.

Thanks!  This approach is a bit fragile, though since Emacs only looks
at the last 3000 characters for "Local Variables:".

Joseph


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: Ignore Local Variables list in source blocks
  2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
  2024-12-21  2:13         ` Joseph Turner
@ 2024-12-21  2:13         ` Joseph Turner
  1 sibling, 0 replies; 9+ messages in thread
From: Joseph Turner @ 2024-12-21  2:13 UTC (permalink / raw)
  To: Nikolaos Chatzikonstantinou; +Cc: emacs-orgmode, bohonghuang

Nikolaos Chatzikonstantinou <nchatz314@gmail.com> writes:

[...]

> If I do something like
>
> #+begin_comment
> Local Variables:
> End:
> #+end_comment
>
> #+begin_src
> Local Variables:
> foo: 40
> End:
> #+end_src
>
> Then the variable is not set, as Emacs does not look for a Local
> Variables list more than once.

Thanks!  This approach is a bit fragile, since Emacs only looks at the
last 3000 characters for "Local Variables:".

Joseph


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-12-21  2:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-18  4:13 Ignore Local Variables list in source blocks Joseph Turner
2024-12-18 17:16 ` Max Nikulin
2024-12-19 21:37   ` Joseph Turner via General discussions about Org-mode.
2024-12-20 14:46     ` Max Nikulin
2024-12-20 14:53       ` Nikolaos Chatzikonstantinou
2024-12-21  2:13         ` Joseph Turner
2024-12-21  2:13         ` Joseph Turner
2024-12-21  2:11       ` Joseph Turner
2024-12-20 15:37     ` Copy info node name (was: Re: Ignore Local Variables list in source blocks) Max Nikulin

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).