emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Andrey Orst <andreyorst@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Bug: incorrect indentation of code in source code blocks
Date: Tue, 2 Feb 2021 14:34:34 +0300	[thread overview]
Message-ID: <CAAKhXobWP+pvu_LW+n2ZO1hWnrQ5rpdgybrh8Ah0ZDnznRjdKQ@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 5961 bytes --]

Hello, I think I've found some bugs with indentation of org mode
source code blocks.

Bug 1

When edited within the Org buffer, e.g. not by entering indirect
buffer with C-c ' the indentation misses two spaces (█ represents the
point):

#+begin_src emacs-lisp
  (progn 1
         2█
         3)
#+end_src

Pressing RET here results in the following indent:

#+begin_src emacs-lisp
  (progn 1
         2
       █
         3)
#+end_src

But inputting a number and pressing TAB will indent it correctly:

#+begin_src emacs-lisp
  (progn 1
         2
         0█
         3)
#+end_src

Org doesn't seem to take into account the leading two space
indentation, and sends deindented buffer to indent function.

(See demo-1.mp4 for more clear view of the problem)

Bug 2

Org mode adds extra two space indent to whole expression if point is
before the closing parenthesis:

#+begin_src emacs-lisp
  (progn 1
         2
         3█)
#+end_src

Pressing RET here produces extra indentation:

#+begin_src emacs-lisp
    (progn 1
           2
           3
           █)
#+end_src

(See demo-2.mp4 for more clear view of the problem)

All of this occurs in emacs -q with GNU Emacs 28.0.50.

Now, I must say, that setting `org-src-preserve-indentation' variable
to `t' "fixes" the issue.  Org will correctly indent code, but will
preserve these additional spaces when entering indirect buffer.  I
like the default behavior more, e.g. having two spaces before the code
in Org buffer, and not having these spaces in indirrect buffer.  It
seems to me that the fix would be to let bind this variable to `t' ony
when indenting the code, but there might be a better solution.
Currenlty I've have this workaround in my config:

(define-advice org-return (:around (f &optional indent arg
interactive) aorst:org-return)
  (let ((org-src-preserve-indentation t))
    (funcall f indent arg interactive)))
(define-advice org-cycle (:around (f &optional arg) aorst:org-cycle)
  (let ((org-src-preserve-indentation t))
    (funcall f arg)))

Though this fixes the error, I think it is a hack.

Emacs  : GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.13, cairo version 1.16.0)
 of 2021-01-17
Package: Org mode version 9.4.4 (release_9.4.4 @
/home/andreyorst/.local/emacs/share/emacs/28.0.50/lisp/org/)

current state:
==============
(setq
 org-confirm-elisp-link-function 'yes-or-no-p
 org-speed-command-hook '(org-speed-command-activate
org-babel-speed-command-activate)
 org-occur-hook '(org-first-headline-recenter)
 org-babel-pre-tangle-hook '(save-buffer)
 org-cycle-hook '(org-cycle-hide-archived-subtrees
org-cycle-hide-drawers org-cycle-show-empty-lines
          org-optimize-window-after-visibility-change)
 outline-isearch-open-invisible-function 'outline-isearch-open-invisible
 org-archive-hook '(org-attach-archive-delete-maybe)
 org-agenda-loop-over-headlines-in-active-region nil
 org-src-mode-hook '(org-src-babel-configure-edit-buffer
org-src-mode-configure-edit-buffer)
 org-confirm-shell-link-function 'yes-or-no-p
 org-bibtex-headline-format-function #[257 "\300 \236A\207" [:title] 3
"\n\n(fn ENTRY)"]
 org-metadown-hook '(org-babel-pop-to-session-maybe)
 org-mode-hook '(#[0 "\300\301\302\303\304$\207" [add-hook
change-major-mode-hook org-show-all append local] 5]
         #[0 "\300\301\302\303\304$\207"
           [add-hook change-major-mode-hook org-babel-show-result-all
append local] 5]
         org-babel-result-hide-spec org-babel-hide-all-hashes)
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-link-shell-confirm-function 'yes-or-no-p
 org-link-parameters '(("attachment" :follow org-attach-follow
:complete org-attach-complete-link)
               ("id" :follow org-id-open) ("eww" :follow org-eww-open
:store org-eww-store-link)
               ("rmail" :follow org-rmail-open :store org-rmail-store-link)
               ("mhe" :follow org-mhe-open :store org-mhe-store-link)
               ("irc" :follow org-irc-visit :store org-irc-store-link
:export org-irc-export)
               ("info" :follow org-info-open :export org-info-export
:store org-info-store-link)
               ("gnus" :follow org-gnus-open :store org-gnus-store-link)
               ("docview" :follow org-docview-open :export
org-docview-export :store
            org-docview-store-link)
               ("bibtex" :follow org-bibtex-open :store org-bibtex-store-link)
               ("bbdb" :follow org-bbdb-open :export org-bbdb-export
:complete org-bbdb-complete-link
            :store org-bbdb-store-link)
               ("w3m" :store org-w3m-store-link) ("file+sys") ("file+emacs")
               ("shell" :follow org-link--open-shell)
               ("news" :follow
            #[514 "\301\300\302 Q \"\207" ["news" browse-url ":"] 6
"\n\n(fn URL ARG)"])
               ("mailto" :follow
            #[514 "\301\300\302 Q \"\207" ["mailto" browse-url ":"] 6
"\n\n(fn URL ARG)"])
               ("https" :follow
            #[514 "\301\300\302 Q \"\207" ["https" browse-url ":"] 6
"\n\n(fn URL ARG)"])
               ("http" :follow
            #[514 "\301\300\302 Q \"\207" ["http" browse-url ":"] 6
"\n\n(fn URL ARG)"])
               ("ftp" :follow
            #[514 "\301\300\302 Q \"\207" ["ftp" browse-url ":"] 6
"\n\n(fn URL ARG)"])
               ("help" :follow org-link--open-help) ("file" :complete
org-link-complete-file)
               ("elisp" :follow org-link--open-elisp) ("doi" :follow
org-link--open-doi))
 org-export-before-parsing-hook '(org-attach-expand-links)
 org-clock-out-hook '(org-clock-remove-empty-clock-drawer)
 org-agenda-before-write-hook '(org-agenda-add-entry-text)
 org-link-elisp-confirm-function 'yes-or-no-p
 org-tab-first-hook '(org-babel-hide-result-toggle-maybe
org-babel-header-arg-expand)
 )

--
Best regards,
Andrey Listopadov

[-- Attachment #2: demo-2.mp4 --]
[-- Type: video/mp4, Size: 58749 bytes --]

[-- Attachment #3: demo-1.mp4 --]
[-- Type: video/mp4, Size: 75095 bytes --]

                 reply	other threads:[~2021-02-02 11:36 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAAKhXobWP+pvu_LW+n2ZO1hWnrQ5rpdgybrh8Ah0ZDnznRjdKQ@mail.gmail.com \
    --to=andreyorst@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).