emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r109577: * lisp/subr.el (internal--be


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109577: * lisp/subr.el (internal--before-with-seleted-window)
Date: Sun, 12 Aug 2012 18:52:33 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109577
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Sun 2012-08-12 18:52:33 -0400
message:
  * lisp/subr.el (internal--before-with-seleted-window)
  (internal--after-with-seleted-window): New functions.
  (with-selected-window): Use them, to replace dependency on tty-top-frame.
modified:
  lisp/ChangeLog
  lisp/subr.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-08-12 22:06:56 +0000
+++ b/lisp/ChangeLog    2012-08-12 22:52:33 +0000
@@ -1,3 +1,9 @@
+2012-08-12  Stefan Monnier  <address@hidden>
+
+       * subr.el (internal--before-with-seleted-window)
+       (internal--after-with-seleted-window): New functions.
+       (with-selected-window): Use them, to replace dependency on 
tty-top-frame.
+
 2012-08-12  Nobuyoshi Nakada  <address@hidden>
 
        * progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary

=== modified file 'lisp/subr.el'
--- a/lisp/subr.el      2012-08-10 14:47:12 +0000
+++ b/lisp/subr.el      2012-08-12 22:52:33 +0000
@@ -3023,6 +3023,30 @@
      (set-buffer ,buffer-or-name)
      ,@body))
 
+(defun internal--before-with-seleted-window (window)
+  (let ((other-frame (window-frame window)))
+    (list window (selected-window)
+          ;; Selecting a window on another frame also changes that
+          ;; frame's frame-selected-window.  We must save&restore it.
+          (unless (eq (selected-frame) other-frame)
+            (frame-selected-window other-frame))
+          ;; Also remember the top-frame if on ttys.
+          (unless (eq (selected-frame) other-frame)
+            (tty-top-frame other-frame)))))
+
+(defun internal--after-with-seleted-window (state)
+  ;; First reset frame-selected-window.
+  (when (window-live-p (nth 2 state))
+    ;; We don't use set-frame-selected-window because it does not
+    ;; pass the `norecord' argument to Fselect_window.
+    (select-window (nth 2 state) 'norecord)
+    (and (frame-live-p (nth 3 state))
+         (not (eq (tty-top-frame) (nth 3 state)))
+         (select-frame (nth 3 state) 'norecord)))
+  ;; Then reset the actual selected-window.
+  (when (window-live-p (nth 2 state))
+    (select-window (nth 2 state) 'norecord)))
+
 (defmacro with-selected-window (window &rest body)
   "Execute the forms in BODY with WINDOW as the selected window.
 The value returned is the value of the last form in BODY.
@@ -3040,34 +3064,13 @@
 potentially make a different buffer current.  It does not alter
 the buffer list ordering."
   (declare (indent 1) (debug t))
-  ;; Most of this code is a copy of save-selected-window.
-  `(let* ((save-selected-window-destination ,window)
-         (save-selected-window-frame
-          (window-frame save-selected-window-destination))
-          (save-selected-window-window (selected-window))
-          ;; Selecting a window on another frame also changes that
-          ;; frame's frame-selected-window.  We must save&restore it.
-          (save-selected-window-other-frame
-           (unless (eq (selected-frame) save-selected-window-frame)
-             (frame-selected-window save-selected-window-frame)))
-         (save-selected-window-top-frame
-           (unless (eq (selected-frame) save-selected-window-frame)
-            (tty-top-frame save-selected-window-frame))))
+  `(let ((save-selected-window--state
+          (internal--before-with-seleted-window ,window)))
      (save-current-buffer
        (unwind-protect
-           (progn (select-window save-selected-window-destination 'norecord)
+           (progn (select-window (car save-selected-window--state) 'norecord)
                  ,@body)
-         ;; First reset frame-selected-window.
-         (when (window-live-p save-selected-window-other-frame)
-          ;; We don't use set-frame-selected-window because it does not
-          ;; pass the `norecord' argument to Fselect_window.
-          (select-window save-selected-window-other-frame 'norecord)
-          (and (frame-live-p save-selected-window-top-frame)
-               (not (eq (tty-top-frame) save-selected-window-top-frame))
-               (select-frame save-selected-window-top-frame 'norecord)))
-         ;; Then reset the actual selected-window.
-        (when (window-live-p save-selected-window-window)
-          (select-window save-selected-window-window 'norecord))))))
+         (internal--before-with-seleted-window save-selected-window--state)))))
 
 (defmacro with-selected-frame (frame &rest body)
   "Execute the forms in BODY with FRAME as the selected frame.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]