summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Dominik <carsten.dominik@gmail.com>2013-02-28 08:57:44 +0100
committerCarsten Dominik <carsten.dominik@gmail.com>2013-02-28 09:35:34 +0100
commit9c58082c46ef1ca0399953a7e9ff8e4a50f9e573 (patch)
treec5ffb3eba3b2edd332ec218eba84fd4ce8245db4
parentcbba811a733a1a49213d8df13a7b598f1229212f (diff)
downloadorg-mode-9c58082c46ef1ca0399953a7e9ff8e4a50f9e573.tar.gz
Make repeating a subtree-restricted export command remember the subtree
Export commands can be restricted to a specific subtree. When using a prefix argument to org-export-dispatch, the restriction did not stick, i.e. the command would be restricted to whatever note the cursor happens to be in. This made it difficult to repeat export of a subtree while editing it. This change introduces a new marker and uses this marker to remember the cursor position of the previous export command. So repeating a subtree-restricted command will now re-export the same subtree, provided you are still in the same buffer. To break this connection, just make a new export without relying on the prefix argument. * lisp/ox.el (org-export-dispatch-last-position): New variable (org-export-dispatch): Save position of cursor at the moment when the export command is called. Restore that position temporarily when repeating the previous export command.
-rw-r--r--lisp/ox.el48
1 files changed, 34 insertions, 14 deletions
diff --git a/lisp/ox.el b/lisp/ox.el
index 74d0d86..26be0fb 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -297,6 +297,10 @@ This variable is set with `org-export-define-backend' and
The value should be a list. Its CAR is the action, as a symbol,
and its CDR is a list of export options.")
+(defvar org-export-dispatch-last-position (make-marker)
+ "The position where the last export command was created using the dispatcher.
+This marker will be used with `C-u C-c C-e' to make sure export repetition
+uses the same subtree if the previous command was restricted to a subtree.")
;;; User-configurable Variables
@@ -5310,17 +5314,23 @@ When ARG is \\[universal-argument] \\[universal-argument], display the asynchron
((and arg org-export-dispatch-last-action))
(t (save-window-excursion
(unwind-protect
- ;; Store this export command.
- (setq org-export-dispatch-last-action
- (org-export--dispatch-ui
- (list org-export-initial-scope
- (and org-export-in-background 'async))
- nil
- org-export-dispatch-use-expert-ui))
+ (progn
+ ;; Remember where we are
+ (move-marker org-export-dispatch-last-position
+ (point))
+ ;; Get and store an export command
+ (setq org-export-dispatch-last-action
+ (org-export--dispatch-ui
+ (list org-export-initial-scope
+ (and org-export-in-background 'async))
+ nil
+ org-export-dispatch-use-expert-ui)))
(and (get-buffer "*Org Export Dispatcher*")
(kill-buffer "*Org Export Dispatcher*")))))))
(action (car input))
(optns (cdr input)))
+ (unless (memq 'subtree optns)
+ (move-marker org-export-dispatch-last-position nil))
(case action
;; First handle special hard-coded actions.
(stack (org-export-stack))
@@ -5336,13 +5346,23 @@ When ARG is \\[universal-argument] \\[universal-argument], display the asynchron
(memq 'force optns)
(memq 'async optns)))
(publish-all (org-publish-all (memq 'force optns) (memq 'async optns)))
- (otherwise (funcall action
- ;; Return a symbol instead of a list to ease
- ;; asynchronous export macro use.
- (and (memq 'async optns) t)
- (and (memq 'subtree optns) t)
- (and (memq 'visible optns) t)
- (and (memq 'body optns) t))))))
+ (otherwise
+ (save-excursion
+ (when arg
+ ;; Repeating command, maybe move cursor
+ ;; to restore subtree context
+ (if (eq (marker-buffer org-export-dispatch-last-position)
+ (current-buffer))
+ (goto-char org-export-dispatch-last-position)
+ ;; We are in a differnet buffer, forget position
+ (move-marker org-export-dispatch-last-position nil)))
+ (funcall action
+ ;; Return a symbol instead of a list to ease
+ ;; asynchronous export macro use.
+ (and (memq 'async optns) t)
+ (and (memq 'subtree optns) t)
+ (and (memq 'visible optns) t)
+ (and (memq 'body optns) t)))))))
(defun org-export--dispatch-ui (options first-key expertp)
"Handle interface for `org-export-dispatch'.