annotate lisp/bs.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 60516122d066
children 417b1e4d63cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 ;;; bs.el --- menu for selecting and displaying buffers
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
104543
da8b3e61b182 Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102270
diff changeset
3 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105580
diff changeset
4 ;; 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; Author: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Maintainer: Olaf Sylvester <Olaf.Sylvester@netsurf.de>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Keywords: convenience
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87578
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87578
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87578
diff changeset
14 ;; (at your option) any later version.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87578
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;; Version: 1.17
64676
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
27 ;; X-URL: http://www.geekware.de/software/emacs
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;; The bs-package contains a main function bs-show for poping up a
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;; buffer in a way similar to `list-buffers' and `electric-buffer-list':
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;; The new buffer offers a Buffer Selection Menu for manipulating
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;; the buffer list and buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;; -----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;; | MR Buffer Size Mode File |
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;; | -- ------ ---- ---- ---- |
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;; |. bs.el 14690 Emacs-Lisp /home/sun/sylvester/el/bs.e$|
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;; | % executable.el 9429 Emacs-Lisp /usr/share/emacs/19.34/lisp$|
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 ;; | % vc.el 104893 Emacs-Lisp /usr/share/emacs/19.34/lisp$|
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 ;; | % test_vc.el 486 Emacs-Lisp /home/sun/sylvester/el/test$|
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 ;; | % vc-hooks.el 43605 Emacs-Lisp /usr/share/emacs/19.34/lisp$|
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42 ;; -----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 ;;; Quick Installation und Customization:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 ;; Use
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 ;; M-x bs-show
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;; for buffer selection or optional bind a key to main function `bs-show'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 ;; (global-set-key "\C-x\C-b" 'bs-show) ;; or another key
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;; For customization use
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 ;; M-x bs-customize
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 ;;; More Commentary:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 ;; bs-show will generate a new buffer named *buffer-selection*, which shows
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 ;; all buffers or a subset of them, and has possibilities for deleting,
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 ;; saving and selecting buffers. For more details see docstring of
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 ;; function `bs-mode'. A current configuration describes which buffers appear
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 ;; in *buffer-selection*. See docstring of variable `bs-configurations' for
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 ;; more details.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 ;; The package bs combines the advantages of the Emacs functions
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 ;; `list-buffers' and `electric-buffer-list'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 ;;
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
67 ;; Additional features for Buffer Selection Menu:
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 ;; - configurable list of buffers (show only files etc.).
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 ;; - comfortable way to change displayed subset of all buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 ;; - show sorted list of buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 ;; - cyclic navigation:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 ;; - goes to top of buffer list if you are on last line and press down.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 ;; - goes to end of buffer list if you are on first line and press up.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; - Offer an alternative buffer list by prefix key C-u.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ;;; Cycling through buffers
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 ;; This package offers two functions for buffer cycling. If you want to cycle
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 ;; through buffer list you can use `bs-cycle-next' or `bs-cycle-previous'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 ;; Bind these function to a key like
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 ;; (global-set-key [(f9)] 'bs-cycle-previous)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 ;; (global-set-key [(f10)] 'bs-cycle-next)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 ;; Both functions use a special subset of all buffers for cycling to avoid
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;; to go through internal buffers like *Messages*.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 ;; Cycling through buffers ignores sorting because sorting destroys
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 ;; the logical buffer list. If buffer list is sorted by size you
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 ;; won't be able to cycle to the smallest buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 ;;; Customization:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 ;; There is a customization group called `bs' in group `convenience'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 ;; Start customization by M-x bs-customize
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 ;; Buffer list
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 ;; -----------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 ;; You can define your own configurations by extending variable
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 ;; `bs-configurations' (see docstring for details).
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 ;; `bs-default-configuration' contains the name of default configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 ;; The default value is "files" which means to show only files.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 ;; If you always want to see all buffers, customize variable
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 ;; `bs-default-configuration' in customization group `bs'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 ;; Configure sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 ;; -----------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 ;; You can define functions for sorting the buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 ;; When selecting buffers, you can step through available sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 ;; methods with key 'S'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 ;; To define a new way of sorting, customize variable `bs-sort-functions'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 ;; There are four basic functions for sorting:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 ;; by buffer name, by mode, by size, or by filename
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 ;; Configure buffer cycling
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 ;; ------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 ;; When cycling through buffer list the functions for cycling will use
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 ;; the current configuration of bs to calculate the buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 ;; If you want to use a different configuration for cycling you have to set
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 ;; the variable `bs-cycle-configuration-name'. You can customize this variable.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 ;;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 ;; For example: If you use the configuration called "files-and-scratch" you
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 ;; can cycle through all file buffers and *scratch* although your current
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 ;; configuration perhaps is "files" which ignores buffer *scratch*.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128 ;;; History:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 ;;; Code:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
132 (eval-when-compile (require 'cl))
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
133
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 ;; Globals for customization
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 (defgroup bs nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 "Buffer Selection: Maintaining buffers by buffer menu."
27576
6097d621dac9 (bs): Add :version to defgroup.
Dave Love <fx@gnu.org>
parents: 27016
diff changeset
140 :version "21.1"
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
141 :link '(emacs-commentary-link "bs")
64676
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
142 :link '(url-link "http://www.geekware.de/software/emacs")
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 :group 'convenience)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
145 (defgroup bs-appearance nil
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
146 "Buffer Selection appearance: Appearance of bs buffer menu."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 :group 'bs)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149 (defcustom bs-attributes-list
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 '(("" 1 1 left bs--get-marked-string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 ("M" 1 1 left bs--get-modified-string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 ("R" 2 2 left bs--get-readonly-string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 ("Buffer" bs--get-name-length 10 left bs--get-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 ("" 1 1 left " ")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155 ("Size" 8 8 right bs--get-size-string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 ("" 1 1 left " ")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 ("Mode" 12 12 right bs--get-mode-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 ("" 2 2 left " ")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 ("File" 12 12 left bs--get-file-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 ("" 2 2 left " "))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
161 "List specifying the layout of a Buffer Selection Menu buffer.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 Each entry specifies a column and is a list of the form of:
36415
55f2a0bdaf30 (bs-attributes-list): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 34048
diff changeset
163 \(HEADER MINIMUM-LENGTH MAXIMUM-LENGTH ALIGNMENT FUN-OR-STRING)
64676
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
164
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
165 HEADER : String for header for first line or a function
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
166 which calculates column title.
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
167 MINIMUM-LENGTH : Minimum width of column (number or name of function).
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
168 The function must return a positive integer.
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
169 MAXIMUM-LENGTH : Maximum width of column (number or name of function)
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
170 (currently ignored).
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
171 ALIGNMENT : Alignment of column (`left', `right', `middle').
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
172 FUN-OR-STRING : Name of a function for calculating the value or a
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
173 string for a constant value.
98420b62843f (bs-attributes-list): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
174
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
175 The function gets as parameter the buffer where we have started
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 buffer selection and the list of all buffers to show. The function must
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
177 return a string representing the column's value."
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
178 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 :type '(repeat sexp))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 (defun bs--make-header-match-string ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 "Return a regexp matching the first line of a Buffer Selection Menu buffer."
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
183 (concat "^\\(" (mapconcat #'car bs-attributes-list " *") " *$\\)"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184
39568
e67950065cf9 Change ;;; to ;; for outline-minor-mode.
Gerd Moellmann <gerd@gnu.org>
parents: 38095
diff changeset
185 ;; Font-Lock-Settings
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 (defvar bs-mode-font-lock-keywords
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
187 (list ;; header in font-lock-type-face
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
188 (list (bs--make-header-match-string)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
189 '(1 font-lock-type-face append) '(1 'bold append))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
190 ;; Buffername embedded by *
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
191 (list "^\\(.*\\*.*\\*.*\\)$"
30893
939272c1c28b (bs-mode-font-lock-keywords): Avoid testing for XEmacs.
Dave Love <fx@gnu.org>
parents: 30799
diff changeset
192 1
939272c1c28b (bs-mode-font-lock-keywords): Avoid testing for XEmacs.
Dave Love <fx@gnu.org>
parents: 30799
diff changeset
193 ;; problem in XEmacs with font-lock-constant-face
939272c1c28b (bs-mode-font-lock-keywords): Avoid testing for XEmacs.
Dave Love <fx@gnu.org>
parents: 30799
diff changeset
194 (if (facep 'font-lock-constant-face)
939272c1c28b (bs-mode-font-lock-keywords): Avoid testing for XEmacs.
Dave Love <fx@gnu.org>
parents: 30799
diff changeset
195 'font-lock-constant-face
939272c1c28b (bs-mode-font-lock-keywords): Avoid testing for XEmacs.
Dave Love <fx@gnu.org>
parents: 30799
diff changeset
196 'font-lock-comment-face))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
197 ;; Dired-Buffers
109272
87794f1fc758 Minor bs.el font-lock change.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
198 '("^..\\(.*Dired .*\\)$" 1 font-lock-function-name-face)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
199 ;; the star for modified buffers
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
200 '("^.\\(\\*\\) +[^\\*]" 1 font-lock-comment-face))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 "Default font lock expressions for Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 (defcustom bs-max-window-height 20
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
204 "Maximal window height of Buffer Selection Menu."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
205 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 :type 'integer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 (defvar bs-dont-show-regexp nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 "Regular expression specifying which buffers not to show.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 A buffer whose name matches this regular expression will not be
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 included in the buffer list.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 (defvar bs-must-show-regexp nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214 "Regular expression for specifying buffers which must be shown.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 A buffer whose name matches this regular expression will be
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 included in the buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 Note that this variable is temporary: if the configuration is changed
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 it is reset to nil. Use `bs-must-always-show-regexp' to specify buffers
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 that must always be shown regardless of the configuration.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 (defcustom bs-must-always-show-regexp nil
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
222 "Regular expression for specifying buffers to show always.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 A buffer whose name matches this regular expression will
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 be shown regardless of current configuration of Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 :type '(choice (const :tag "Nothing at all" nil) regexp))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 (defvar bs-dont-show-function nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 "Function for specifying buffers not to show.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 The function gets one argument - the buffer to test. The function must
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 return a value different from nil to ignore the buffer in
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234 (defvar bs-must-show-function nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 "Function for specifying buffers which must be shown.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236 The function gets one argument - the buffer to test.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 (defvar bs-buffer-sort-function nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 "Sort function to sort the buffers that appear in Buffer Selection Menu.
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
240 The function gets two arguments - the buffers to compare.
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
241 It must return non-nil if the first buffer should sort before the second.")
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 (defcustom bs-maximal-buffer-name-column 45
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
244 "Maximum column width for buffer names.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 The column for buffer names has dynamic width. The width depends on
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 maximal and minimal length of names of buffers to show. The maximal
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247 width is bounded by `bs-maximal-buffer-name-column'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248 See also `bs-minimal-buffer-name-column'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
249 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 :type 'integer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252 (defcustom bs-minimal-buffer-name-column 15
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
253 "Minimum column width for buffer names.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254 The column for buffer names has dynamic width. The width depends on
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255 maximal and minimal length of names of buffers to show. The minimal
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 width is bounded by `bs-minimal-buffer-name-column'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 See also `bs-maximal-buffer-name-column'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
258 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 :type 'integer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 (defconst bs-header-lines-length 2
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
262 "Number of lines for headers in Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264 (defcustom bs-configurations
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265 '(("all" nil nil nil nil nil)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 ("files" nil nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
267 ("files-and-scratch" "^\\*scratch\\*$" nil nil bs-visits-non-file
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268 bs-sort-buffer-interns-are-last)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 ("all-intern-last" nil nil nil nil bs-sort-buffer-interns-are-last))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
270 "List of all configurations you can use in the Buffer Selection Menu.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271 A configuration describes which buffers appear in Buffer Selection Menu
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
272 and also the order of buffers. A configuration is a list with
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 six elements. The first element is a string and describes the configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274 The following five elements represent the values for Buffer Selection Menu
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
275 configuration variables `bs-must-show-regexp', `bs-must-show-function',
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
276 `bs-dont-show-regexp', `bs-dont-show-function' and `bs-buffer-sort-function'.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 By setting these variables you define a configuration."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
278 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 :type '(repeat sexp))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 (defcustom bs-default-configuration "files"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
282 "Name of default configuration used by the Buffer Selection Menu.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 \\<bs-mode-map>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 Will be changed using key \\[bs-select-next-configuration].
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 Must be a string used in `bs-configurations' for naming a configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
286 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
287 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 (defcustom bs-alternative-configuration "all"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
290 "Name of configuration used when calling `bs-show' with \
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 \\[universal-argument] as prefix key.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 Must be a string used in `bs-configurations' for naming a configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 (defvar bs-current-configuration bs-default-configuration
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 "Name of current configuration.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
298 Must be a string used in `bs-configurations' for naming a configuration.")
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300 (defcustom bs-cycle-configuration-name nil
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
301 "Name of configuration used when cycling through the buffer list.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 A value of nil means to use current configuration `bs-default-configuration'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 Must be a string used in `bs-configurations' for naming a configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
304 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305 :type '(choice (const :tag "like current configuration" nil)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306 string))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 (defcustom bs-string-show-always "+"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
309 "String added in column 1 indicating a buffer will always be shown."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
310 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 (defcustom bs-string-show-never "-"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
314 "String added in column 1 indicating a buffer will never be shown."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
315 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 (defcustom bs-string-current "."
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
319 "String added in column 1 indicating the current buffer."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
320 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323 (defcustom bs-string-current-marked "#"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
324 "String added in column 1 indicating the current buffer when it is marked."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
325 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328 (defcustom bs-string-marked ">"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
329 "String added in column 1 indicating a marked buffer."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
330 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 (defcustom bs-string-show-normally " "
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
334 "String added in column 1 indicating an unmarked buffer."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
335 :group 'bs-appearance
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336 :type 'string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
337
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
338 (defvar bs--name-entry-length 20
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339 "Maximum length of all displayed buffer names.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
340 Used internally, only.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 ;; ----------------------------------------------------------------------
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
343 ;; Internal globals
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
345
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346 (defvar bs-buffer-show-mark nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 "Flag for the current mode for showing this buffer.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
348 A value of nil means buffer will be shown depending on the current
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
349 configuration.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 A value of `never' means to never show the buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351 A value of `always' means to show buffer regardless of the configuration.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353 (make-variable-buffer-local 'bs-buffer-show-mark)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 ;; Make face named region (for XEmacs)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 (unless (facep 'region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
357 (make-face 'region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
358 (set-face-background 'region "gray75"))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
359
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
360 (defun bs--sort-by-name (b1 b2)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
361 "Compare buffers B1 and B2 by buffer name."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
362 (string< (buffer-name b1)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
363 (buffer-name b2)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
364
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
365 (defun bs--sort-by-filename (b1 b2)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
366 "Compare buffers B1 and B2 by file name."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
367 (string< (or (buffer-file-name b1) "")
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
368 (or (buffer-file-name b2) "")))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
369
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
370 (defun bs--sort-by-mode (b1 b2)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
371 "Compare buffers B1 and B2 by mode name."
87567
4c3c683cdff8 * erc-ibuffer.el (erc-channel-modes):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85688
diff changeset
372 (save-current-buffer
4c3c683cdff8 * erc-ibuffer.el (erc-channel-modes):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85688
diff changeset
373 (string< (progn (set-buffer b1) (format-mode-line mode-name nil nil b1))
4c3c683cdff8 * erc-ibuffer.el (erc-channel-modes):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85688
diff changeset
374 (progn (set-buffer b2) (format-mode-line mode-name nil nil b2)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
375
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
376 (defun bs--sort-by-size (b1 b2)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
377 "Compare buffers B1 and B2 by buffer size."
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
378 (< (buffer-size b1) (buffer-size b2)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
379
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
380 (defcustom bs-sort-functions
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
381 '(("by name" bs--sort-by-name "Buffer" region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
382 ("by size" bs--sort-by-size "Size" region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 ("by mode" bs--sort-by-mode "Mode" region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
384 ("by filename" bs--sort-by-filename "File" region)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
385 ("by nothing" nil nil nil))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
386 "List of all possible sorting aspects for Buffer Selection Menu.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
387 You can add a new entry with a call to `bs-define-sort-function'.
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
388 Each element is a list of four elements (NAME FUNCTION REGEXP-FOR-SORTING FACE).
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
389 NAME specifies the sort order defined by function FUNCTION.
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
390 FUNCTION nil means don't sort the buffer list. Otherwise the function
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
391 must have two parameters - the buffers to compare.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
392 REGEXP-FOR-SORTING is a regular expression which describes the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
393 column title to highlight.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
394 FACE is a face used to fontify the sorted column title. A value of nil means
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
395 don't highlight."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
396 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
397 :type '(repeat sexp))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
398
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
399 (defun bs-define-sort-function (name fun &optional regexp-for-sorting face)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
400 "Define a new function for buffer sorting in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
401 NAME specifies the sort order defined by function FUN.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
402 A value of nil for FUN means don't sort the buffer list. Otherwise the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
403 functions must have two parameters - the buffers to compare.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
404 REGEXP-FOR-SORTING is a regular expression which describes the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
405 column title to highlight.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
406 FACE is a face used to fontify the sorted column title. A value of nil means
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
407 don't highlight.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
408 The new sort aspect will be inserted into list `bs-sort-functions'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
409 (let ((tupel (assoc name bs-sort-functions)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
410 (if tupel
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
411 (setcdr tupel (list fun regexp-for-sorting face))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
412 (setq bs-sort-functions
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
413 (cons (list name fun regexp-for-sorting face)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
414 bs-sort-functions)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
415
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
416 (defvar bs--current-sort-function nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
417 "Description of the current function for sorting the buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
418 This is an element of `bs-sort-functions'.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
419
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
420 (defcustom bs-default-sort-name "by nothing"
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
421 "Name of default sort behavior.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
422 Must be \"by nothing\" or a string used in `bs-sort-functions' for
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
423 naming a sort behavior. Default is \"by nothing\" which means no sorting."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
424 :group 'bs
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
425 :type 'string
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
426 :set (lambda (var-name value)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
427 (set var-name value)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
428 (setq bs--current-sort-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
429 (assoc value bs-sort-functions))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
430
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
431 (defvar bs--buffer-coming-from nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
432 "The buffer in which the user started the current Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
433
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
434 (defvar bs--show-all nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
435 "Flag whether showing all buffers regardless of current configuration.
73642
d4b7bfddf3f5 (bs--show-all, bs--redisplay): Use "non-nil" in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 68924
diff changeset
436 Non-nil means to show all buffers. Otherwise show buffers
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
437 defined by current configuration `bs-current-configuration'.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
438
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
439 (defvar bs--window-config-coming-from nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
440 "Window configuration before starting Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
441
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
442 (defvar bs--intern-show-never "^ \\|\\*buffer-selection\\*"
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
443 "Regular expression specifying which buffers never to show.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
444 A buffer whose name matches this regular expression will never be
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
445 included in the buffer list.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
446
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
447 (defvar bs-current-list nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
448 "List of buffers shown in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
449 Used internally, only.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
450
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
451 (defvar bs--marked-buffers nil
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
452 "Currently marked buffers in Buffer Selection Menu.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
453
52243
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
454 (defvar bs-mode-map
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
455 (let ((map (make-sparse-keymap)))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
456 (define-key map " " 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
457 (define-key map "f" 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
458 (define-key map "v" 'bs-view)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
459 (define-key map "!" 'bs-select-in-one-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
460 (define-key map [mouse-2] 'bs-mouse-select) ;; for GNU EMACS
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
461 (define-key map [button2] 'bs-mouse-select) ;; for XEmacs
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
462 (define-key map "F" 'bs-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
463 (let ((key ?1))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
464 (while (<= key ?9)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
465 (define-key map (char-to-string key) 'digit-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
466 (setq key (1+ key))))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
467 (define-key map "-" 'negative-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
468 (define-key map "\e-" 'negative-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
469 (define-key map "o" 'bs-select-other-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
470 (define-key map "\C-o" 'bs-tmp-select-other-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
471 ;; for GNU EMACS
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
472 (define-key map [mouse-3] 'bs-mouse-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
473 ;; for XEmacs
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
474 (define-key map [button3] 'bs-mouse-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
475 (define-key map [up] 'bs-up)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
476 (define-key map "n" 'bs-down)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
477 (define-key map "p" 'bs-up)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
478 (define-key map [down] 'bs-down)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
479 (define-key map "\C-m" 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
480 (define-key map "b" 'bs-bury-buffer)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
481 (define-key map "s" 'bs-save)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
482 (define-key map "S" 'bs-show-sorted)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
483 (define-key map "a" 'bs-toggle-show-all)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
484 (define-key map "d" 'bs-delete)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
485 (define-key map "\C-d" 'bs-delete-backward)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
486 (define-key map "k" 'bs-delete)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
487 (define-key map "g" 'bs-refresh)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
488 (define-key map "C" 'bs-set-configuration-and-refresh)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
489 (define-key map "c" 'bs-select-next-configuration)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
490 (define-key map "q" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
491 ;; (define-key map "z" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
492 (define-key map "\C-c\C-c" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
493 (define-key map "\C-g" 'bs-abort)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
494 (define-key map "\C-]" 'bs-abort)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
495 (define-key map "%" 'bs-toggle-readonly)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
496 (define-key map "~" 'bs-clear-modified)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
497 (define-key map "M" 'bs-toggle-current-to-show)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
498 (define-key map "+" 'bs-set-current-buffer-to-show-always)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
499 ;;(define-key map "-" 'bs-set-current-buffer-to-show-never)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
500 (define-key map "t" 'bs-visit-tags-table)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
501 (define-key map "m" 'bs-mark-current)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
502 (define-key map "u" 'bs-unmark-current)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
503 (define-key map ">" 'scroll-right)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
504 (define-key map "<" 'scroll-left)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
505 (define-key map "?" 'bs-help)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
506 map)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
507 "Keymap of `bs-mode'.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
508
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
509 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
510 ;; Functions
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
511 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
512
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
513 (defun bs-buffer-list (&optional list sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
514 "Return a list of buffers to be shown.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
515 LIST is a list of buffers to test for appearance in Buffer Selection Menu.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
516 The result list depends on the global variables `bs-dont-show-regexp',
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
517 `bs-must-show-regexp', `bs-dont-show-function', `bs-must-show-function'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
518 and `bs-buffer-sort-function'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
519 If SORT-DESCRIPTION isn't nil the list will be sorted by
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
520 a special function. SORT-DESCRIPTION is an element of `bs-sort-functions'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
521 (setq sort-description (or sort-description bs--current-sort-function)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
522 list (or list (buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
523 (let ((result nil))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
524 (dolist (buf list)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
525 (let* ((buffername (buffer-name buf))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
526 (int-show-never (string-match-p bs--intern-show-never buffername))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
527 (ext-show-never (and bs-dont-show-regexp
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
528 (string-match-p bs-dont-show-regexp
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
529 buffername)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
530 (extern-must-show (or (and bs-must-always-show-regexp
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
531 (string-match-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
532 bs-must-always-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
533 buffername))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
534 (and bs-must-show-regexp
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
535 (string-match-p bs-must-show-regexp
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
536 buffername))))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
537 (extern-show-never-from-fun (and bs-dont-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
538 (funcall bs-dont-show-function
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
539 buf)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
540 (extern-must-show-from-fun (and bs-must-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
541 (funcall bs-must-show-function
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
542 buf)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
543 (show-flag (buffer-local-value 'bs-buffer-show-mark buf)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
544 (when (or (eq show-flag 'always)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
545 (and (or bs--show-all (not (eq show-flag 'never)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
546 (not int-show-never)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
547 (or bs--show-all
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
548 extern-must-show
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
549 extern-must-show-from-fun
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
550 (and (not ext-show-never)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
551 (not extern-show-never-from-fun)))))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
552 (setq result (cons buf result)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
553 (setq result (reverse result))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
554 ;; The current buffer which was the start point of bs should be an element
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
555 ;; of result list, so that we can leave with space and be back in the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
556 ;; buffer we started bs-show.
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
557 (when (and bs--buffer-coming-from
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
558 (buffer-live-p bs--buffer-coming-from)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
559 (not (memq bs--buffer-coming-from result)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
560 (setq result (cons bs--buffer-coming-from result)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
561 ;; sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
562 (if (and sort-description
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
563 (nth 1 sort-description))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
564 (setq result (sort result (nth 1 sort-description)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 ;; else standard sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
566 (bs-buffer-sort result))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
567
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
568 (defun bs-buffer-sort (buffer-list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
569 "Sort buffers in BUFFER-LIST according to `bs-buffer-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
570 (if bs-buffer-sort-function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
571 (sort buffer-list bs-buffer-sort-function)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
572 buffer-list))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574 (defun bs--redisplay (&optional keep-line-p sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575 "Redisplay whole Buffer Selection Menu.
73642
d4b7bfddf3f5 (bs--show-all, bs--redisplay): Use "non-nil" in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 68924
diff changeset
576 If KEEP-LINE-P is non-nil the point will stay on current line.
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
577 SORT-DESCRIPTION is an element of `bs-sort-functions'."
104543
da8b3e61b182 Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102270
diff changeset
578 (let ((line (count-lines 1 (point))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
579 (bs-show-in-buffer (bs-buffer-list nil sort-description))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
580 (when keep-line-p
104543
da8b3e61b182 Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102270
diff changeset
581 (goto-char (point-min))
da8b3e61b182 Use forward-line rather than goto-line.
Glenn Morris <rgm@gnu.org>
parents: 102270
diff changeset
582 (forward-line line))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
583 (beginning-of-line)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
584
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
585 (defun bs--goto-current-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
586 "Goto line which represents the current buffer;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
587 actually the line which begins with character in `bs-string-current' or
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
588 `bs-string-current-marked'."
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
589 (let ((regexp (concat "^"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
590 (regexp-quote bs-string-current)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
591 "\\|^"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
592 (regexp-quote bs-string-current-marked)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
593 point)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
595 (goto-char (point-min))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
596 (when (search-forward-regexp regexp nil t)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
597 (setq point (1- (point)))))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
598 (when point
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
599 (goto-char point))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
600
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
601 (defun bs--current-config-message ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
602 "Return a string describing the current `bs-mode' configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
603 (if bs--show-all
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
604 "Show all buffers."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
605 (format "Show buffer by configuration %S"
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
606 bs-current-configuration)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607
79104
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
608 (defun bs--track-window-changes (frame)
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
609 "Track window changes to refresh the buffer list.
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
610 Used from `window-size-change-functions'."
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
611 (let ((win (get-buffer-window "*buffer-selection*" frame)))
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
612 (when win
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
613 (with-selected-window win
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
614 (bs--set-window-height)))))
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
615
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
616 (defun bs--remove-hooks ()
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
617 "Remove `bs--track-window-changes' and auxiliary hooks."
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
618 (remove-hook 'window-size-change-functions 'bs--track-window-changes)
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
619 ;; Remove itself
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
620 (remove-hook 'kill-buffer-hook 'bs--remove-hooks t)
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
621 (remove-hook 'change-major-mode-hook 'bs--remove-hooks t))
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
622
79153
705ce9d99f0f (bs-mode): Set mode-class property to special.
Juanma Barranquero <lekktu@gmail.com>
parents: 79151
diff changeset
623 (put 'bs-mode 'mode-class 'special)
705ce9d99f0f (bs-mode): Set mode-class property to special.
Juanma Barranquero <lekktu@gmail.com>
parents: 79151
diff changeset
624
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
625 (define-derived-mode bs-mode nil "Buffer-Selection-Menu"
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
626 "Major mode for editing a subset of Emacs' buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
627 \\<bs-mode-map>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628 Aside from two header lines each line describes one buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
629 Move to a line representing the buffer you want to edit and select
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
630 buffer by \\[bs-select] or SPC. Abort buffer list with \\[bs-kill].
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
631 There are many key commands similar to `Buffer-menu-mode' for
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
632 manipulating the buffer list and buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
633 For faster navigation each digit key is a digit argument.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
634
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
635 \\[bs-select] or SPACE -- select current line's buffer and other marked buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
636 \\[bs-toggle-show-all] -- toggle between all buffers and a special subset.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
637 \\[bs-select-other-window] -- select current line's buffer in other window.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
638 \\[bs-tmp-select-other-window] -- make another window display that buffer and
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
639 remain in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
640 \\[bs-mouse-select] -- select current line's buffer and other marked buffers.
56993
240e59879420 (bs-mode): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54581
diff changeset
641 \\[bs-save] -- save current line's buffer immediately.
240e59879420 (bs-mode): Doc fix.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 54581
diff changeset
642 \\[bs-delete] -- kill current line's buffer immediately.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
643 \\[bs-toggle-readonly] -- toggle read-only status of current line's buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
644 \\[bs-clear-modified] -- clear modified-flag on that buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
645 \\[bs-mark-current] -- mark current line's buffer to be displayed.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
646 \\[bs-unmark-current] -- unmark current line's buffer to be displayed.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
647 \\[bs-show-sorted] -- display buffer list sorted by next sort aspect.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
648 \\[bs-set-configuration-and-refresh] -- ask user for a configuration and \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
649 apply selected configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
650 \\[bs-select-next-configuration] -- select and apply next \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651 available Buffer Selection Menu configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
652 \\[bs-kill] -- leave Buffer Selection Menu without a selection.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
653 \\[bs-toggle-current-to-show] -- toggle status of appearance.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
654 \\[bs-set-current-buffer-to-show-always] -- mark current line's buffer \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
655 to show always.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
656 \\[bs-visit-tags-table] -- call `visit-tags-table' on current line's buffer.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
657 \\[bs-help] -- display this help text."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
658 (make-local-variable 'font-lock-defaults)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
659 (make-local-variable 'font-lock-verbose)
78976
467771c10c11 (bs-mode): Make sure global-font-lock-mode doesn't activate
Juanma Barranquero <lekktu@gmail.com>
parents: 78972
diff changeset
660 (make-local-variable 'font-lock-global-modes)
68924
526bb84288e1 (bs-mode): Use `buffer-disable-undo'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
661 (buffer-disable-undo)
79104
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
662 (setq buffer-read-only t
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
663 truncate-lines t
78950
569e6cbc4c70 Don't defvar `fontlock-verbose'.
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
664 show-trailing-whitespace nil
78976
467771c10c11 (bs-mode): Make sure global-font-lock-mode doesn't activate
Juanma Barranquero <lekktu@gmail.com>
parents: 78972
diff changeset
665 font-lock-global-modes '(not bs-mode)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
666 font-lock-defaults '(bs-mode-font-lock-keywords t)
105580
49a18cece067 * bs.el (bs-mode): Fix last change. (`revert-buffer-function'
Juanma Barranquero <lekktu@gmail.com>
parents: 105570
diff changeset
667 font-lock-verbose nil)
49a18cece067 * bs.el (bs-mode): Fix last change. (`revert-buffer-function'
Juanma Barranquero <lekktu@gmail.com>
parents: 105570
diff changeset
668 (set (make-local-variable 'revert-buffer-function) 'bs-refresh)
79105
e091b0e7b0c7 (bs-mode): Set hooks (accidentally left out in the previous commit).
Juanma Barranquero <lekktu@gmail.com>
parents: 79104
diff changeset
669 (add-hook 'window-size-change-functions 'bs--track-window-changes)
e091b0e7b0c7 (bs-mode): Set hooks (accidentally left out in the previous commit).
Juanma Barranquero <lekktu@gmail.com>
parents: 79104
diff changeset
670 (add-hook 'kill-buffer-hook 'bs--remove-hooks nil t)
e091b0e7b0c7 (bs-mode): Set hooks (accidentally left out in the previous commit).
Juanma Barranquero <lekktu@gmail.com>
parents: 79104
diff changeset
671 (add-hook 'change-major-mode-hook 'bs--remove-hooks nil t))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
672
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
673 (defun bs--restore-window-config ()
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
674 "Restore window configuration on the current frame."
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
675 (when bs--window-config-coming-from
79104
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
676 (let ((frame (selected-frame)))
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
677 (unwind-protect
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
678 (set-window-configuration bs--window-config-coming-from)
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
679 (select-frame frame)))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
680 (setq bs--window-config-coming-from nil)))
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
681
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
682 (defun bs-kill ()
78952
e1da8e0b5ae2 (bs-kill): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 78950
diff changeset
683 "Let buffer disappear and reset window configuration."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685 (bury-buffer (current-buffer))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
686 (bs--restore-window-config))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
687
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 (defun bs-abort ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 "Ding and leave Buffer Selection Menu without a selection."
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
690 (interactive)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 (ding)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 (bs-kill))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694 (defun bs-set-configuration-and-refresh ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695 "Ask user for a configuration and apply selected configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 Refresh whole Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 (call-interactively 'bs-set-configuration)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
700
105570
90daaeee02f3 * bs.el (bs-mode): Set `revert-buffer-function' to `bs-refresh'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105197
diff changeset
701 (defun bs-refresh (&rest ignored)
90daaeee02f3 * bs.el (bs-mode): Set `revert-buffer-function' to `bs-refresh'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105197
diff changeset
702 "Refresh whole Buffer Selection Menu.
90daaeee02f3 * bs.el (bs-mode): Set `revert-buffer-function' to `bs-refresh'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105197
diff changeset
703 Arguments are IGNORED (for `revert-buffer')."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
705 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
706
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
707 (defun bs--set-window-height ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
708 "Change the height of the selected window to suit the current buffer list."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 (unless (one-window-p t)
68502
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
710 (fit-window-to-buffer (selected-window) bs-max-window-height)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
711
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 (defun bs--current-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
713 "Return buffer on current line.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
714 Raise an error if not on a buffer line."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
715 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
716 (let ((line (+ (- bs-header-lines-length)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
717 (count-lines 1 (point)))))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
718 (when (< line 0)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
719 (error "You are on a header row"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 (nth line bs-current-list)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 (defun bs--update-current-line ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723 "Update the entry on current line for Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
724 (let ((buffer (bs--current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
725 (inhibit-read-only t))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
727 (delete-region (point) (line-end-position))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
728 (bs--insert-one-entry buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
729 (beginning-of-line)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731 (defun bs-view ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732 "View current line's buffer in View mode.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
733 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
734 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735 (view-buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
736
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
737 (defun bs-select ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
738 "Select current line's buffer and other marked buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
739 If there are no marked buffers the window configuration before starting
79188
89ec8c04410c (bs-select, bs-select-other-window): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 79155
diff changeset
740 Buffer Selection Menu will be restored.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 If there are marked buffers each marked buffer and the current line's buffer
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
742 will be selected in a window.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
743 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
744 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
745 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
746 (bury-buffer (current-buffer))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
747 (bs--restore-window-config)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
748 (switch-to-buffer buffer)
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
749 (when bs--marked-buffers
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
750 ;; Some marked buffers for selection
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
751 (let* ((all (delq buffer bs--marked-buffers))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
752 (height (/ (1- (frame-height)) (1+ (length all)))))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
753 (delete-other-windows)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
754 (switch-to-buffer buffer)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
755 (dolist (buf all)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
756 (split-window nil height)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
757 (other-window 1)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
758 (switch-to-buffer buf))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
759 ;; goto window we have started bs.
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
760 (other-window 1)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
761
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 (defun bs-select-other-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
763 "Select current line's buffer by `switch-to-buffer-other-window'.
79188
89ec8c04410c (bs-select, bs-select-other-window): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 79155
diff changeset
764 The window configuration before starting Buffer Selection Menu will be restored
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 unless there is no other window. In this case a new window will be created.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
768 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 (bury-buffer (current-buffer))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
770 (bs--restore-window-config)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
771 (switch-to-buffer-other-window buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
772
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 (defun bs-tmp-select-other-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774 "Make the other window select this line's buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775 The current window remains selected."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778 (display-buffer buffer t)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
780 (defun bs-select-other-frame ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 "Select current line's buffer in new created frame.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
784 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
785 (bury-buffer (current-buffer))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
786 (bs--restore-window-config)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
787 (switch-to-buffer-other-frame buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
789 (defun bs-mouse-select-other-frame (event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
790 "Select selected line's buffer in new created frame.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
791 Leave Buffer Selection Menu.
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
792 EVENT: a mouse click event."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
793 (interactive "e")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794 (mouse-set-point event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
795 (bs-select-other-frame))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797 (defun bs-mouse-select (event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798 "Select buffer on mouse click EVENT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 Select buffer by `bs-select'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800 (interactive "e")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 (mouse-set-point event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802 (bs-select))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 (defun bs-select-in-one-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805 "Select current line's buffer in one window and delete other windows.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808 (bs-select)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
809 (delete-other-windows))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811 (defun bs-bury-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 "Bury buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 (bury-buffer (bs--current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 (defun bs-save ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 "Save buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819 (interactive)
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
820 (with-current-buffer (bs--current-buffer)
96278
1ce9a2ab1aea Paren typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 96277
diff changeset
821 (save-buffer))
1ce9a2ab1aea Paren typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 96277
diff changeset
822 (bs--update-current-line))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 (defun bs-visit-tags-table ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825 "Visit the tags table in the buffer on this line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 See `visit-tags-table'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 (let ((file (buffer-file-name (bs--current-buffer))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 (if file
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
830 (visit-tags-table file)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
831 (error "Specified buffer has no file"))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
833 (defun bs-toggle-current-to-show ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
834 "Toggle status of showing flag for buffer in current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (interactive)
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
836 (let ((res
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
837 (with-current-buffer (bs--current-buffer)
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
838 (setq bs-buffer-show-mark (case bs-buffer-show-mark
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
839 ((nil) 'never)
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
840 ((never) 'always)
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
841 (t nil))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 (bs--update-current-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 (bs--show-config-message res)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 (defun bs-set-current-buffer-to-show-always (&optional not-to-show-p)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 "Toggle status of buffer on line to `always shown'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
848 NOT-TO-SHOW-P: prefix argument.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849 With no prefix argument the buffer on current line is marked to show
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 always. Otherwise it is marked to show never."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851 (interactive "P")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 (if not-to-show-p
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 (bs-set-current-buffer-to-show-never)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854 (bs--set-toggle-to-show (bs--current-buffer) 'always)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
855
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856 (defun bs-set-current-buffer-to-show-never ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857 "Toggle status of buffer on line to `never shown'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 (bs--set-toggle-to-show (bs--current-buffer) 'never))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861 (defun bs--set-toggle-to-show (buffer what)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 "Set value `bs-buffer-show-mark' of buffer BUFFER to WHAT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 Redisplay current line and display a message describing
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 the status of buffer on current line."
54581
0a5e192bf05d (bs-buffer-list): Use buffer-local-value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
865 (with-current-buffer buffer (setq bs-buffer-show-mark what))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866 (bs--update-current-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 (bs--show-config-message what))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869
85170
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
870 (defun bs--mark-unmark (count fun)
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
871 "Call FUN on COUNT consecutive buffers of *buffer-selection*."
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
872 (let ((dir (if (> count 0) 1 -1)))
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
873 (dotimes (i (abs count))
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
874 (let ((buffer (bs--current-buffer)))
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
875 (when buffer (funcall fun buffer))
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
876 (bs--update-current-line)
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
877 (bs-down dir)))))
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
878
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 (defun bs-mark-current (count)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
880 "Mark buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
881 COUNT is the number of buffers to mark.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882 Move cursor vertically down COUNT lines."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883 (interactive "p")
85170
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
884 (bs--mark-unmark count
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
885 (lambda (buf)
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
886 (add-to-list 'bs--marked-buffers buf))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 (defun bs-unmark-current (count)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
889 "Unmark buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 COUNT is the number of buffers to unmark.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891 Move cursor vertically down COUNT lines."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
892 (interactive "p")
85170
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
893 (bs--mark-unmark count
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
894 (lambda (buf)
000327e80fc2 (bs--mark-unmark): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
895 (setq bs--marked-buffers (delq buf bs--marked-buffers)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
896
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897 (defun bs--show-config-message (what)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
898 "Show message indicating the new showing status WHAT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 WHAT is a value of nil, `never', or `always'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900 (bs-message-without-log (cond ((null what)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
901 "Buffer will be shown normally.")
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
902 ((eq what 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
903 "Mark buffer to never be shown.")
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
904 (t "Mark buffer to show always."))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
905
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
906 (defun bs-delete ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
907 "Kill buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
908 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
909 (let ((current (bs--current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
910 (inhibit-read-only t))
41312
f78848439507 (bs-delete): Signal an error if the buffer cannot be deleted.
Eli Zaretskii <eliz@gnu.org>
parents: 39568
diff changeset
911 (unless (kill-buffer current)
f78848439507 (bs-delete): Signal an error if the buffer cannot be deleted.
Eli Zaretskii <eliz@gnu.org>
parents: 39568
diff changeset
912 (error "Buffer was not deleted"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913 (setq bs-current-list (delq current bs-current-list))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
914 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
915 (delete-region (point) (save-excursion
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
916 (end-of-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
917 (if (eobp) (point) (1+ (point)))))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
918 (when (eobp)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
919 (backward-delete-char 1)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
920 (beginning-of-line)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
921 (recenter -1))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
922 (bs--set-window-height)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
923
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
924 (defun bs-delete-backward ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
925 "Like `bs-delete' but go to buffer in front of current."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
926 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927 (let ((on-last-line-p (save-excursion (end-of-line) (eobp))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
928 (bs-delete)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
929 (unless on-last-line-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
930 (bs-up 1))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
931
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
932 (defun bs-show-sorted ()
78976
467771c10c11 (bs-mode): Make sure global-font-lock-mode doesn't activate
Juanma Barranquero <lekktu@gmail.com>
parents: 78972
diff changeset
933 "Show buffer list sorted by next sort aspect."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
934 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
935 (setq bs--current-sort-function
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
936 (bs-next-config-aux (car bs--current-sort-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
937 bs-sort-functions))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
938 (bs--redisplay)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
940 (bs-message-without-log "Sorted %s" (car bs--current-sort-function)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
941
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
942 (defun bs-apply-sort-faces (&optional sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
943 "Set text properties for the sort described by SORT-DESCRIPTION.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
944 SORT-DESCRIPTION is an element of `bs-sort-functions'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
945 Default is `bs--current-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946 (let ((sort-description (or sort-description
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
947 bs--current-sort-function)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
948 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 (goto-char (point-min))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
950 (when (and (nth 2 sort-description)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
951 (search-forward-regexp (nth 2 sort-description) nil t))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
952 (let ((inhibit-read-only t))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
953 (put-text-property (match-beginning 0)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
954 (match-end 0)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
955 'face
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
956 (or (nth 3 sort-description)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
957 'region)))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
958
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
959 (defun bs-toggle-show-all ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960 "Toggle show all buffers / show buffers with current configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
962 (setq bs--show-all (not bs--show-all))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 (bs--redisplay)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 (bs-message-without-log "%s" (bs--current-config-message)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 (defun bs-toggle-readonly ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 "Toggle read-only status for buffer on current line.
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
969 Uses function `toggle-read-only'."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 (interactive)
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
971 (with-current-buffer (bs--current-buffer)
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
972 (toggle-read-only))
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
973 (bs--update-current-line))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 (defun bs-clear-modified ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976 "Set modified flag for buffer on current line to nil."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977 (interactive)
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
978 (with-current-buffer (bs--current-buffer)
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
979 (set-buffer-modified-p nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 (bs--update-current-line))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 (defun bs--nth-wrapper (count fun &rest args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983 "Call COUNT times function FUN with arguments ARGS."
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
984 (dotimes (i (or count 1))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
985 (apply fun args)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 (defun bs-up (arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 "Move cursor vertically up ARG lines in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990 (if (and arg (numberp arg) (< arg 0))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991 (bs--nth-wrapper (- arg) 'bs--down)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992 (bs--nth-wrapper arg 'bs--up)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 (defun bs--up ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 "Move cursor vertically up one line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 If on top of buffer list go to last line."
68502
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
997 (if (> (count-lines 1 (point)) bs-header-lines-length)
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
998 (forward-line -1)
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
999 (goto-char (point-max))
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
1000 (beginning-of-line)
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
1001 (recenter -1)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1002
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003 (defun bs-down (arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 "Move cursor vertically down ARG lines in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 (if (and arg (numberp arg) (< arg 0))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 (bs--nth-wrapper (- arg) 'bs--up)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 (bs--nth-wrapper arg 'bs--down)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1009
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 (defun bs--down ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 "Move cursor vertically down one line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012 If at end of buffer list go to first line."
68502
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
1013 (if (eq (line-end-position) (point-max))
102219
13a81d1fb442 * bs.el (bs--down): When wrapping around, use `forward-line',
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
1014 (progn
102270
fd0e4d67e735 * bs.el (bs--down):
Juanma Barranquero <lekktu@gmail.com>
parents: 102219
diff changeset
1015 (goto-char (point-min))
102219
13a81d1fb442 * bs.el (bs--down): When wrapping around, use `forward-line',
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
1016 (forward-line bs-header-lines-length))
68502
6ede67948264 Allow non-default values of `bs-header-lines-length'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68447
diff changeset
1017 (forward-line 1)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 (defun bs-visits-non-file (buffer)
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
1020 "Return whether BUFFER visits no file.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 A value of t means BUFFER belongs to no file.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 A value of nil means BUFFER belongs to a file."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023 (not (buffer-file-name buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 (defun bs-sort-buffer-interns-are-last (b1 b2)
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
1026 "Function for sorting internal buffers at the end of all buffers."
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1027 (string-match-p "^\\*" (buffer-name b2)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 ;; Configurations:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 (defun bs-config-clear ()
78950
569e6cbc4c70 Don't defvar `fontlock-verbose'.
Juanma Barranquero <lekktu@gmail.com>
parents: 78236
diff changeset
1034 "Reset all variables which specify a configuration.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 These variables are `bs-dont-show-regexp', `bs-must-show-regexp',
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 `bs-dont-show-function', `bs-must-show-function' and
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 `bs-buffer-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (setq bs-dont-show-regexp nil
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1039 bs-must-show-regexp nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1040 bs-dont-show-function nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1041 bs-must-show-function nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1042 bs-buffer-sort-function nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044 (defun bs-config--only-files ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1045 "Define a configuration for showing only buffers visiting a file."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1046 (bs-config-clear)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1047 (setq ;; I want to see *-buffers at the end
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1048 bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1049 ;; Don't show files who don't belong to a file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1050 bs-dont-show-function 'bs-visits-non-file))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1051
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1052 (defun bs-config--files-and-scratch ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1053 "Define a configuration for showing buffer *scratch* and file buffers."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1054 (bs-config-clear)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1055 (setq ;; I want to see *-buffers at the end
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1056 bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1057 ;; Don't show files who don't belong to a file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1058 bs-dont-show-function 'bs-visits-non-file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1059 ;; Show *scratch* buffer.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1060 bs-must-show-regexp "^\\*scratch\\*$"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1061
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1062 (defun bs-config--all ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1063 "Define a configuration for showing all buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064 Reset all according variables by `bs-config-clear'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1065 (bs-config-clear))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067 (defun bs-config--all-intern-last ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1068 "Define a configuration for showing all buffers.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1069 Internal buffers appear at end of all buffers."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070 (bs-config-clear)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1071 ;; I want to see *-buffers at the end
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072 (setq bs-buffer-sort-function 'bs-sort-buffer-interns-are-last))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1073
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074 (defun bs-set-configuration (name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 "Set configuration to the one saved under string NAME in `bs-configurations'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 When called interactively ask user for a configuration and apply selected
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1078 (interactive (list (completing-read "Use configuration: "
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1079 bs-configurations
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1080 nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1081 t)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082 (let ((list (assoc name bs-configurations)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 (if list
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1084 (if (listp list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1085 (setq bs-current-configuration name
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1086 bs-must-show-regexp (nth 1 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1087 bs-must-show-function (nth 2 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1088 bs-dont-show-regexp (nth 3 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1089 bs-dont-show-function (nth 4 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1090 bs-buffer-sort-function (nth 5 list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1091 ;; for backward compability
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1092 (funcall (cdr list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1093 ;; else
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094 (ding)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 (bs-message-without-log "No bs-configuration named %S." name))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1097 (defun bs-help ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1098 "Help for `bs-show'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1099 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1100 (describe-function 'bs-mode))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1101
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1102 (defun bs-next-config-aux (start-name list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1103 "Get the next assoc after START-NAME in list LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1104 Will return the first if START-NAME is at end."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1105 (let ((assocs list)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1106 (length (length list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1107 pos)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1108 (while (and assocs (not pos))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1109 (when (string= (car (car assocs)) start-name)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1110 (setq pos (- length (length assocs))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1111 (setq assocs (cdr assocs)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1112 (setq pos (1+ pos))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1113 (if (eq pos length)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1114 (car list)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1115 (nth pos list))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1116
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1117 (defun bs-next-config (name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1118 "Return next configuration with respect to configuration with name NAME."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1119 (bs-next-config-aux name bs-configurations))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1120
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1121 (defun bs-select-next-configuration (&optional start-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1122 "Apply next configuration START-NAME and refresh buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1123 If START-NAME is nil the current configuration `bs-current-configuration'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1124 will be used."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1125 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1126 (let ((config (bs-next-config (or start-name bs-current-configuration))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1127 (bs-set-configuration (car config))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1128 (setq bs-default-configuration bs-current-configuration)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1129 (bs--redisplay t)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130 (bs--set-window-height)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1131 (bs-message-without-log "Selected configuration: %s" (car config))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1132
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1133 (defun bs-show-in-buffer (list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1134 "Display buffer list LIST in buffer *buffer-selection*.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1135 Select buffer *buffer-selection* and display buffers according to current
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1136 configuration `bs-current-configuration'. Set window height, fontify buffer
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1137 and move point to current buffer."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1138 (setq bs-current-list list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1139 (switch-to-buffer (get-buffer-create "*buffer-selection*"))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1140 (bs-mode)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1141 (let* ((inhibit-read-only t)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1142 (map-fun (lambda (entry)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1143 (length (buffer-name entry))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1144 (max-length-of-names (apply 'max
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1145 (cons 0 (mapcar map-fun list))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1146 (name-entry-length (min bs-maximal-buffer-name-column
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1147 (max bs-minimal-buffer-name-column
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1148 max-length-of-names))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1149 (erase-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1150 (setq bs--name-entry-length name-entry-length)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1151 (bs--show-header)
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1152 (dolist (buffer list)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1153 (bs--insert-one-entry buffer)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1154 (insert "\n"))
108765
d835100c3e8b Replace Lisp calls to delete-backward-char by delete-char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106815
diff changeset
1155 (delete-char -1)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1156 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1157 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1158 (font-lock-fontify-buffer)
68924
526bb84288e1 (bs-mode): Use `buffer-disable-undo'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
1159 (bs-apply-sort-faces)
526bb84288e1 (bs-mode): Use `buffer-disable-undo'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
1160 (set-buffer-modified-p nil)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1161
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1162 (defun bs-next-buffer (&optional buffer-list sorting-p)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1163 "Return next buffer and buffer list for buffer cycling in BUFFER-LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1164 Ignore sorting when SORTING-P is nil.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1165 If BUFFER-LIST is nil the result of `bs-buffer-list' will be used as
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1166 buffer list. The result is a cons of normally the second element of
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1167 BUFFER-LIST and the buffer list used for buffer cycling."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1168 (let* ((bs--current-sort-function (if sorting-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1169 bs--current-sort-function))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1170 (bs-buffer-list (or buffer-list (bs-buffer-list))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171 (cons (or (car (cdr bs-buffer-list))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1172 (car bs-buffer-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1173 (current-buffer))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1174 bs-buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1175
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1176 (defun bs-previous-buffer (&optional buffer-list sorting-p)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1177 "Return previous buffer and buffer list for buffer cycling in BUFFER-LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1178 Ignore sorting when SORTING-P is nil.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1179 If BUFFER-LIST is nil the result of `bs-buffer-list' will be used as
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1180 buffer list. The result is a cons of last element of BUFFER-LIST and the
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1181 buffer list used for buffer cycling."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1182 (let* ((bs--current-sort-function (if sorting-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1183 bs--current-sort-function))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1184 (bs-buffer-list (or buffer-list (bs-buffer-list))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1185 (cons (or (car (last bs-buffer-list))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1186 (current-buffer))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1187 bs-buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1188
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1189 (defun bs-message-without-log (&rest args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1190 "Like `message' but don't log it on the message log.
47119
7a265d2c1031 (bs-message-without-log): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 41312
diff changeset
1191 All arguments ARGS are transferred to function `message'."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 (let ((message-log-max nil))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193 (apply 'message args)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1194
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195 (defvar bs--cycle-list nil
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1196 "Current buffer list used for cycling.")
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 (defun bs-cycle-next ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1200 "Select next buffer defined by buffer cycling.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1201 The buffers taking part in buffer cycling are defined
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202 by buffer configuration `bs-cycle-configuration-name'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1204 (let ((bs--buffer-coming-from (current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1205 (bs-dont-show-regexp bs-dont-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1206 (bs-must-show-regexp bs-must-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1207 (bs-dont-show-function bs-dont-show-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1208 (bs-must-show-function bs-must-show-function)
36925
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1209 (bs--show-all nil))
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1210 (bs-set-configuration (or bs-cycle-configuration-name bs-default-configuration))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 (let ((bs-buffer-sort-function nil)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1212 (bs--current-sort-function nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 (let* ((tupel (bs-next-buffer (if (or (eq last-command
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1214 'bs-cycle-next)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1215 (eq last-command
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1216 'bs-cycle-previous))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1217 bs--cycle-list)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1218 (next (car tupel))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1219 (cycle-list (cdr tupel)))
77917
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1220 (unless (window-dedicated-p (selected-window))
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1221 ;; We don't want the frame iconified if the only window in the frame
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1222 ;; happens to be dedicated; let's get the error from switch-to-buffer
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1223 (bury-buffer))
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1224 (switch-to-buffer next)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1225 (setq bs--cycle-list (append (cdr cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1226 (list (car cycle-list))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1227 (bs-message-without-log "Next buffers: %s"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1228 (or (cdr bs--cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1229 "this buffer"))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1230
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 (defun bs-cycle-previous ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233 "Select previous buffer defined by buffer cycling.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234 The buffers taking part in buffer cycling are defined
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 by buffer configuration `bs-cycle-configuration-name'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 (let ((bs--buffer-coming-from (current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1238 (bs-dont-show-regexp bs-dont-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1239 (bs-must-show-regexp bs-must-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1240 (bs-dont-show-function bs-dont-show-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1241 (bs-must-show-function bs-must-show-function)
36925
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1242 (bs--show-all nil))
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1243 (bs-set-configuration (or bs-cycle-configuration-name bs-default-configuration))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 (let ((bs-buffer-sort-function nil)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1245 (bs--current-sort-function nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246 (let* ((tupel (bs-previous-buffer (if (or (eq last-command
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1247 'bs-cycle-next)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1248 (eq last-command
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1249 'bs-cycle-previous))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1250 bs--cycle-list)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1251 (prev-buffer (car tupel))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1252 (cycle-list (cdr tupel)))
77917
32e17b491f4f (bs-cycle-previous): Don't modify the cycle list until
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
1253 (switch-to-buffer prev-buffer)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1254 (setq bs--cycle-list (append (last cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1255 (reverse (cdr (reverse cycle-list)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1256 (bs-message-without-log "Previous buffers: %s"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1257 (or (reverse (cdr bs--cycle-list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1258 "this buffer"))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1259
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1260 (defun bs--get-value (fun &optional args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1261 "Apply function FUN with arguments ARGS.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 Return result of evaluation. Will return FUN if FUN is a number
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1263 or a string."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1264 (cond ((numberp fun)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1265 fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1266 ((stringp fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1267 fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1268 (t (apply fun args))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1269
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270 (defun bs--get-marked-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1271 "Return a string which describes whether current buffer is marked.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1273 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1274 The result string is one of `bs-string-current', `bs-string-current-marked',
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1275 `bs-string-marked', `bs-string-show-normally', `bs-string-show-never', or
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276 `bs-string-show-always'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1277 (cond ;; current buffer is the buffer we started buffer selection.
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1278 ((eq (current-buffer) start-buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1279 (if (memq (current-buffer) bs--marked-buffers)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1280 bs-string-current-marked ; buffer is marked
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1281 bs-string-current))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1282 ;; current buffer is marked
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1283 ((memq (current-buffer) bs--marked-buffers)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1284 bs-string-marked)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1285 ;; current buffer hasn't a special mark.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1286 ((null bs-buffer-show-mark)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1287 bs-string-show-normally)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1288 ;; current buffer has a mark not to show itself.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1289 ((eq bs-buffer-show-mark 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1290 bs-string-show-never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1291 ;; otherwise current buffer is marked to show always.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1292 (t
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1293 bs-string-show-always)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1294
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1295 (defun bs--get-modified-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1296 "Return a string which describes whether current buffer is modified.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1297 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1298 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1299 (if (buffer-modified-p) "*" " "))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1300
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1301 (defun bs--get-readonly-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1302 "Return a string which describes whether current buffer is read only.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1303 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1304 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305 (if buffer-read-only "%" " "))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 (defun bs--get-size-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308 "Return a string which describes the size of current buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1310 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311 (int-to-string (buffer-size)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1312
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 (defun bs--get-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1314 "Return name of current buffer for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315 The name of current buffer gets additional text properties
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 for mouse highlighting.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1317 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1318 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
68447
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1319 (propertize (buffer-name)
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1320 'help-echo "mouse-2: select this buffer, mouse-3: select in other frame"
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1321 'mouse-face 'highlight))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1322
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323 (defun bs--get-mode-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1324 "Return the name of mode of current buffer for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325 START-BUFFER is the buffer where we started buffer selection.
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1326 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
87578
2a8a9f3362d6 (bs--get-mode-name): Fix typo in previous change.
Juanma Barranquero <lekktu@gmail.com>
parents: 87567
diff changeset
1327 (format-mode-line mode-name nil nil start-buffer))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 (defun bs--get-file-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330 "Return string for column 'File' in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331 This is the variable `buffer-file-name' of current buffer.
105197
3ed1736067e6 * bs.el (bs--get-file-name): Use `list-buffers-directory'
Juanma Barranquero <lekktu@gmail.com>
parents: 104543
diff changeset
1332 If not visiting a file, `list-buffers-directory' is returned instead.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1333 START-BUFFER is the buffer where we started buffer selection.
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
1334 ALL-BUFFERS is the list of buffers appearing in Buffer Selection Menu."
105197
3ed1736067e6 * bs.el (bs--get-file-name): Use `list-buffers-directory'
Juanma Barranquero <lekktu@gmail.com>
parents: 104543
diff changeset
1335 (propertize (or buffer-file-name
3ed1736067e6 * bs.el (bs--get-file-name): Use `list-buffers-directory'
Juanma Barranquero <lekktu@gmail.com>
parents: 104543
diff changeset
1336 (bound-and-true-p list-buffers-directory)
3ed1736067e6 * bs.el (bs--get-file-name): Use `list-buffers-directory'
Juanma Barranquero <lekktu@gmail.com>
parents: 104543
diff changeset
1337 "")
68924
526bb84288e1 (bs-mode): Use `buffer-disable-undo'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
1338 'mouse-face 'highlight
526bb84288e1 (bs-mode): Use `buffer-disable-undo'.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
1339 'help-echo "mouse-2: select this buffer, mouse-3: select in other frame"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341 (defun bs--insert-one-entry (buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342 "Generate one entry for buffer BUFFER in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 It goes over all columns described in `bs-attributes-list'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 and evaluates corresponding string. Inserts string in current buffer;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 normally *buffer-selection*."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1346 (let ((string "")
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1347 (to-much 0)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 (apply-args (append (list bs--buffer-coming-from bs-current-list))))
96276
5f58c2a66de7 * buff-menu.el: Use with-current-buffer and inhibit-read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 94678
diff changeset
1349 (with-current-buffer buffer
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1350 (dolist (column bs-attributes-list)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1351 (let* ((min (bs--get-value (nth 1 column)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1352 (new-string (bs--format-aux (bs--get-value (nth 4 column) ; fun
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1353 apply-args)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1354 (nth 3 column) ; align
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1355 (- min to-much)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1356 (len (length new-string)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1357 (setq string (concat string new-string))
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1358 (when (> len min)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1359 (setq to-much (- len min))))))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1360 (insert string)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362 (defun bs--format-aux (string align len)
78972
3ae0d15a80ab (bs--get-marked-string, bs--get-modified-string, bs--get-readonly-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 78954
diff changeset
1363 "Pad STRING to length LEN with alignment ALIGN.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 ALIGN is one of the symbols `left', `middle', or `right'."
68447
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1365 (let* ((width (length string))
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1366 (len (max len width)))
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1367 (format (format "%%%s%ds" (if (eq align 'right) "" "-") len)
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1368 (if (eq align 'middle)
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1369 (concat (make-string (/ (- len width) 2) ?\s) string)
0d6e07750ed8 (bs--format-aux): Implement `middle' alignment as described in the docstring for
Juanma Barranquero <lekktu@gmail.com>
parents: 65286
diff changeset
1370 string))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 (defun bs--show-header ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 "Insert header for Buffer Selection Menu in current buffer."
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1374 (insert (bs--create-header-line #'identity)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1375 "\n"
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1376 (bs--create-header-line (lambda (title)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1377 (make-string (length title) ?-)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1378 "\n"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 (defun bs--get-name-length ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 "Return value of `bs--name-entry-length'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 bs--name-entry-length)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1384 (defun bs--create-header-line (col)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1385 "Generate a line for the header.
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1386 COL is called for each column in `bs-attributes-list' as a
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1387 function of one argument, the string heading for the column."
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1388 (mapconcat (lambda (column)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1389 (bs--format-aux (funcall col (bs--get-value (car column)))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1390 (nth 3 column) ; align
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1391 (bs--get-value (nth 1 column))))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1392 bs-attributes-list
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1393 ""))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 (defun bs--show-with-configuration (name &optional arg)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1396 "Display buffer list of configuration with name NAME.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 Set configuration NAME and determine window for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398 Unless current buffer is buffer *buffer-selection* we have to save
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 the buffer we started Buffer Selection Menu and the current window
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 configuration to restore buffer and window configuration after a
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 selection. If there is already a window displaying *buffer-selection*
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1402 select this window for Buffer Selection Menu. Otherwise open a new
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403 window.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404 The optional argument ARG is the prefix argument when calling a function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405 for buffer selection."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 (bs-set-configuration name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1407 (let ((bs--show-all (or bs--show-all arg)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1408 (unless (string= "*buffer-selection*" (buffer-name))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409 ;; Only when not in buffer *buffer-selection*
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410 ;; we have to set the buffer we started the command
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
1411 (setq bs--buffer-coming-from (current-buffer)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1412 (let ((liste (bs-buffer-list))
73859
75ac3e7c76de (bs--window-for-buffer): Remove.
Juanma Barranquero <lekktu@gmail.com>
parents: 73850
diff changeset
1413 (active-window (get-window-with-predicate
85325
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1414 (lambda (w)
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1415 (string= (buffer-name (window-buffer w))
f885ff424d69 (bs--make-header-match-string, bs-show-in-buffer, bs--nth-wrapper): Simplify.
Juanma Barranquero <lekktu@gmail.com>
parents: 85170
diff changeset
1416 "*buffer-selection*"))
79104
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
1417 nil (selected-frame))))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1418 (if active-window
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1419 (select-window active-window)
79104
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
1420 (bs--restore-window-config)
4801bb53c00e (bs--window-config-coming-from): Revert 2006-11-09 change.
Juanma Barranquero <lekktu@gmail.com>
parents: 78976
diff changeset
1421 (setq bs--window-config-coming-from (current-window-configuration))
73850
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
1422 (when (> (window-height (selected-window)) 7)
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
1423 (split-window-vertically)
c089b114a8ec (bs--redisplay): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 73642
diff changeset
1424 (other-window 1)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1425 (bs-show-in-buffer liste)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1426 (bs-message-without-log "%s" (bs--current-config-message)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1427
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1428 (defun bs--configuration-name-for-prefix-arg (prefix-arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429 "Convert prefix argument PREFIX-ARG to a name of a buffer configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430 If PREFIX-ARG is nil return `bs-default-configuration'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1431 If PREFIX-ARG is an integer return PREFIX-ARG element of `bs-configurations'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1432 Otherwise return `bs-alternative-configuration'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1433 (cond ;; usually activation
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1434 ((null prefix-arg)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1435 bs-default-configuration)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1436 ;; call with integer as prefix argument
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1437 ((integerp prefix-arg)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1438 (if (and (< 0 prefix-arg) (<= prefix-arg (length bs-configurations)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1439 (car (nth (1- prefix-arg) bs-configurations))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1440 bs-default-configuration))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1441 ;; call by prefix argument C-u
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1442 (t bs-alternative-configuration)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1443
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445 ;; Main function bs-customize and bs-show
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1447
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1448 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1449 (defun bs-customize ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1450 "Customization of group bs for Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1451 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1452 (customize-group "bs"))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1453
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1454 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1455 (defun bs-show (arg)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1456 "Make a menu of buffers so you can manipulate buffers or the buffer list.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1457 \\<bs-mode-map>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1458 There are many key commands similar to `Buffer-menu-mode' for
78954
fad130192ad9 (bs-string-show-normally, bs-sort-functions, bs--get-file-name):
Juanma Barranquero <lekktu@gmail.com>
parents: 78952
diff changeset
1459 manipulating the buffer list and the buffers themselves.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 User can move with [up] or [down], select a buffer
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461 by \\[bs-select] or [SPC]\n
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462 Type \\[bs-kill] to leave Buffer Selection Menu without a selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 Type \\[bs-help] after invocation to get help on commands available.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1464 With prefix argument ARG show a different buffer list. Function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1465 `bs--configuration-name-for-prefix-arg' determine accordingly
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1466 name of buffer configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1467 (interactive "P")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1468 (setq bs--marked-buffers nil)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1469 (bs--show-with-configuration (bs--configuration-name-for-prefix-arg arg)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1470
98570
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1471 ;; ----------------------------------------------------------------------
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1472 ;; Cleanup
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1473 ;; ----------------------------------------------------------------------
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1474
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1475 (defun bs-unload-function ()
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1476 "Unload the Buffer Selection library."
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1477 (let ((bs-buf (get-buffer "*buffer-selection*")))
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1478 (when bs-buf
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1479 (with-current-buffer bs-buf
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1480 (when (eq major-mode 'bs-mode)
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1481 (bs-kill)
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1482 (kill-buffer bs-buf)))))
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1483 ;; continue standard unloading
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1484 nil)
0f0acad20b91 * bs.el (bs-unload-function): New function.
Juanma Barranquero <lekktu@gmail.com>
parents: 96278
diff changeset
1485
39568
e67950065cf9 Change ;;; to ;; for outline-minor-mode.
Gerd Moellmann <gerd@gnu.org>
parents: 38095
diff changeset
1486 ;; Now provide feature bs
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1487 (provide 'bs)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1488
87567
4c3c683cdff8 * erc-ibuffer.el (erc-channel-modes):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85688
diff changeset
1489 ;; arch-tag: c0d9ab34-bf06-4368-ae9d-af88878e6802
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1490 ;;; bs.el ends here