Sébastien Miquel <[email protected]> writes:
>> May you please provide an example when it is necessary?
>> `org-indent-line' will run `org-babel-do-key-sequence-in-edit-buffer', so
>> it should still use `org-src--contents-for-write-back' and will not
>> modify the org buffer text directly.
>
> You're at the end of a line, you press =org-return-and-indent=.
> 1. It adds a newline character.
> 2. =org-indent-line= adds the org indentation, _before_ calling
> =org-babel-do-key-sequence-in-edit-buffer=
I missed this:
;; At the beginning of a blank line, do some preindentation. This
;; signals org-src--edit-element to preserve the indentation on
exit
> 3. The native edit call removes the common indentation, before
> calling tab in the native buffer.
> 4. Calling tab in the native buffer possibly does nothing.
> 5. =org-src--contents-for-write-back= sees the current line is empty,
> but it should indent it (with org indentation) nonetheless.
Ok. I understand better now (I think).
We are talking about
\t#+begin_src bash
\tcd foo<point>
\t#+end_src
and user pressing <RET>
Then, the expected result is
\t#+begin_src bash
\tcd foo
\t<point>
\t#+end_src
with <point> being aligned with "cd foo" above.
Alternatively,
\t#+begin_src emacs-lisp
\t(when t<point>
\t#+end_src
<RET> should yield indentation in src block as well
\t#+begin_src emacs-lisp
\t(when t
\t <point>
\t#+end_src
-------------
For the second scenario, no special treatment of current line is needed.
For the first scenario, why do we need to do it all the way in
`org-src--contents-for-write-back'? Why not directly in
`org-indent-line'?
>> Before your change, all the blank non-empty lines were unconditionally
>> removed. After your change, the first such line is removed and the
>> function returns nil without continuing.
>
> I don't understand. With this change, the function only stops if it
> finds a non blank line with less than n indentation (same as before).
> When a blank line with less than n indentation is found, it is emptied
> (same as before), and execution continues.
Never mind this. I misread the code. Thought that `throw' is called on
blank lines.
>> Since not removing blank lines is intentional after the change, why
>> doing it on a single line that is indented less than N?
>
> Are you advocating for computing N using blank lines as well ?
No. It was a misunderstanding.
--
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>