Fix indentation when wrapping a block around a region
* lisp/org.el (org-insert-structure-template): Indent like the first line, not the line the point happens to be on. Reported-by: stardiviner <numbchild@gmail.com> <http://lists.gnu.org/r/emacs-orgmode/2018-06/msg00107.html>
This commit is contained in:
parent
a0dacdc495
commit
3745c0af9f
52
lisp/org.el
52
lisp/org.el
|
@ -11849,36 +11849,36 @@ block."
|
|||
(list (pcase (org--insert-structure-template-mks)
|
||||
(`("\t" . ,_) (read-string "Structure type: "))
|
||||
(`(,_ ,choice . ,_) choice))))
|
||||
(let* ((column (current-indentation))
|
||||
(region? (use-region-p))
|
||||
(let* ((region? (use-region-p))
|
||||
(region-start (and region? (region-beginning)))
|
||||
(region-end (and region? (copy-marker (region-end))))
|
||||
(special? (string-match-p "\\`\\(src\\|export\\)\\'" type)))
|
||||
(extended? (string-match-p "\\`\\(src\\|export\\)\\'" type))
|
||||
(verbatim? (string-match-p
|
||||
(concat "\\`" (regexp-opt '("example" "export" "src")))
|
||||
type)))
|
||||
(when region? (goto-char region-start))
|
||||
(if (save-excursion (skip-chars-backward " \t") (bolp))
|
||||
(beginning-of-line)
|
||||
(insert "\n"))
|
||||
(save-excursion
|
||||
(indent-to column)
|
||||
(insert (format "#+begin_%s%s\n" type (if special? " " "")))
|
||||
(when region?
|
||||
(when (string-match-p (concat "\\`"
|
||||
(regexp-opt '("example" "export" "src")))
|
||||
type)
|
||||
(org-escape-code-in-region (point) region-end))
|
||||
(goto-char region-end)
|
||||
;; Ignore empty lines at the end of the region.
|
||||
(skip-chars-backward " \r\t\n")
|
||||
(end-of-line))
|
||||
(unless (bolp) (insert "\n"))
|
||||
(indent-to column)
|
||||
(insert (format "#+end_%s" (car (split-string type))))
|
||||
(if (looking-at "[ \t]*$") (replace-match "")
|
||||
(let ((column (current-indentation)))
|
||||
(if (save-excursion (skip-chars-backward " \t") (bolp))
|
||||
(beginning-of-line)
|
||||
(insert "\n"))
|
||||
(when (and (eobp) (not (bolp))) (insert "\n")))
|
||||
(if special? (end-of-line)
|
||||
(forward-line)
|
||||
(skip-chars-forward " \t"))))
|
||||
(save-excursion
|
||||
(indent-to column)
|
||||
(insert (format "#+begin_%s%s\n" type (if extended? " " "")))
|
||||
(when region?
|
||||
(when verbatim? (org-escape-code-in-region (point) region-end))
|
||||
(goto-char region-end)
|
||||
;; Ignore empty lines at the end of the region.
|
||||
(skip-chars-backward " \r\t\n")
|
||||
(end-of-line))
|
||||
(unless (bolp) (insert "\n"))
|
||||
(indent-to column)
|
||||
(insert (format "#+end_%s" (car (split-string type))))
|
||||
(if (looking-at "[ \t]*$") (replace-match "")
|
||||
(insert "\n"))
|
||||
(when (and (eobp) (not (bolp))) (insert "\n")))
|
||||
(if extended? (end-of-line)
|
||||
(forward-line)
|
||||
(skip-chars-forward " \t")))))
|
||||
|
||||
|
||||
;;;; TODO, DEADLINE, Comments
|
||||
|
|
|
@ -4123,6 +4123,12 @@ Text.
|
|||
(org-mark-element)
|
||||
(org-insert-structure-template "foo")
|
||||
(buffer-string))))
|
||||
(should
|
||||
(string= " #+begin_foo\n Line 1\n Line2\n #+end_foo\n"
|
||||
(org-test-with-temp-text " Line 1\n Line2"
|
||||
(org-mark-element)
|
||||
(org-insert-structure-template "foo")
|
||||
(buffer-string))))
|
||||
;; Test point location.
|
||||
(should
|
||||
(string= "#+begin_foo\n"
|
||||
|
|
Loading…
Reference in New Issue