If i launch emacs with emacs -Q /tmp/blah.org M-x org-insert-structure-template<RET>s<RET>sh<RET>echo hi<RET>echo hi<RET> It looks like this: omw -- #+begin_src sh echo hi echo hi #+end_src -- Is this supposed to be the default behavior or am i doing something wrong? Nate
I messed up the paste, it's supposed to be:
--
#+begin_src sh
echo hi
echo hi
#+end_src
--
> On May 7, 2021, at 4:01 PM, Nathaniel W Griswold <nate@manicmind.earth> wrote:
>
> If i launch emacs with emacs -Q /tmp/blah.org
>
> M-x org-insert-structure-template<RET>s<RET>sh<RET>echo hi<RET>echo hi<RET>
>
> It looks like this:
>
> omw
>
> --
> #+begin_src sh
> echo hi
> echo hi
>
> #+end_src
> --
>
> Is this supposed to be the default behavior or am i doing something wrong?
>
> Nate
Sorry i think i scared my email client. I looked at my raw message and some wacky stuff got inserted. I'm rewriting the original message here:
I am wondering if other people experience odd formatting when doing the following in org 9.4.4 and org 9.4.5:
# emacs -Q /tmp/blah.org
M-x org-insert-structure-template<RET>s<RET>sh<RET>echo hi<RET>echo hi<RET>
The formatting i get looks strange:
#+begin_src sh
echo hi
echo hi
#+end_src
Thank you
> On May 7, 2021, at 4:03 PM, Nathaniel W Griswold <nate@manicmind.earth> wrote:
>
> I messed up the paste, it's supposed to be:
>
> --
> #+begin_src sh
> echo hi
> echo hi
>
> #+end_src
> --
>
Nathaniel W Griswold <nate@manicmind.earth> writes:
> The formatting i get looks strange:
>
> #+begin_src sh
> echo hi
> echo hi
> #+end_src
Confirmed on master.
Hi Nathaniel,
Ihor Radchenko <yantar92@gmail.com> writes:
> Nathaniel W Griswold <nate@manicmind.earth> writes:
>> The formatting i get looks strange:
>>
>> #+begin_src sh
>> echo hi
>> echo hi
>> #+end_src
>
> Confirmed on master.
Fixed in the maint branch, thanks.
--
Bastien
!!!
Great!
> On May 15, 2021, at 6:50 AM, Bastien <bzg@gnu.org> wrote:
>
> Hi Nathaniel,
>
> Ihor Radchenko <yantar92@gmail.com> writes:
>
>> Nathaniel W Griswold <nate@manicmind.earth> writes:
>>> The formatting i get looks strange:
>>>
>>> #+begin_src sh
>>> echo hi
>>> echo hi
>>> #+end_src
>>
>> Confirmed on master.
>
> Fixed in the maint branch, thanks.
>
> --
> Bastien
Hi Bastien, The commit `bfda3cc7df31fa79222efb4c190618c3c85a3d04` breaks automatic (electric) indentation in src blocks for all configurations. Here's what happens with the original issue. When you press `RET` after the first ~hello hi~, the result is that the first line is indented by two spaces, and the second (where the point is) isn't. - since ~electric-indent-mode~ is on, ~org-return~ is called with `indent` set to `t`. - Since ~org-src-tab-acts-natively~ is `t`, indentation is done by calling `tab` in a src edit buffer, which by itself, does nothing. - The observed indentation comes from ~org-src--contents-for-write-back~. Since ~org-src--content-indentation~ is 2 and ~org-src--preserve-indentation~ is ~nil~, this functions further indents each *non blank* line by 2. At this point, the first line is indented, cursor is at bol. Note that you cannot indent your current empty line with `tab`. You can either indent it manually, or call ~org-edit-special~. When you write your second line, then press `RET`, ~org-src--contents-for-write-back~ will add an additional two spaces, producing the reported result. I think a reasonable fix is to have ~org-src--contents-for-write-back~ also indent blank lines. To do this, you need only remove following line from its definition. : (unless (eolp) ;ignore blank lines With this done and `bfda3cc7df31fa79222efb4c190618c3c85a3d04` reverted, the original issue is fixed, and the behaviour is better: when you press `RET` to enter a newline in a src block, it is automatically indented. The downside is that, unless ~org-src--preserve-indentation~ is `t`, when editing a src block, every empty line will be indented with spaces (according to ~org-edit-src-content-indentation~ + the indentation of the #+begin_src line). I think this is reasonable, but perhaps some might disagree. Regards, -- Sébastien Miquel
Hi Sébastien,
Sébastien Miquel <sebastien.miquel@posteo.eu> writes:
> The commit `bfda3cc7df31fa79222efb4c190618c3c85a3d04` breaks automatic
> (electric) indentation in src blocks for all configurations.
Yes, this was intentional: there are many variables interfering in
this area, and preventing electric indentation for src code blocks
seemed acceptable to me.
Before I revert the commit and try your suggestion, can you share a
patch that add both changes (the revert and your fix) manually so I
can test it? If this fixes the original issue while preserving
electric indentation, I'm okay with it.
Also, do you want to become the maintainer for org-src.el? We need
more people taking charge of specific areas in Org's code.
Thanks,
--
Bastien
[-- Attachment #1: Type: text/plain, Size: 710 bytes --] Hi Bastien, Bastien writes: > Before I revert the commit and try your suggestion, can you share a > patch that add both changes (the revert and your fix) manually so I > can test it? If this fixes the original issue while preserving > electric indentation, I'm okay with it. Here's such a patch. > Also, do you want to become the maintainer for org-src.el? We need > more people taking charge of specific areas in Org's code. I do intend to keep monitoring this list and help around for the foreseeable future, and I would certainly agree to whatever sort of maintainer position eventually, but I hold no particular interest (or deep understanding) in this specific file. Regards, -- Sébastien Miquel [-- Attachment #2: 0001-org.el-org-src-contents-for-write-back-Indent-blank-.patch --] [-- Type: text/x-patch, Size: 2585 bytes --] From 1be7fa790e68d1fc2d198eee81c0d3bb72156d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Miquel?= <sebastien.miquel@posteo.eu> Date: Tue, 18 May 2021 14:39:33 +0200 Subject: [PATCH] org.el (org-src--contents-for-write-back): Indent blank lines * lisp/org.el (org-src--contents-for-write-back): Indent blank lines. * lisp/org-src.el (org-return): Revert part of commit bfda3cc7df. --- lisp/org-src.el | 9 ++++----- lisp/org.el | 6 +----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lisp/org-src.el b/lisp/org-src.el index 5604e6568..79f002e56 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -453,15 +453,14 @@ Assume point is in the corresponding edit buffer." (insert (org-no-properties contents)) (goto-char (point-min)) (when (functionp write-back) (save-excursion (funcall write-back))) - ;; Add INDENTATION-OFFSET to every non-empty line in buffer, + ;; Add INDENTATION-OFFSET to every line in buffer, ;; unless indentation is meant to be preserved. (when (> indentation-offset 0) (while (not (eobp)) (skip-chars-forward " \t") - (unless (eolp) ;ignore blank lines - (let ((i (current-column))) - (delete-region (line-beginning-position) (point)) - (indent-to (+ i indentation-offset)))) + (let ((i (current-column))) + (delete-region (line-beginning-position) (point)) + (indent-to (+ i indentation-offset))) (forward-line)))))) (defun org-src--edit-element diff --git a/lisp/org.el b/lisp/org.el index ae09f3e99..0add9bc2e 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -18018,10 +18018,6 @@ object (e.g., within a comment). In these case, you need to use (delete-and-extract-region (point) (line-end-position)))) (org--newline indent arg interactive) (save-excursion (insert trailing-data)))) - ;; FIXME: In a source block, don't try to indent as it may result - ;; in weird results due to `electric-indent-mode' being `t'. - ((eq element-type 'src-block) - (org--newline nil nil nil)) (t ;; Do not auto-fill when point is in an Org property drawer. (let ((auto-fill-function (and (not (org-at-property-p)) @@ -19167,7 +19163,7 @@ Also align node properties according to `org-property-format'." (line-beginning-position 2)))) nil) ((and (eq type 'src-block) - org-src-tab-acts-natively + org-src-tab-acts-natively (> (line-beginning-position) (org-element-property :post-affiliated element)) (< (line-beginning-position) -- 2.31.1
Hi Sébastien, Sébastien Miquel <sebastien.miquel@posteo.eu> writes: > Here's such a patch. Applied, thanks a lot. >> Also, do you want to become the maintainer for org-src.el? We need >> more people taking charge of specific areas in Org's code. > I do intend to keep monitoring this list and help around for the > foreseeable future, and I would certainly agree to whatever sort of > maintainer position eventually, but I hold no particular interest (or > deep understanding) in this specific file. Sure, I understand. Thanks for your time in helping with this! Best, -- Bastien