orgstruct++-mode: Make more visible in docs, parse item body

orgstruct++-mode is an enhanced version of orgstruct mode that
also imports all indentation and paragraph settings into the major
mode.  Furthermore, it now allows to use M-RET and M-S-RET in items
after the first line.  The latter change was a request by Austin
Frank.
This commit is contained in:
Carsten Dominik 2009-02-22 12:42:20 +01:00
parent 94ec7c98b1
commit 9989e5f030
4 changed files with 66 additions and 28 deletions

View File

@ -1,3 +1,8 @@
2009-02-22 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Orgstruct mode): Describe `orgstruct++-mode'.
(Drawers): Mention the LOGBOOK drawer.
2009-02-20 Carsten Dominik <carsten.dominik@gmail.com> 2009-02-20 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Export options, Sectioning structure): Document the * org.texi (Export options, Sectioning structure): Document the

View File

@ -372,7 +372,7 @@ Interaction with other packages
Hacking Hacking
* Hooks:: Who to reach into Org's internals * Hooks:: How to reach into Org's internals
* Add-on packages:: Available extensions * Add-on packages:: Available extensions
* Adding hyperlink types:: New custom link types * Adding hyperlink types:: New custom link types
* Context-sensitive commands:: How to add functioality to such commands * Context-sensitive commands:: How to add functioality to such commands
@ -1505,22 +1505,24 @@ you can use the usual commands to follow these links.
@cindex minor mode for structure editing @cindex minor mode for structure editing
If you like the intuitive way the Org mode structure editing and list If you like the intuitive way the Org mode structure editing and list
formatting works, you might want to use these commands in other modes formatting works, you might want to use these commands in other modes like
like Text mode or Mail mode as well. The minor mode Orgstruct mode Text mode or Mail mode as well. The minor mode @code{orgstruct-mode} makes
makes this possible. You can always toggle the mode with @kbd{M-x this possible. Toggle the mode with @kbd{M-x orgstruct-mode}, or
orgstruct-mode}. To turn it on by default, for example in Mail mode, turn it on by default, for example in Mail mode, with one of:
use
@lisp @lisp
(add-hook 'mail-mode-hook 'turn-on-orgstruct) (add-hook 'mail-mode-hook 'turn-on-orgstruct)
(add-hook 'mail-mode-hook 'turn-on-orgstruct++)
@end lisp @end lisp
When this mode is active and the cursor is on a line that looks to When this mode is active and the cursor is on a line that looks to Org like a
Org like a headline of the first line of a list item, most headline of the first line of a list item, most structure editing commands
structure editing commands will work, even if the same keys normally will work, even if the same keys normally have different functionality in the
have different functionality in the major mode you are using. If the major mode you are using. If the cursor is not in one of those special
cursor is not in one of those special lines, Orgstruct mode lurks lines, Orgstruct mode lurks silently in the shadow. When you use
silently in the shadow. @code{orgstruct++-mode}, Org will also export indentation and autofill
settings into that mode, and detect item context after the first line of an
item.
@node Tables, Hyperlinks, Document Structure, Top @node Tables, Hyperlinks, Document Structure, Top
@chapter Tables @chapter Tables

View File

@ -1,3 +1,13 @@
2009-02-22 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (orgstruct++-mode): New function.
(turn-on-orgstruct++): Call `orgstruct++-mode'.
(org-context-p): Allow detecting item context after the first line
of an item.
(orgstruct-make-binding): Detect if item-body context should be
seen.
(orgstruct-is-++): New variable.
2009-02-21 Carsten Dominik <carsten.dominik@gmail.com> 2009-02-21 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-reload): New command. * org.el (org-reload): New command.

View File

@ -6267,12 +6267,18 @@ C-c C-c Set tags / toggle checkbox"
"Unconditionally turn on `orgstruct-mode'." "Unconditionally turn on `orgstruct-mode'."
(orgstruct-mode 1)) (orgstruct-mode 1))
;;;###autoload (defun orgstruct++-mode (&optional arg)
(defun turn-on-orgstruct++ () "Toggle `orgstruct-mode', the enhanced version of it.
"Unconditionally turn on `orgstruct-mode', and force org-mode indentations.
In addition to setting orgstruct-mode, this also exports all indentation and In addition to setting orgstruct-mode, this also exports all indentation and
autofilling variables from org-mode into the buffer. Note that turning autofilling variables from org-mode into the buffer. It will also
off orgstruct-mode will *not* remove these additional settings." recognize item context in multiline items.
Note that turning off orgstruct-mode will *not* remove the
indentation/paragraph settings. This can only be done by refreshing the
major mode, for example with \[normal-mode]."
(interactive "P")
(setq arg (prefix-numeric-value (or arg (if orgstruct-mode -1 1))))
(if (< arg 1)
(orgstruct-mode -1)
(orgstruct-mode 1) (orgstruct-mode 1)
(let (var val) (let (var val)
(mapc (mapc
@ -6282,7 +6288,17 @@ off orgstruct-mode will *not* remove these additional settings."
(symbol-name (car x))) (symbol-name (car x)))
(setq var (car x) val (nth 1 x)) (setq var (car x) val (nth 1 x))
(org-set-local var (if (eq (car-safe val) 'quote) (nth 1 val) val)))) (org-set-local var (if (eq (car-safe val) 'quote) (nth 1 val) val))))
org-local-vars))) org-local-vars)
(org-set-local 'orgstruct-is-++ t))))
(defvar orgstruct-is-++ nil
"Is orgstruct-mode in ++ version in the current-buffer?")
(make-variable-buffer-local 'orgstruct-is-++)
;;;###autoload
(defun turn-on-orgstruct++ ()
"Unconditionally turn on `orgstruct++-mode'."
(orgstruct++-mode 1))
(defun orgstruct-error () (defun orgstruct-error ()
"Error when there is no default binding for a structure key." "Error when there is no default binding for a structure key."
@ -6355,7 +6371,10 @@ to execute outside of tables."
"'.") "'.")
'(interactive "p") '(interactive "p")
(list 'if (list 'if
'(org-context-p 'headline 'item) `(org-context-p 'headline 'item
(and orgstruct-is-++
,(and (memq fun '(org-insert-heading org-insert-todo-heading)) t)
'item-body))
(list 'org-run-like-in-org-mode (list 'quote fun)) (list 'org-run-like-in-org-mode (list 'quote fun))
(list 'let '(orgstruct-mode) (list 'let '(orgstruct-mode)
(list 'call-interactively (list 'call-interactively
@ -6376,7 +6395,9 @@ Possible values in the list of contexts are `table', `headline', and `item'."
;;????????? (looking-at "\\*+")) ;;????????? (looking-at "\\*+"))
(looking-at outline-regexp)) (looking-at outline-regexp))
(and (memq 'item contexts) (and (memq 'item contexts)
(looking-at "[ \t]*\\([-+*] \\|[0-9]+[.)] \\)"))) (looking-at "[ \t]*\\([-+*] \\|[0-9]+[.)] \\)"))
(and (memq 'item-body contexts)
(org-in-item-p)))
(goto-char pos)))) (goto-char pos))))
(defun org-get-local-variables () (defun org-get-local-variables ()