Sébastien Miquel <sebastien.miq...@posteo.eu> 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>