|
@@ -110,12 +110,13 @@ Also, do not record undo information."
|
|
|
s))
|
|
|
|
|
|
(defmacro org-preserve-lc (&rest body)
|
|
|
- `(let ((_line (org-current-line))
|
|
|
- (_col (current-column)))
|
|
|
- (unwind-protect
|
|
|
- (progn ,@body)
|
|
|
- (org-goto-line _line)
|
|
|
- (org-move-to-column _col))))
|
|
|
+ (org-with-gensyms (line col)
|
|
|
+ `(let ((,line (org-current-line))
|
|
|
+ (,col (current-column)))
|
|
|
+ (unwind-protect
|
|
|
+ (progn ,@body)
|
|
|
+ (org-goto-line ,line)
|
|
|
+ (org-move-to-column ,col)))))
|
|
|
|
|
|
(defmacro org-without-partial-completion (&rest body)
|
|
|
`(if (and (boundp 'partial-completion-mode)
|
|
@@ -142,12 +143,13 @@ We use a macro so that the test can happen at compilation time."
|
|
|
|
|
|
(defmacro org-with-point-at (pom &rest body)
|
|
|
"Move to buffer and point of point-or-marker POM for the duration of BODY."
|
|
|
- `(let ((pom ,pom))
|
|
|
- (save-excursion
|
|
|
- (if (markerp pom) (set-buffer (marker-buffer pom)))
|
|
|
+ (org-with-gensyms (mpom)
|
|
|
+ `(let ((,mpom ,pom))
|
|
|
(save-excursion
|
|
|
- (goto-char (or pom (point)))
|
|
|
- ,@body))))
|
|
|
+ (if (markerp ,mpom) (set-buffer (marker-buffer ,mpom)))
|
|
|
+ (save-excursion
|
|
|
+ (goto-char (or ,mpom (point)))
|
|
|
+ ,@body)))))
|
|
|
(put 'org-with-point-at 'lisp-indent-function 1)
|
|
|
|
|
|
(defmacro org-no-warnings (&rest body)
|
|
@@ -180,26 +182,27 @@ We use a macro so that the test can happen at compilation time."
|
|
|
|
|
|
(defmacro org-with-remote-undo (_buffer &rest _body)
|
|
|
"Execute BODY while recording undo information in two buffers."
|
|
|
- `(let ((_cline (org-current-line))
|
|
|
- (_cmd this-command)
|
|
|
- (_buf1 (current-buffer))
|
|
|
- (_buf2 ,_buffer)
|
|
|
- (_undo1 buffer-undo-list)
|
|
|
- (_undo2 (with-current-buffer ,_buffer buffer-undo-list))
|
|
|
- _c1 _c2)
|
|
|
- ,@_body
|
|
|
- (when org-agenda-allow-remote-undo
|
|
|
- (setq _c1 (org-verify-change-for-undo
|
|
|
- _undo1 (with-current-buffer _buf1 buffer-undo-list))
|
|
|
- _c2 (org-verify-change-for-undo
|
|
|
- _undo2 (with-current-buffer _buf2 buffer-undo-list)))
|
|
|
- (when (or _c1 _c2)
|
|
|
- ;; make sure there are undo boundaries
|
|
|
- (and _c1 (with-current-buffer _buf1 (undo-boundary)))
|
|
|
- (and _c2 (with-current-buffer _buf2 (undo-boundary)))
|
|
|
- ;; remember which buffer to undo
|
|
|
- (push (list _cmd _cline _buf1 _c1 _buf2 _c2)
|
|
|
- org-agenda-undo-list)))))
|
|
|
+ (org-with-gensyms (cline cmd buf1 buf2 undo1 undo2 c1 c2)
|
|
|
+ `(let ((,cline (org-current-line))
|
|
|
+ (,cmd this-command)
|
|
|
+ (,buf1 (current-buffer))
|
|
|
+ (,buf2 ,_buffer)
|
|
|
+ (,undo1 buffer-undo-list)
|
|
|
+ (,undo2 (with-current-buffer ,_buffer buffer-undo-list))
|
|
|
+ ,c1 ,c2)
|
|
|
+ ,@_body
|
|
|
+ (when org-agenda-allow-remote-undo
|
|
|
+ (setq ,c1 (org-verify-change-for-undo
|
|
|
+ ,undo1 (with-current-buffer ,buf1 buffer-undo-list))
|
|
|
+ ,c2 (org-verify-change-for-undo
|
|
|
+ ,undo2 (with-current-buffer ,buf2 buffer-undo-list)))
|
|
|
+ (when (or ,c1 ,c2)
|
|
|
+ ;; make sure there are undo boundaries
|
|
|
+ (and ,c1 (with-current-buffer ,buf1 (undo-boundary)))
|
|
|
+ (and ,c2 (with-current-buffer ,buf2 (undo-boundary)))
|
|
|
+ ;; remember which buffer to undo
|
|
|
+ (push (list ,cmd ,cline ,buf1 ,c1 ,buf2 ,c2)
|
|
|
+ org-agenda-undo-list))))))
|
|
|
(put 'org-with-remote-undo 'lisp-indent-function 1)
|
|
|
|
|
|
(defmacro org-no-read-only (&rest body)
|
|
@@ -331,18 +334,19 @@ but it also means that the buffer should stay alive
|
|
|
during the operation, because otherwise all these markers will
|
|
|
point nowhere."
|
|
|
(declare (indent 1))
|
|
|
- `(let ((data (org-outline-overlay-data ,use-markers))
|
|
|
- rtn)
|
|
|
- (unwind-protect
|
|
|
- (progn
|
|
|
- (setq rtn (progn ,@body))
|
|
|
- (org-set-outline-overlay-data data))
|
|
|
- (when ,use-markers
|
|
|
- (mapc (lambda (c)
|
|
|
- (and (markerp (car c)) (move-marker (car c) nil))
|
|
|
- (and (markerp (cdr c)) (move-marker (cdr c) nil)))
|
|
|
- data)))
|
|
|
- rtn))
|
|
|
+ (org-with-gensyms (data rtn)
|
|
|
+ `(let ((,data (org-outline-overlay-data ,use-markers))
|
|
|
+ ,rtn)
|
|
|
+ (unwind-protect
|
|
|
+ (progn
|
|
|
+ (setq ,rtn (progn ,@body))
|
|
|
+ (org-set-outline-overlay-data ,data))
|
|
|
+ (when ,use-markers
|
|
|
+ (mapc (lambda (c)
|
|
|
+ (and (markerp (car c)) (move-marker (car c) nil))
|
|
|
+ (and (markerp (cdr c)) (move-marker (cdr c) nil)))
|
|
|
+ ,data)))
|
|
|
+ ,rtn)))
|
|
|
|
|
|
(defmacro org-with-wide-buffer (&rest body)
|
|
|
"Execute body while temporarily widening the buffer."
|