GNU bug report logs - #8911
bs-cycle-next deletes window in some cases.

Previous Next

Package: emacs;

Reported by: Juanma Barranquero <lekktu <at> gmail.com>

Date: Tue, 21 Jun 2011 11:03:01 UTC

Severity: normal

Done: Juanma Barranquero <lekktu <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Juanma Barranquero <lekktu <at> gmail.com>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: martin rudalics <rudalics <at> gmx.at>, Drew Adams <drew.adams <at> oracle.com>, 8911 <at> debbugs.gnu.org
Subject: bug#8911: bs-cycle-next deletes window in some cases.
Date: Mon, 27 Jun 2011 22:11:52 +0200
This code, which is mostly Martin's, fixes case 2. The user can
override the "signal error" behavior by customizing
display-buffer-alist or adding

(push '(((label . bs-cycle-next)
         (label . bs-cycle-previous))
        reuse-window
        (reuse-window same nil nil)
        (reuse-window-dedicated . t)
        (override . t))
      display-buffer-alist)

to their .emacs.

OK to install?

   J


=== modified file 'lisp/bs.el'
--- lisp/bs.el	2011-06-27 01:52:37 +0000
+++ lisp/bs.el	2011-06-27 19:59:41 +0000
@@ -1190,6 +1190,15 @@
 (defvar bs--cycle-list nil
   "Current buffer list used for cycling.")

+(defun bs--reuse-window-unless-dedicated (buffer &rest _args)
+ "Display BUFFER in the selected window.
+If the selected window is dedicated, signal an error instead.
+This function is intended to be called from `display-buffer'.
+To override it, see `display-buffer-alist'."
+ (if (and (window-dedicated-p) (not (eq (window-buffer) buffer)))
+     (error "Selected window is dedicated to its buffer")
+   (display-buffer-same-window buffer)))
+
 ;;;###autoload
 (defun bs-cycle-next ()
   "Select next buffer defined by buffer cycling.
@@ -1215,7 +1224,9 @@
         ;; We don't want the frame iconified if the only window in the frame
         ;; happens to be dedicated.
         (bury-buffer (current-buffer))
-	(switch-to-buffer next)
+	(display-buffer next
+			'((fun-with-args bs--reuse-window-unless-dedicated))
+			'bs-cycle-next)
 	(setq bs--cycle-list (append (cdr cycle-list)
 				     (list (car cycle-list))))
 	(bs-message-without-log "Next buffers: %s"
@@ -1244,7 +1255,9 @@
 					    bs--cycle-list)))
 	     (prev-buffer (car tupel))
 	     (cycle-list (cdr tupel)))
-	(switch-to-buffer prev-buffer)
+	(display-buffer prev-buffer
+			'((fun-with-args bs--reuse-window-unless-dedicated))
+			'bs-cycle-previous)
 	(setq bs--cycle-list (append (last cycle-list)
 				     (reverse (cdr (reverse cycle-list)))))
 	(bs-message-without-log "Previous buffers: %s"




This bug report was last modified 13 years and 324 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.