annotate lisp/bs.el @ 51242:661e2fe7e775

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