Subject: 24.0.94; [PATCH] Winner-mode doesn't handle regexps for boring buffers.

From: Thierry Volpiatto <[email-masked]>
Date: Mon, 02 Apr 2012 09:21:53 +0200

Hi,
sometime it is not possible to use just `winner-boring-buffers' when a
particular mode create lot of buffers like "*foo-mode-<this>" or
numbered buffers.
here a patch to allow the use of regexp for boring buffers.
# HG changeset patch
# User Thierry Volpiatto <[email-masked]>
# 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))))))

In GNU Emacs 24.0.94.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2012-04-01 on thierry-MM061
Windowing system distributor `The X.Org Foundation', version 11.0.11004000
Configured using:
 `configure '--with-x-toolkit=lucid' '--without-rsvg' '--without-gconf'
 '--with-wide-int''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: fr_FR.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  display-battery-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  auto-image-file-mode: t
  show-paren-mode: t
  display-time-mode: t
  savehist-mode: t
  minibuffer-depth-indicate-mode: t
  eldoc-mode: t
  helm-mode: t
  helm-dired-mode: Enable helm completion in Dired functions.
Bindings affected are C, R, S, H.
This is deprecated for Emacs24+ users, use `helm-mode' instead.
  shell-dirtrack-mode: t
  diff-auto-refine-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <down> 
<down> <down> <down> <down> <down> <down> <down> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> 
<up> <up> <up> <up> q C-x C-s C-x c q <tab> <down> 
<down> <return> <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <left> <left> <left> 
<left> <left> <left> <left> <left> <left> <left> <left> 
<left> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> E x t e n d SPC 
b o r i n g SPC <right> <right> <right> <right> <right> 
<right> s <right> t o SPC <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <return> M-( 
M-y M-y <return> <right> : SPC N e w SPC u s e r SPC 
v a r i a b l e . <return> M-( w i n n e r - s e t 
<right> : SPC <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
<C-M-down> <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
<C-M-down> <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
<C-M-down> <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
<C-M-down> <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
<C-M-down> <C-M-down> <C-M-down> <C-M-down> <C-M-down> 
U s e SPC i t . C-c C-c C-x c q <tab> <down> <down> 
<down> <down> <down> <return> <down> C-e . p a t c 
h <return> M-x r e p <down> <down> <down> <return>

Recent messages:

(No changes need to be saved)

Edit the message and hit C-c C-c to accept it.

Saving file /tmp/xhg-qrefresh10974s8O...
Wrote /tmp/xhg-qrefresh10974s8O

Exported revision 119360 to /home/thierry/labo/emacs-hg-qp/patch-r119360.patch.

Load-path shadows:
~/elisp/emacs-helm-extensions/helm-descbinds hides ~/elisp/emacs-helm/helm-descbinds
~/elisp/org-active/contrib/lisp/org-eshell hides /usr/local/share/emacs/24.0.94/lisp/org/org-eshell
~/elisp/org-active/contrib/lisp/org-odt hides /usr/local/share/emacs/24.0.94/lisp/org/org-odt
~/elisp/org-active/contrib/lisp/org-lparse hides /usr/local/share/emacs/24.0.94/lisp/org/org-lparse
~/elisp/emms/lisp/tq hides /usr/local/share/emacs/24.0.94/lisp/emacs-lisp/tq

Features:
(shadow gnus-dired nnir mail-extr gnus-msg emacsbug sendmail helm-ring
newcomment helm-elisp cl-specs edebug helm-eval time-stamp find-func
winner helm-command animate tabify org-table make-mode vc-rcs sh-script
generic xhg-dvc vc-git xgit-dvc xgit xgit-annotate dvc-annotate xgit-log
dvc-revlist bzr-core xdarcs-core xgit-core xmtn-minimal naquadah-theme
em-unix em-script em-prompt em-ls em-hist em-pred em-glob em-dirs
em-cmpl em-basic esh-opt em-banner em-alias esh-var esh-io esh-cmd
esh-ext esh-proc esh-groups eshell esh-module esh-mode align-let server
battery undo-tree slime-xref-browser slime-banner slime-tramp slime-asdf
slime-fancy slime-fontifying-fu slime-package-fu slime-references
slime-scratch slime-presentations slime-fuzzy slime-fancy-inspector
slime-c-p-c slime-editing-commands slime-autodoc slime-parse slime-repl
image-file newsticker newst-treeview tree-widget newst-plainview
newst-reader newst-ticker newst-backend xdvi-search preview-latex
pcomplete-extension em-term term ehelp electric pdbtrack whitespace
paren time mime-w3m mime eword-decode mel path-util mime-parse std11
luna mime-def mcharset mcs-20 mcs-e20 pces pces-e20 pces-20 broken
pcustom poe w3m-load avoid help-mode view savehist gnus-async nntp
markdown-mode org-google-weather google-weather url-cache googlecl
google-maps google-maps-static google-maps-geocode google-maps-base json
simple-call-tree el-expectations el-mock csv2org iedit rect zop-to-char
mule-util alist pym static apel-ver product elscreen smallurl mm-url
rectangle-utils tv-utils pcvs pcvs-parse pcvs-info pcvs-defs pcvs-util
mb-depth ioccur cl-info slime hyperspec slime-autoloads ledger-config
ledger esh-arg esh-util tex-site auto-loads esh-toggle flymake
eldoc-eval eldoc no-word regex-tool dired-extension emms-mpd-config
emms-playlist-limit emms-volume emms-volume-amixer emms-i18n
emms-history emms-score emms-stream-info emms-metaplaylist-mode
emms-bookmarks emms-lastfm-client emms-lastfm-scrobbler parse-time
emms-cue emms-mode-line-icon emms-browser sort emms-playlist-sort
emms-last-played emms-player-xine emms-player-mpd tq emms-playing-time
emms-lyrics emms-url hl-line emms-tag-editor emms-mark emms-mode-line
emms-cache emms-info-ogginfo emms-info-mp3info emms-playlist-mode
emms-player-vlc emms-player-mplayer emms-info emms-streams later-do
emms-source-playlist emms-source-file emms-player-simple emms-setup emms
emms-compat dvc-init bzr-gnus tla-gnus xgit-gnus xhg-gnus gnus-art mm-uu
mml2015 mm-view mml-smime smime dig gnus-sum nnoo gnus-group gnus-undo
nnmail mail-source gnus-start gnus-spec gnus-int gnus-range gnus-win
gnus gnus-ems nnheader dvc-gnus tla-core tla-autoconf tla-defs dvc-log
vc vc-dispatcher add-log ediff-merg ediff-diff ediff-wind ediff-help
ediff-util ediff-mult ediff-init ediff dvc-autoloads htmlize-hack
htmlize muse-colors muse-docbook muse-texinfo texnfo-upd texinfo
muse-latex muse-html muse-xml-common muse-wiki cus-edit cus-start
cus-load muse-publish muse-project muse-protocols muse-regexps muse
muse-nested-tags muse-mode muse-autoloads org-config-thierry ob-sh
org-crypt cal-china lunar solar cal-dst cal-bahai cal-islam cal-hebrew
holidays hol-loaddefs vc-hg org-wl org-w3m org-vm org-rmail org-mhe
org-mew org-irc org-jsinfo org-infojs org-html org-exp ob-exp
org-exp-blocks org-info org-gnus org-docview org-bibtex bibtex org-bbdb
org-agenda appt diary-lib diary-loaddefs org-annotation-helper
org-capture org-mks remember org-remember org-datetree config-w3m w3m
doc-view jka-compr image-mode timezone w3m-hist w3m-fb w3m-ems wid-edit
w3m-ccl ccl w3m-favicon w3m-image w3m-proc w3m-util addressbook-bookmark
message rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils gmm-utils
mailheader firefox-protocol bookmark-uzbl-handler
bookmark-firefox-handler bookmark-extensions bookmark pp
init-helm-thierry helm-mode helm-files org ob-emacs-lisp ob-tangle
ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys ob ob-eval
org-pcomplete org-list org-faces org-compat org-entities org-macs
noutline outline cal-menu calendar cal-loaddefs image-dired tramp
tramp-compat format-spec tramp-loaddefs dired-aux ffap thingatpt
helm-tags helm-bookmark helm-adaptative helm-info helm-net browse-url
url url-proxy url-privacy url-expand url-methods url-history url-cookie
url-util url-parse url-vars mailcap helm-plugin helm-locate helm-help
helm-match-plugin helm-grep helm-buffers rx helm-elscreen helm-regexp
grep helm-external helm-utils helm-descbinds helm helm-ipython ipython
python-mode info-look compile executable shell pcomplete comint
ansi-color ring helm-delicious xml helm-mercurial xhg xhg-annotate
xhg-mq xhg-log xhg-core dvc-diff uniquify warnings dvc-fileinfo
dvc-unified dvc-tips diff-mode dvc-core dvc-lisp dvc-buffers dvc-ui
dvc-register dvc-utils dvc-emacs ewoc dvc-defs dvc-site dired-x dired
regexp-opt helm-config edmacro kmacro epa-file epa derived epg
epg-config auth-source eieio byte-opt bytecomp byte-compile cconv
macroexp assoc gnus-util time-date mm-util mail-prsvr password-cache
usage-memo eev-thierry iterator eev-all eev-mini-steps eev-browse-url
eev-langs eev-compose eev-glyphs disp-table eev-insert eev-steps
eev-bounded eev easy-mmode advice help-fns advice-preload cl w3m-wget
info easymenu tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win
x-dnd tool-bar dnd fontset image fringe lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax
facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces
cus-face files text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget hashtable-print-readable backquote
make-network-process dbusbind dynamic-setting system-font-setting
font-render-setting x-toolkit x multi-tty emacs)

-- 
  Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997