diff options
author | Bastien Guerry <bzg@altern.org> | 2013-02-28 10:21:08 +0100 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2013-02-28 10:21:08 +0100 |
commit | fb920a38ad1ff66d319e61a7c92cf8af072ab77c (patch) | |
tree | df627c344d936d93f519c30ac6598478ab22117d | |
parent | f9cc5e72d937715d76f20df305554f20c6529cc4 (diff) | |
parent | 9dba62be72d18154d53987af2916f235ae7b4c14 (diff) | |
download | org-mode-fb920a38ad1ff66d319e61a7c92cf8af072ab77c.tar.gz |
Merge branch 'master' of orgmode.org:org-mode
-rw-r--r-- | lisp/ox.el | 48 |
1 files changed, 34 insertions, 14 deletions
@@ -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'. |