# HG changeset patch # User Thierry Volpiatto # Date 1333350842 -7200 # Node ID 3fe612c045b96ff6ff7e4262d813fccb02fb0c3d # Parent 90804c9a8ede514915f792faaccbca9b43bf2dcc Extend boring buffers to regexps in winner-mode. (winner-boring-buffers-regexp): New user variable. (winner-set): Use it. diff --git a/lisp/winner.el b/lisp/winner.el --- a/lisp/winner.el +++ b/lisp/winner.el @@ -94,6 +94,11 @@ :type '(repeat string) :group 'winner) +(defcustom winner-boring-buffers-regexp nil + "`winner-undo' will not restore windows with buffers matching this regexp." + :type 'string + :group 'winner) + @@ -295,29 +300,35 @@ ;; Make sure point does not end up in the minibuffer and delete ;; windows displaying dead or boring buffers -;; (c.f. `winner-boring-buffers'). Return nil if all the windows -;; should be deleted. Preserve correct points and marks. +;; (c.f. `winner-boring-buffers', `winner-boring-buffers-regexp'). +;; Return nil if all the windows should be deleted. +;; Preserve correct points and marks. + (defun winner-set (conf) ;; For the format of `conf', see `winner-conf'. (let* ((buffers nil) (alive - ;; Possibly update `winner-point-alist' + ;; Possibly update `winner-point-alist' (loop for buf in (mapcar 'cdr (cdr conf)) for pos = (winner-get-point buf nil) if (and pos (not (memq buf buffers))) do (push buf buffers) collect pos))) (winner-set-conf (car conf)) - (let (xwins) ; to be deleted + (let (xwins) ; to be deleted ;; Restore points (dolist (win (winner-sorted-window-list)) - (unless (and (pop alive) - (setf (window-point win) - (winner-get-point (window-buffer win) win)) - (not (member (buffer-name (window-buffer win)) - winner-boring-buffers))) - (push win xwins))) ; delete this window + (unless (and (pop alive) + (setf (window-point win) + (winner-get-point (window-buffer win) win)) + (not (or (member (buffer-name (window-buffer win)) + winner-boring-buffers) + (and winner-boring-buffers-regexp + (string-match + winner-boring-buffers-regexp + (buffer-name (window-buffer win))))))) + (push win xwins))) ; delete this window ;; Restore marks (letf (((current-buffer))) @@ -330,10 +341,10 @@ ;; Return t if this is still a possible configuration. (or (null xwins) (progn - (mapc 'delete-window (cdr xwins)) ; delete all but one - (unless (one-window-p t) - (delete-window (car xwins)) - t)))))) + (mapc 'delete-window (cdr xwins)) ; delete all but one + (unless (one-window-p t) + (delete-window (car xwins)) + t))))))