summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2013-02-28 10:21:08 +0100
committerBastien Guerry <bzg@altern.org>2013-02-28 10:21:08 +0100
commitfb920a38ad1ff66d319e61a7c92cf8af072ab77c (patch)
treedf627c344d936d93f519c30ac6598478ab22117d
parentf9cc5e72d937715d76f20df305554f20c6529cc4 (diff)
parent9dba62be72d18154d53987af2916f235ae7b4c14 (diff)
downloadorg-mode-fb920a38ad1ff66d319e61a7c92cf8af072ab77c.tar.gz
Merge branch 'master' of orgmode.org:org-mode
-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'.