Hooks: New system to tap into context-sensitive keys
Org-mode has many context-sensitive keys. A new hook system now allows add-ons to add functionality to these keys for contexts that are special for the add-on. For example, if an add-on wants to use C-c C-c in a special context, if must add a function to `org-ctrl-c-ctrl-c-hook' that will check for the context and run its command when the context is present.
This commit is contained in:
parent
29ff144600
commit
1f1574c9a2
|
@ -1,6 +1,13 @@
|
|||
2009-02-13 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org.el ("org-plot"): Help loading org-plot.
|
||||
(org-metaleft-hook, org-metaright-hook, org-metaup-hook)
|
||||
(org-metadown-hook, org-shiftmetaleft-hook)
|
||||
(org-shiftmetaright-hook, org-shiftmetaup-hook)
|
||||
(org-shiftmetadown-hook, org-metareturn-hook): New hooks.
|
||||
(org-shiftmetaleft, org-shiftmetaright, org-shiftmetaup)
|
||||
(org-shiftmetadown, org-metaleft, org-metaright, org-metaup)
|
||||
(org-metadown, org-ctrl-c-ctrl-c): Call the appropriate hook.
|
||||
|
||||
* org-publish.el (org-publish-get-base-files): Allow symbol `any'
|
||||
for selecting files with any (and even without) extension.
|
||||
|
|
52
lisp/org.el
52
lisp/org.el
|
@ -13266,6 +13266,43 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
|
|||
'delete-backward-char 'org-delete-backward-char)
|
||||
(org-defkey org-mode-map "|" 'org-force-self-insert))
|
||||
|
||||
(defvar org-ctrl-c-ctrl-c-hook nil
|
||||
"Hook for functions attaching themselves to `C-c C-c'.
|
||||
This can be used to add additional functionality to the C-c C-c key which
|
||||
executes context-dependent commands.
|
||||
Each function will be called with no arguments. The function must check
|
||||
if the context is appropriate for it to act. If yes, it should do its
|
||||
thing and then return a non-nil value. If the context is wrong,
|
||||
just do nothing.")
|
||||
|
||||
(defvar org-metaleft-hook nil
|
||||
"Hook for functions attaching themselves to `M-left'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-metaright-hook nil
|
||||
"Hook for functions attaching themselves to `M-right'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-metaup-hook nil
|
||||
"Hook for functions attaching themselves to `M-up'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-metadown-hook nil
|
||||
"Hook for functions attaching themselves to `M-down'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-shiftmetaleft-hook nil
|
||||
"Hook for functions attaching themselves to `M-S-left'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-shiftmetaright-hook nil
|
||||
"Hook for functions attaching themselves to `M-S-right'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-shiftmetaup-hook nil
|
||||
"Hook for functions attaching themselves to `M-S-up'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-shiftmetadown-hook nil
|
||||
"Hook for functions attaching themselves to `M-S-down'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
(defvar org-metareturn-hook nil
|
||||
"Hook for functions attaching themselves to `M-RET'.
|
||||
See `org-ctrl-c-ctrl-c-hook' for more information.")
|
||||
|
||||
(defun org-modifier-cursor-error ()
|
||||
"Throw an error, a modified cursor command was applied in wrong context."
|
||||
(error "This command is active in special context like tables, headlines or items"))
|
||||
|
@ -13301,6 +13338,7 @@ or `org-table-delete-column', depending on context.
|
|||
See the individual commands for more information."
|
||||
(interactive)
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-shiftmetaleft-hook))
|
||||
((org-at-table-p) (call-interactively 'org-table-delete-column))
|
||||
((org-on-heading-p) (call-interactively 'org-promote-subtree))
|
||||
((org-at-item-p) (call-interactively 'org-outdent-item))
|
||||
|
@ -13313,6 +13351,7 @@ or `org-table-insert-column', depending on context.
|
|||
See the individual commands for more information."
|
||||
(interactive)
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-shiftmetaright-hook))
|
||||
((org-at-table-p) (call-interactively 'org-table-insert-column))
|
||||
((org-on-heading-p) (call-interactively 'org-demote-subtree))
|
||||
((org-at-item-p) (call-interactively 'org-indent-item))
|
||||
|
@ -13325,10 +13364,12 @@ Calls `org-move-subtree-up' or `org-table-kill-row' or
|
|||
for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-shiftmetaup-hook))
|
||||
((org-at-table-p) (call-interactively 'org-table-kill-row))
|
||||
((org-on-heading-p) (call-interactively 'org-move-subtree-up))
|
||||
((org-at-item-p) (call-interactively 'org-move-item-up))
|
||||
(t (org-modifier-cursor-error))))
|
||||
|
||||
(defun org-shiftmetadown (&optional arg)
|
||||
"Move subtree down or insert table row.
|
||||
Calls `org-move-subtree-down' or `org-table-insert-row' or
|
||||
|
@ -13336,6 +13377,7 @@ Calls `org-move-subtree-down' or `org-table-insert-row' or
|
|||
commands for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-shiftmetadown-hook))
|
||||
((org-at-table-p) (call-interactively 'org-table-insert-row))
|
||||
((org-on-heading-p) (call-interactively 'org-move-subtree-down))
|
||||
((org-at-item-p) (call-interactively 'org-move-item-down))
|
||||
|
@ -13348,6 +13390,7 @@ With no specific context, calls the Emacs default `backward-word'.
|
|||
See the individual commands for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-metaleft-hook))
|
||||
((org-at-table-p) (org-call-with-arg 'org-table-move-column 'left))
|
||||
((or (org-on-heading-p) (org-region-active-p))
|
||||
(call-interactively 'org-do-promote))
|
||||
|
@ -13361,6 +13404,7 @@ 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))
|
||||
((or (org-on-heading-p) (org-region-active-p))
|
||||
(call-interactively 'org-do-demote))
|
||||
|
@ -13374,6 +13418,7 @@ Calls `org-move-subtree-up' or `org-table-move-row' or
|
|||
for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-metaup-hook))
|
||||
((org-at-table-p) (org-call-with-arg 'org-table-move-row 'up))
|
||||
((org-on-heading-p) (call-interactively 'org-move-subtree-up))
|
||||
((org-at-item-p) (call-interactively 'org-move-item-up))
|
||||
|
@ -13386,6 +13431,7 @@ Calls `org-move-subtree-down' or `org-table-move-row' or
|
|||
commands for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-metadown-hook))
|
||||
((org-at-table-p) (call-interactively 'org-table-move-row))
|
||||
((org-on-heading-p) (call-interactively 'org-move-subtree-down))
|
||||
((org-at-item-p) (call-interactively 'org-move-item-down))
|
||||
|
@ -13569,11 +13615,15 @@ When in an #+include line, visit the include file. Otherwise call
|
|||
((org-edit-fixed-width-region))
|
||||
(t (call-interactively 'ffap))))
|
||||
|
||||
|
||||
(defun org-ctrl-c-ctrl-c (&optional arg)
|
||||
"Set tags in headline, or update according to changed information at point.
|
||||
|
||||
This command does many different things, depending on context:
|
||||
|
||||
- If a function in `org-ctrl-c-ctrl-c-hook' recognizes this location,
|
||||
this is what we do.
|
||||
|
||||
- If the cursor is in a headline, prompt for tags and insert them
|
||||
into the current line, aligned to `org-tags-column'. When called
|
||||
with prefix arg, realign all tags in the current buffer.
|
||||
|
@ -13621,6 +13671,7 @@ This command does many different things, depending on context:
|
|||
((and (local-variable-p 'org-finish-function (current-buffer))
|
||||
(fboundp org-finish-function))
|
||||
(funcall org-finish-function))
|
||||
((run-hook-with-args-until-success 'org-ctrl-c-ctrl-c-hook))
|
||||
((org-at-property-p)
|
||||
(call-interactively 'org-property-action))
|
||||
((org-on-target-p) (call-interactively 'org-update-radio-target-regexp))
|
||||
|
@ -13834,6 +13885,7 @@ Calls `org-insert-heading' or `org-table-wrap-region', depending on context.
|
|||
See the individual commands for more information."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((run-hook-with-args-until-success 'org-metareturn-hook))
|
||||
((org-at-table-p)
|
||||
(call-interactively 'org-table-wrap-region))
|
||||
(t (call-interactively 'org-insert-heading))))
|
||||
|
|
Loading…
Reference in New Issue