emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: David Maus <dmaus@ictsoc.de>
To: emacs-orgmode@gnu.org
Cc: David Maus <dmaus@ictsoc.de>
Subject: [PATCH 3/7] Use new macro org-with-uninterned
Date: Tue,  2 Aug 2011 11:23:36 +0200	[thread overview]
Message-ID: <1312277020-7888-4-git-send-email-dmaus@ictsoc.de> (raw)
In-Reply-To: <1312277020-7888-1-git-send-email-dmaus@ictsoc.de>

* org-macs.el (org-preserve-lc, org-with-point-at)
(org-with-remote-undo, org-save-outline-visibility): Use new macro
org-with-uninterned.
---
 lisp/org-macs.el |   90 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 47 insertions(+), 43 deletions(-)

diff --git a/lisp/org-macs.el b/lisp/org-macs.el
index 7a0cc60..ab21ef7 100644
--- a/lisp/org-macs.el
+++ b/lisp/org-macs.el
@@ -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-uninterned (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-uninterned (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-uninterned (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-uninterned (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."
-- 
1.7.2.5

  parent reply	other threads:[~2011-08-02  9:24 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-02  9:23 [PATCH 0/8] Org mode macros, refactored David Maus
2011-08-02  9:23 ` [PATCH 1/7] New macro: Execute BODY in enviroment with uninterned SYMBOLS David Maus
2011-08-02 13:48   ` David Maus
     [not found]   ` <CAJcAo8uv46JCx9cG0x_ip9DMQ-aN=buLRO_fONPoFuDkik6J1Q@mail.gmail.com>
2011-08-10  7:43     ` David Maus
2011-08-16 16:34       ` Bastien
2011-08-16 17:08         ` David Maus
2011-08-16 17:30           ` Bastien
2011-08-02  9:23 ` [PATCH 2/7] New macro: Evaluate FORM in ENVIRONMENT David Maus
2011-08-02 10:50   ` Štěpán Němec
2011-08-02 13:25     ` David Maus
2011-08-02 13:49   ` David Maus
2011-08-02  9:23 ` David Maus [this message]
2011-08-02  9:23 ` [PATCH 4/7] New function: Substitute posix classes in regular expression David Maus
2011-08-02  9:23 ` [PATCH 5/7] Use macro org-with-uninterned David Maus
2011-08-02  9:23 ` [PATCH 6/7] Use org-eval-in-environment, make macros functions David Maus
2011-08-02  9:23 ` [PATCH 7/7] Make org-batch-store-agenda-views a fun, use org-eval-in-environment David Maus
2011-08-02  9:34 ` [PATCH 0/8] Org mode macros, refactored David Maus
2011-08-02 10:44 ` Štěpán Němec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1312277020-7888-4-git-send-email-dmaus@ictsoc.de \
    --to=dmaus@ictsoc.de \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).