Nicolas Goaziou n.goaz...@gmail.com writes:
I select the region, then `C-x r t' to insert the whitespaces.
I use C-x r o, which doesn't require to count the spaces, and is more
visual.
Clever -- I start to love this mailing list ;)
But I don't feel very clever neither, we should have a better
way for this -- something that deactivate folding and indent
to the beginning of the list item above.
I'm not sure we should provide this. There are already so many ways,
often in muscle memory, to achieve the same in Emacs that we probably
shouldn't bother.
The attached patch let `org-metaright' indent a drawer or a block
correctly. It introduces two new function ̀org-indent-block' and
`org-indent-drawer' which derive from local hacks I'm using quite
often now.
Perhaps ̀org-metaright' is not the best keybinding for this function,
please suggest a better one.
Thanks,
From 89e8c4e37b7f2f7bbf27b31d85ff8e328046ab1b Mon Sep 17 00:00:00 2001
From: Bastien Guerry b...@altern.org
Date: Wed, 25 Jan 2012 15:33:45 +0100
Subject: [PATCH] org.el: Make `org-metaright' indent drawers and blocks.
* org.el (org-at-drawer-p): Normalize the docstring to match
other `org-at-*-p' docstrings.
(org-indent-block, org-indent-drawer, org-at-block-p): New
functions.
(org-metaright): Use the new functions to indent a drawer or a
block depending on the context. Also update the docstring.
---
lisp/org.el | 55 ---
1 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index 61cef0a..689784d 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -17990,14 +17990,16 @@ See the individual commands for more information.
(t (call-interactively 'backward-word
(defun org-metaright (optional arg)
- Demote subtree or move table column to right.
-Calls `org-do-demote' or `org-table-move-column', depending on context.
+ Demote a subtree, a list item or move table column to right.
+In front of a drawer or a block keyword, indent it correctly.
With no specific context, calls the Emacs default `forward-word'.
See the individual commands for more information.
(interactive P)
(cond
((run-hook-with-args-until-success 'org-metaright-hook))
((org-at-table-p) (call-interactively 'org-table-move-column))
+ ((org-at-drawer-p) (call-interactively 'org-indent-drawer))
+ ((org-at-block-p) (call-interactively 'org-indent-block))
((org-with-limited-levels
(or (org-at-heading-p)
(and (org-region-active-p)
@@ -20161,6 +20163,47 @@ If point is in an inline task, mark that task instead.
t t))
(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))
+
(defvar org-adaptive-fill-regexp-backup adaptive-fill-regexp
Variable to store copy of `adaptive-fill-regexp'.
Since `adaptive-fill-regexp' is set to never match, we need to
@@ -20712,11 +20755,17 @@ This version does not only check the character property, but also
(defalias 'org-on-heading-p 'org-at-heading-p)
(defun org-at-drawer-p nil
- Whether point is at a drawer.
+ Is cursor at a drawer keyword?
(save-excursion
(move-beginning-of-line 1)
(looking-at org-drawer-regexp)))
+(defun org-at-block-p nil
+ Is cursor at a block keyword?
+ (save-excursion
+(move-beginning-of-line 1)
+(looking-at org-block-regexp)))
+
(defun org-point-at-end-of-empty-headline ()
If point is at the end of an empty headline, return t, else nil.
If the heading only contains a TODO keyword, it is still still considered
--
1.7.8.4
--
Bastien