Ihor Radchenko writes: >> + ;; Trim contents: `org-src--contents-for-write-back' may have >> + ;; added indentation at the beginning, which we remove. > > May you also mention that we remove the indentation to avoid adding > spaces to latex fragments in the middle of a paragraph? On second thought, I don't think moving the LaTeX fragment logic away from `org-src--contents-for-write-back` makes sense. This part of the function does the opposite of `org-do-remove-indentation`, and the latter has a boolean argument `skip-fl`, so it makes sense to keep it the same here. It is simple enough. If you're worried about consistency with inline src blocks, I find it weird for them to have newlines, let alone newlines mixed with org's indentation. But if we do want to treat them the same, then we also need to modify `org-do-remove-indentation` to skip the first line for them as well. I've taken this part off the patch for now. > If source code in the edit buffer contains non-empty blank lines, it is > not Org's responsibility to clear them. In fact, it will go against > possible user settings! > > So, I agree that we should not indent empty lines. However, I do not > agree that we should not indent non-empty blank lines. The patch I propose does indent non-empty blank lines. The issue is with =org-do-remove-indentation= which empties blank lines. I've added a fix to this. >> - (setq org-src--preserve-blank-line preserve-blank-line) >> + (setq org-src--indent-current-empty-line (and blank-line >> + (not empty-line))) > > Here, you have a variable named "empty-line" set when (not empty-line). ?? I've renamed it yet again! > >> (while (not (eobp)) >> - (skip-chars-forward " \t") >> - (when (or (not (eolp)) ; not a blank line >> - (and (eq (point) (marker-position marker)) ; current line >> + (when (or (not (eolp)) ; not an empty line >> + ;; If the current line is empty, we may >> + ;; want to indent it. >> + (and (eq (point) (marker-position marker)) >> preserve-blank-line)) >> (insert indent-str)) >> (forward-line))) > > removed `skip-chars-forward' call, so the loop will always check every > bol and (not (eolp)) will be t for every line, except ^$. > Then, considering that preserve-blank-line is set when (not empty-line), > your second condition will never trigger. > > I feel that something is fishy in the logic. What happens is: in the org buffer, the line is not empty, because it has the org indentation (which was possibly just added by org-indent-line), but in the edit buffer, the line is empty, because the common org indentation was removed. In that case, we want to add back the org indentation. -- Sébastien Miquel