Rewrite `org-indent-drawer' and `org-indent-block'

* lisp/org.el (org-indent-block, org-indent-drawer): Rewrite functions.
This commit is contained in:
Nicolas Goaziou 2014-04-28 18:38:31 +02:00
parent fe129fb352
commit 7515066d94
1 changed files with 34 additions and 41 deletions

View File

@ -22382,47 +22382,6 @@ Also align node properties according to `org-property-format'."
(org--align-node-property)
(org-move-to-column column)))))))))
(defun org-indent-drawer ()
"Indent the drawer at point."
(interactive)
(let ((p (point))
(e (and (save-excursion (re-search-forward ":END:" nil t))
(match-end 0)))
(folded
(save-excursion
(end-of-line)
(when (overlays-at (point))
(member 'invisible (overlay-properties
(car (overlays-at (point)))))))))
(when folded (org-cycle))
(indent-for-tab-command)
(while (and (move-beginning-of-line 2) (< (point) e))
(indent-for-tab-command))
(goto-char p)
(when folded (org-cycle)))
(message "Drawer at point indented"))
(defun org-indent-block ()
"Indent the block at point."
(interactive)
(let ((p (point))
(case-fold-search t)
(e (and (save-excursion (re-search-forward "#\\+end_?\\(?:[a-z]+\\)?" nil t))
(match-end 0)))
(folded
(save-excursion
(end-of-line)
(when (overlays-at (point))
(member 'invisible (overlay-properties
(car (overlays-at (point)))))))))
(when folded (org-cycle))
(indent-for-tab-command)
(while (and (move-beginning-of-line 2) (< (point) e))
(indent-for-tab-command))
(goto-char p)
(when folded (org-cycle)))
(message "Block at point indented"))
(defun org-indent-region (start end)
"Indent each non-blank line in the region.
Called from a program, START and END specify the region to
@ -22520,6 +22479,40 @@ assumed to be significant there."
(set-marker element-end nil))))
(set-marker end nil))))
(defun org-indent-drawer ()
"Indent the drawer at point."
(interactive)
(unless (save-excursion
(beginning-of-line)
(org-looking-at-p org-drawer-regexp))
(user-error "Not at a drawer"))
(let ((element (org-element-at-point)))
(unless (memq (org-element-type element) '(drawer property-drawer))
(user-error "Not at a drawer"))
(org-with-wide-buffer
(org-indent-region (org-element-property :begin element)
(org-element-property :end element))))
(message "Drawer at point indented"))
(defun org-indent-block ()
"Indent the block at point."
(interactive)
(unless (save-excursion
(beginning-of-line)
(let ((case-fold-search t))
(org-looking-at-p "[ \t]*#\\+\\(begin\\|end\\)_")))
(user-error "Not at a block"))
(let ((element (org-element-at-point)))
(unless (memq (org-element-type element)
'(comment-block center-block example-block export-block
quote-block special-block src-block
verse-block))
(user-error "Not at a block"))
(org-with-wide-buffer
(org-indent-region (org-element-property :begin element)
(org-element-property :end element))))
(message "Block at point indented"))
;;; Filling