diff options
author | Carsten Dominik <carsten.dominik@gmail.com> | 2009-02-13 22:59:37 +0100 |
---|---|---|
committer | Carsten Dominik <carsten.dominik@gmail.com> | 2009-02-13 22:59:37 +0100 |
commit | 1f1574c9a2a3562299d40ceaaceb804ab1ab4831 (patch) | |
tree | 275da3381faaf7dbbb1f89f2c26e93d564ca8085 | |
parent | 29ff1446003593472769bb6ea846b23f66eec56c (diff) | |
download | org-mode-1f1574c9a2a3562299d40ceaaceb804ab1ab4831.tar.gz |
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.
-rwxr-xr-x | lisp/ChangeLog | 7 | ||||
-rw-r--r-- | lisp/org.el | 52 |
2 files changed, 59 insertions, 0 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 294a566..49aa38a 100755 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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. diff --git a/lisp/org.el b/lisp/org.el index e004ac3..e6fcd6a 100644 --- a/lisp/org.el +++ b/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)))) |