annotate lisp/bs.el @ 55434:f88632e54afb

2004-05-08 John Wiegley <johnw@newartisans.com> * iswitchb.el (iswitchb-use-virtual-buffers): Added support for "virtual buffers" (off by default), which makes it possible to switch to the buffers of recently files. When a buffer name search fails, and this option is on, iswitchb will look at the list of recently visited files, and permit matching against those names. When the user hits RET on a match, it will revisit that file. (iswitchb-read-buffer): Added two optional arguments, which makes isearchb.el possible. (iswitchb-completions, iswitchb-set-matches, iswitchb-prev-match, iswitchb-next-match): Added support for virtual buffers.
author John Wiegley <johnw@newartisans.com>
date Sat, 08 May 2004 13:00:52 +0000
parents 0a5e192bf05d
children 240e59879420
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
54581
0a5e192bf05d (bs-buffer-list): Use buffer-local-value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
3 ;; Copyright (C) 1998, 1999, 2000, 2001, 2004 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
52243
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
460 (defvar bs-mode-map
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
461 (let ((map (make-sparse-keymap)))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
462 (define-key map " " 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
463 (define-key map "f" 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
464 (define-key map "v" 'bs-view)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
465 (define-key map "!" 'bs-select-in-one-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
466 (define-key map [mouse-2] 'bs-mouse-select) ;; for GNU EMACS
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
467 (define-key map [button2] 'bs-mouse-select) ;; for XEmacs
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
468 (define-key map "F" 'bs-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
469 (let ((key ?1))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
470 (while (<= key ?9)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
471 (define-key map (char-to-string key) 'digit-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
472 (setq key (1+ key))))
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
473 (define-key map "-" 'negative-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
474 (define-key map "\e-" 'negative-argument)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
475 (define-key map "o" 'bs-select-other-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
476 (define-key map "\C-o" 'bs-tmp-select-other-window)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
477 ;; for GNU EMACS
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
478 (define-key map [mouse-3] 'bs-mouse-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
479 ;; for XEmacs
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
480 (define-key map [button3] 'bs-mouse-select-other-frame)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
481 (define-key map [up] 'bs-up)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
482 (define-key map "n" 'bs-down)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
483 (define-key map "p" 'bs-up)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
484 (define-key map [down] 'bs-down)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
485 (define-key map "\C-m" 'bs-select)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
486 (define-key map "b" 'bs-bury-buffer)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
487 (define-key map "s" 'bs-save)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
488 (define-key map "S" 'bs-show-sorted)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
489 (define-key map "a" 'bs-toggle-show-all)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
490 (define-key map "d" 'bs-delete)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
491 (define-key map "\C-d" 'bs-delete-backward)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
492 (define-key map "k" 'bs-delete)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
493 (define-key map "g" 'bs-refresh)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
494 (define-key map "C" 'bs-set-configuration-and-refresh)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
495 (define-key map "c" 'bs-select-next-configuration)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
496 (define-key map "q" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
497 ;; (define-key map "z" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
498 (define-key map "\C-c\C-c" 'bs-kill)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
499 (define-key map "\C-g" 'bs-abort)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
500 (define-key map "\C-]" 'bs-abort)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
501 (define-key map "%" 'bs-toggle-readonly)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
502 (define-key map "~" 'bs-clear-modified)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
503 (define-key map "M" 'bs-toggle-current-to-show)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
504 (define-key map "+" 'bs-set-current-buffer-to-show-always)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
505 ;;(define-key map "-" 'bs-set-current-buffer-to-show-never)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
506 (define-key map "t" 'bs-visit-tags-table)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
507 (define-key map "m" 'bs-mark-current)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
508 (define-key map "u" 'bs-unmark-current)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
509 (define-key map ">" 'scroll-right)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
510 (define-key map "<" 'scroll-left)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
511 (define-key map "?" 'bs-help)
04df84f8d2ea ChangeLog
Alex Schroeder <alex@gnu.org>
parents: 47119
diff changeset
512 map)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
513 "Keymap of `bs-mode'.")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
514
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
515 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
516 ;; Functions
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
517 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
518
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
519 (defun bs-buffer-list (&optional list sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
520 "Return a list of buffers to be shown.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
521 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
522 The result list depends on the global variables `bs-dont-show-regexp',
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
523 `bs-must-show-regexp', `bs-dont-show-function', `bs-must-show-function'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
524 and `bs-buffer-sort-function'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
525 If SORT-DESCRIPTION isn't nil the list will be sorted by
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
526 a special function. SORT-DESCRIPTION is an element of `bs-sort-functions'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
527 (setq sort-description (or sort-description bs--current-sort-function)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
528 list (or list (buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
529 (let ((result nil))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
530 (while list
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
531 (let* ((buffername (buffer-name (car list)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
532 (int-show-never (string-match bs--intern-show-never buffername))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
533 (ext-show-never (and bs-dont-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
534 (string-match bs-dont-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
535 buffername)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
536 (extern-must-show (or (and bs-must-always-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
537 (string-match
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
538 bs-must-always-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
539 buffername))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
540 (and bs-must-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
541 (string-match bs-must-show-regexp
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
542 buffername))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
543 (extern-show-never-from-fun (and bs-dont-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
544 (funcall bs-dont-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
545 (car list))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
546 (extern-must-show-from-fun (and bs-must-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
547 (funcall bs-must-show-function
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
548 (car list))))
54581
0a5e192bf05d (bs-buffer-list): Use buffer-local-value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
549 (show-flag (buffer-local-value 'bs-buffer-show-mark (car list))))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
550 (if (or (eq show-flag 'always)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
551 (and (or bs--show-all (not (eq show-flag 'never)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
552 (not int-show-never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
553 (or bs--show-all
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
554 extern-must-show
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
555 extern-must-show-from-fun
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
556 (and (not ext-show-never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
557 (not extern-show-never-from-fun)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
558 (setq result (cons (car list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
559 result)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
560 (setq list (cdr list))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
561 (setq result (reverse result))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
562 ;; 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
563 ;; 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
564 ;; buffer we started bs-show.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 (if (and bs--buffer-coming-from
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
566 (buffer-live-p bs--buffer-coming-from)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
567 (not (memq bs--buffer-coming-from result)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
568 (setq result (cons bs--buffer-coming-from result)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
569 ;; sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
570 (if (and sort-description
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
571 (nth 1 sort-description))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
572 (setq result (sort result (nth 1 sort-description)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573 ;; else standard sorting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574 (bs-buffer-sort result))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
576 (defun bs-buffer-sort (buffer-list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
577 "Sort buffers in BUFFER-LIST according to `bs-buffer-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
578 (if bs-buffer-sort-function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
579 (sort buffer-list bs-buffer-sort-function)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
580 buffer-list))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
581
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
582 (defun bs--redisplay (&optional keep-line-p sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
583 "Redisplay whole Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
584 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
585 SORT-DESCRIPTION is an element of `bs-sort-functions'"
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
586 (let ((line (1+ (count-lines 1 (point)))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
587 (bs-show-in-buffer (bs-buffer-list nil sort-description))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
588 (if keep-line-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
589 (goto-line line))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
590 (beginning-of-line)))
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--goto-current-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
593 "Goto line which represents the current buffer;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594 actually the line which begins with character in `bs-string-current' or
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
595 `bs-string-current-marked'."
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
596 (let ((regexp (concat "^"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
597 (regexp-quote bs-string-current)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
598 "\\|^"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
599 (regexp-quote bs-string-current-marked)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
600 point)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
601 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
602 (goto-char (point-min))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
603 (if (search-forward-regexp regexp nil t)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
604 (setq point (- (point) 1))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
605 (if point
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
606 (goto-char point))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
608 (defun bs--current-config-message ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
609 "Return a string describing the current `bs-mode' configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
610 (if bs--show-all
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
611 "Show all buffers."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
612 (format "Show buffer by configuration %S"
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
613 bs-current-configuration)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
614
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
615 (defun bs-mode ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
616 "Major mode for editing a subset of Emacs' buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
617 \\<bs-mode-map>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
618 Aside from two header lines each line describes one buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
619 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
620 buffer by \\[bs-select] or SPC. Abort buffer list with \\[bs-kill].
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
621 There are many key commands similar to `Buffer-menu-mode' for
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 manipulating the buffer list and buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
623 For faster navigation each digit key is a digit argument.
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 \\[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
626 \\[bs-toggle-show-all] -- toggle between all buffers and a special subset.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
627 \\[bs-select-other-window] -- select current line's buffer in other window.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628 \\[bs-tmp-select-other-window] -- make another window display that buffer and
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
629 remain in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
630 \\[bs-mouse-select] -- select current line's buffer and other marked buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
631 \\[bs-save] -- save current line's buffer immediatly.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
632 \\[bs-delete] -- kill current line's buffer immediatly.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
633 \\[bs-toggle-readonly] -- toggle read-only status of current line's buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
634 \\[bs-clear-modified] -- clear modified-flag on that buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
635 \\[bs-mark-current] -- mark current line's buffer to be displayed.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
636 \\[bs-unmark-current] -- unmark current line's buffer to be displayed.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
637 \\[bs-show-sorted] -- display buffer list sorted by next sort aspect.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
638 \\[bs-set-configuration-and-refresh] -- ask user for a configuration and \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
639 apply selected configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
640 \\[bs-select-next-configuration] -- select and apply next \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
641 available Buffer Selection Menu configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
642 \\[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
643 \\[bs-toggle-current-to-show] -- toggle status of appearance.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
644 \\[bs-set-current-buffer-to-show-always] -- mark current line's buffer \
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
645 to show always.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
646 \\[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
647 \\[bs-help] -- display this help text."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
648 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
649 (kill-all-local-variables)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
650 (use-local-map bs-mode-map)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651 (make-local-variable 'font-lock-defaults)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
652 (make-local-variable 'font-lock-verbose)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
653 (setq major-mode 'bs-mode
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
654 mode-name "Buffer-Selection-Menu"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
655 buffer-read-only t
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
656 truncate-lines t
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
657 font-lock-defaults '(bs-mode-font-lock-keywords t)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
658 font-lock-verbose nil)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
659 (run-hooks 'bs-mode-hook))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
660
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
661 (defun bs-kill ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
662 "Let buffer disappear and reset window-configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
663 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
664 (bury-buffer (current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
665 (set-window-configuration bs--window-config-coming-from))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
666
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
667 (defun bs-abort ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
668 "Ding and leave Buffer Selection Menu without a selection."
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
669 (interactive)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
670 (ding)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
671 (bs-kill))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
672
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
673 (defun bs-set-configuration-and-refresh ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
674 "Ask user for a configuration and apply selected configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
675 Refresh whole Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
676 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
677 (call-interactively 'bs-set-configuration)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
678 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
679
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
680 (defun bs-refresh ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
681 "Refresh whole Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
682 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
683 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
685 (defun bs--window-for-buffer (buffer-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
686 "Return a window showing a buffer with name BUFFER-NAME.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
687 Take only windows of current frame into account.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 Return nil if there is no such buffer."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 (let ((window nil))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690 (walk-windows (lambda (wind)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
691 (if (string= (buffer-name (window-buffer wind))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
692 buffer-name)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
693 (setq window wind))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694 window))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 (defun bs--set-window-height ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 "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
698 (unless (one-window-p t)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 (shrink-window (- (window-height (selected-window))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
700 ;; window-height in xemacs includes mode-line
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
701 (+ (if bs--running-in-xemacs 3 1)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
702 bs-header-lines-length
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
703 (min (length bs-current-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
704 bs-max-window-height))))))
27016
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--current-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
707 "Return buffer on current line.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
708 Raise an error if not on a buffer line."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710 (let ((line (+ (- bs-header-lines-length)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
711 (count-lines 1 (point)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 (if (< line 0)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
713 (error "You are on a header row"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
714 (nth line bs-current-list)))
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--update-current-line ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
717 "Update the entry on current line for Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
718 (let ((buffer (bs--current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
719 (inhibit-read-only t))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 (delete-region (point) (line-end-position))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 (bs--insert-one-entry buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723 (beginning-of-line)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
724
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
725 (defun bs-view ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726 "View current line's buffer in View mode.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
727 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
728 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
729 (view-buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731 (defun bs-select ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732 "Select current line's buffer and other marked buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
733 If there are no marked buffers the window configuration before starting
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
734 Buffer Selectin Menu will be restored.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735 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
736 will be selected in a window.
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 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
740 (bury-buffer (current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 (set-window-configuration bs--window-config-coming-from)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
742 (switch-to-buffer buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
743 (if bs--marked-buffers
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
744 ;; Some marked buffers for selection
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
745 (let* ((all (delq buffer bs--marked-buffers))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
746 (height (/ (1- (frame-height)) (1+ (length all)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
747 (delete-other-windows)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
748 (switch-to-buffer buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
749 (while all
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
750 (split-window nil height)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
751 (other-window 1)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
752 (switch-to-buffer (car all))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
753 (setq all (cdr all)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
754 ;; goto window we have started bs.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
755 (other-window 1)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
756
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
757 (defun bs-select-other-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
758 "Select current line's buffer by `switch-to-buffer-other-window'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
759 The window configuration before starting Buffer Selectin Menu will be restored
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
760 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
761 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
763 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
764 (bury-buffer (current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 (set-window-configuration bs--window-config-coming-from)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 (switch-to-buffer-other-window buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
768 (defun bs-tmp-select-other-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 "Make the other window select this line's buffer.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
770 The current window remains selected."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
771 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
772 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 (display-buffer buffer t)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775 (defun bs-select-other-frame ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 "Select current line's buffer in new created frame.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
780 (bury-buffer (current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 (set-window-configuration bs--window-config-coming-from)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782 (switch-to-buffer-other-frame buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
784 (defun bs-mouse-select-other-frame (event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
785 "Select selected line's buffer in new created frame.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
786 Leave Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
787 EVENT: a mouse click EVENT."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788 (interactive "e")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
789 (mouse-set-point event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
790 (bs-select-other-frame))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
791
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
792 (defun bs-mouse-select (event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
793 "Select buffer on mouse click EVENT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794 Select buffer by `bs-select'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
795 (interactive "e")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796 (mouse-set-point event)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797 (bs-select))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 (defun bs-select-in-one-window ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800 "Select current line's buffer in one window and delete other windows.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 Leave Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803 (bs-select)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 (delete-other-windows))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 (defun bs-bury-buffer ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 "Bury buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
809 (bury-buffer (bs--current-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810 (bs--redisplay t))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 (defun bs-save ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813 "Save buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 (set-buffer buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 (save-buffer))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819 (bs--update-current-line)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
821 (defun bs-visit-tags-table ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822 "Visit the tags table in the buffer on this line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 See `visit-tags-table'."
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 ((file (buffer-file-name (bs--current-buffer))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 (if file
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
827 (visit-tags-table file)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 (error "Specified buffer has no file"))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830 (defun bs-toggle-current-to-show ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
831 "Toggle status of showing flag for buffer in current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
833 (let ((buffer (bs--current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
834 res)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836 (set-buffer buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837 (setq res (cond ((null bs-buffer-show-mark)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
838 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
839 ((eq bs-buffer-show-mark 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
840 'always)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
841 (t nil)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 (setq bs-buffer-show-mark res))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843 (bs--update-current-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 (bs--show-config-message res)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 (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
848 "Toggle status of buffer on line to `always shown'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849 NOT-TO-SHOW-P: prefix argument.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 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
851 always. Otherwise it is marked to show never."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 (interactive "P")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 (if not-to-show-p
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854 (bs-set-current-buffer-to-show-never)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
855 (bs--set-toggle-to-show (bs--current-buffer) 'always)))
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-never ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 "Toggle status of buffer on line to `never shown'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 (bs--set-toggle-to-show (bs--current-buffer) 'never))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 (defun bs--set-toggle-to-show (buffer what)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 "Set value `bs-buffer-show-mark' of buffer BUFFER to WHAT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 Redisplay current line and display a message describing
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 the status of buffer on current line."
54581
0a5e192bf05d (bs-buffer-list): Use buffer-local-value.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 52401
diff changeset
866 (with-current-buffer buffer (setq bs-buffer-show-mark what))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867 (bs--update-current-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869 (bs--show-config-message what))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871 (defun bs-mark-current (count)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
872 "Mark buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
873 COUNT is the number of buffers to mark.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 Move cursor vertically down COUNT lines."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
875 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
876 (let ((dir (if (> count 0) 1 -1))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
877 (count (abs count)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
878 (while (> count 0)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 (let ((buffer (bs--current-buffer)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
880 (if buffer
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
881 (setq bs--marked-buffers (cons buffer bs--marked-buffers)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
882 (bs--update-current-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
883 (bs-down dir))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
884 (setq count (1- count)))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
885
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
886 (defun bs-unmark-current (count)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 "Unmark buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 COUNT is the number of buffers to unmark.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
889 Move cursor vertically down COUNT lines."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891 (let ((dir (if (> count 0) 1 -1))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
892 (count (abs count)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
893 (while (> count 0)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
894 (let ((buffer (bs--current-buffer)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
895 (if buffer
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
896 (setq bs--marked-buffers (delq buffer bs--marked-buffers)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
897 (bs--update-current-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
898 (bs-down dir))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 (setq count (1- count)))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
901 (defun bs--show-config-message (what)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 "Show message indicating the new showing status WHAT.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903 WHAT is a value of nil, `never', or `always'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
904 (bs-message-without-log (cond ((null what)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
905 "Buffer will be shown normally.")
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
906 ((eq what 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
907 "Mark buffer to never be shown.")
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
908 (t "Mark buffer to show always."))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
909
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
910 (defun bs-delete ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
911 "Kill buffer on current line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
912 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913 (let ((current (bs--current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
914 (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
915 (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
916 (error "Buffer was not deleted"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
917 (setq bs-current-list (delq current bs-current-list))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
918 (beginning-of-line)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
919 (delete-region (point) (save-excursion
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
920 (end-of-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
921 (if (eobp) (point) (1+ (point)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
922 (if (eobp)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
923 (progn
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
924 (backward-delete-char 1)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
925 (beginning-of-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
926 (recenter -1)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927 (bs--set-window-height)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
928
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
929 (defun bs-delete-backward ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
930 "Like `bs-delete' but go to buffer in front of current."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
931 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
932 (let ((on-last-line-p (save-excursion (end-of-line) (eobp))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
933 (bs-delete)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
934 (unless on-last-line-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
935 (bs-up 1))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
936
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
937 (defun bs-show-sorted ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
938 "Show buffer list sorted by buffer name."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
940 (setq bs--current-sort-function
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
941 (bs-next-config-aux (car bs--current-sort-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
942 bs-sort-functions))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
943 (bs--redisplay)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
944 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
945 (bs-message-without-log "Sorted %s" (car bs--current-sort-function)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
947 (defun bs-apply-sort-faces (&optional sort-description)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
948 "Set text properties for the sort described by SORT-DESCRIPTION.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 SORT-DESCRIPTION is an element of `bs-sort-functions'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
950 Default is `bs--current-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
951 (let ((sort-description (or sort-description
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
952 bs--current-sort-function)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
953 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
954 (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
955 (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
956 (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
957 (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
958 (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
959 (match-end 0)
35d2f8b86ee9 (bs-apply-sort-faces): Don't use window-system, since all
Eli Zaretskii <eliz@gnu.org>
parents: 27576
diff changeset
960 'face
35d2f8b86ee9 (bs-apply-sort-faces): Don't use window-system, since all
Eli Zaretskii <eliz@gnu.org>
parents: 27576
diff changeset
961 (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
962 'region)))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 (defun bs-toggle-show-all ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 "Toggle show all buffers / show buffers with current configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 (setq bs--show-all (not bs--show-all))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 (bs--redisplay)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 (bs-message-without-log "%s" (bs--current-config-message)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 (defun bs-toggle-readonly ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973 "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
974 Uses function `vc-toggle-read-only'."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 (set-buffer buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 (vc-toggle-read-only))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 (bs--update-current-line)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
982 (defun bs-clear-modified ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983 "Set modified flag for buffer on current line to nil."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
984 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985 (let ((buffer (bs--current-buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 (set-buffer buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 (set-buffer-modified-p nil)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989 (bs--update-current-line))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991 (defun bs--nth-wrapper (count fun &rest args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992 "Call COUNT times function FUN with arguments ARGS."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 (setq count (or count 1))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 (while (> count 0)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 (apply fun args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 (setq count (1- count))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998 (defun bs-up (arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
999 "Move cursor vertically up ARG lines in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1000 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001 (if (and arg (numberp arg) (< arg 0))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1002 (bs--nth-wrapper (- arg) 'bs--down)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003 (bs--nth-wrapper arg 'bs--up)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 (defun bs--up ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 "Move cursor vertically up one line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 If on top of buffer list go to last line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1009 (previous-line 1)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 (if (<= (count-lines 1 (point)) (1- bs-header-lines-length))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 (progn
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1012 (goto-char (point-max))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1013 (beginning-of-line)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1014 (recenter -1))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 (beginning-of-line)))
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-down (arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 "Move cursor vertically down ARG lines in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 (interactive "p")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 (if (and arg (numberp arg) (< arg 0))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 (bs--nth-wrapper (- arg) 'bs--up)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 (bs--nth-wrapper arg 'bs--down)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024 (defun bs--down ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 "Move cursor vertically down one line.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026 If at end of buffer list go to first line."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 (let ((last (line-end-position)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 (if (eq last (point-max))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1029 (goto-line (1+ bs-header-lines-length))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 (next-line 1))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032 (defun bs-visits-non-file (buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 "Return t or nil whether BUFFER visits no file.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 A value of t means BUFFER belongs to no file.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 A value of nil means BUFFER belongs to a file."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 (not (buffer-file-name buffer)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (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
1039 "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
1040 (string-match "^\\*" (buffer-name b2)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1041
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1042 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043 ;; Configurations:
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1045
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1046 (defun bs-config-clear ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1047 "*Reset all variables which specify a configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1048 These variables are `bs-dont-show-regexp', `bs-must-show-regexp',
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1049 `bs-dont-show-function', `bs-must-show-function' and
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1050 `bs-buffer-sort-function'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1051 (setq bs-dont-show-regexp nil
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1052 bs-must-show-regexp nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1053 bs-dont-show-function nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1054 bs-must-show-function nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1055 bs-buffer-sort-function nil))
27016
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 (defun bs-config--only-files ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1058 "Define a configuration for showing only buffers visiting a file."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1059 (bs-config-clear)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1060 (setq ;; I want to see *-buffers at the end
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1061 bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1062 ;; Don't show files who don't belong to a file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1063 bs-dont-show-function 'bs-visits-non-file))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1065 (defun bs-config--files-and-scratch ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066 "Define a configuration for showing buffer *scratch* and file buffers."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067 (bs-config-clear)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1068 (setq ;; I want to see *-buffers at the end
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1069 bs-buffer-sort-function 'bs-sort-buffer-interns-are-last
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1070 ;; Don't show files who don't belong to a file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1071 bs-dont-show-function 'bs-visits-non-file
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1072 ;; Show *scratch* buffer.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1073 bs-must-show-regexp "^\\*scratch\\*$"))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 (defun bs-config--all ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 "Define a configuration for showing all buffers.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 Reset all according variables by `bs-config-clear'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1078 (bs-config-clear))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1080 (defun bs-config--all-intern-last ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1081 "Define a configuration for showing all buffers.
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1082 Internal buffers appear at end of all buffers."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 (bs-config-clear)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1084 ;; I want to see *-buffers at the end
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1085 (setq bs-buffer-sort-function 'bs-sort-buffer-interns-are-last))
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-set-configuration (name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088 "Set configuration to the one saved under string NAME in `bs-configurations'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1089 When called interactively ask user for a configuration and apply selected
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1090 configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1091 (interactive (list (completing-read "Use configuration: "
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1092 bs-configurations
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1093 nil
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1094 t)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 (let ((list (assoc name bs-configurations)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096 (if list
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1097 (if (listp list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1098 (setq bs-current-configuration name
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1099 bs-must-show-regexp (nth 1 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1100 bs-must-show-function (nth 2 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1101 bs-dont-show-regexp (nth 3 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1102 bs-dont-show-function (nth 4 list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1103 bs-buffer-sort-function (nth 5 list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1104 ;; for backward compability
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1105 (funcall (cdr list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1106 ;; else
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1107 (ding)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1108 (bs-message-without-log "No bs-configuration named %S." name))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1109
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1110 (defun bs-help ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1111 "Help for `bs-show'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1112 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1113 (describe-function 'bs-mode))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1114
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1115 (defun bs-next-config-aux (start-name list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1116 "Get the next assoc after START-NAME in list LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1117 Will return the first if START-NAME is at end."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1118 (let ((assocs list)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1119 (length (length list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1120 pos)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1121 (while (and assocs (not pos))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1122 (if (string= (car (car assocs)) start-name)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1123 (setq pos (- length (length assocs))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1124 (setq assocs (cdr assocs)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1125 (setq pos (1+ pos))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1126 (if (eq pos length)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1127 (car list)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1128 (nth pos list))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1129
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130 (defun bs-next-config (name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1131 "Return next configuration with respect to configuration with name NAME."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1132 (bs-next-config-aux name bs-configurations))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1133
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1134 (defun bs-select-next-configuration (&optional start-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1135 "Apply next configuration START-NAME and refresh buffer list.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1136 If START-NAME is nil the current configuration `bs-current-configuration'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1137 will be used."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1138 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1139 (let ((config (bs-next-config (or start-name bs-current-configuration))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1140 (bs-set-configuration (car config))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1141 (setq bs-default-configuration bs-current-configuration)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1142 (bs--redisplay t)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1143 (bs--set-window-height)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1144 (bs-message-without-log "Selected configuration: %s" (car config))))
27016
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-show-in-buffer (list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1147 "Display buffer list LIST in buffer *buffer-selection*.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1148 Select buffer *buffer-selection* and display buffers according to current
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1149 configuration `bs-current-configuration'. Set window height, fontify buffer
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1150 and move point to current buffer."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1151 (setq bs-current-list list)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1152 (switch-to-buffer (get-buffer-create "*buffer-selection*"))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1153 (bs-mode)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1154 (let* ((inhibit-read-only t)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1155 (map-fun (lambda (entry)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1156 (length (buffer-name entry))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1157 (max-length-of-names (apply 'max
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1158 (cons 0 (mapcar map-fun list))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1159 (name-entry-length (min bs-maximal-buffer-name-column
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1160 (max bs-minimal-buffer-name-column
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1161 max-length-of-names))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1162 (erase-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1163 (setq bs--name-entry-length name-entry-length)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1164 (bs--show-header)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1165 (while list
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1166 (bs--insert-one-entry (car list))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1167 (insert "\n")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1168 (setq list (cdr list)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1169 (delete-backward-char 1)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1170 (bs--set-window-height)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171 (bs--goto-current-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1172 (font-lock-fontify-buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1173 (bs-apply-sort-faces)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1174
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1175 (defun bs-next-buffer (&optional buffer-list sorting-p)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1176 "Return next buffer and buffer list for buffer cycling in BUFFER-LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1177 Ignore sorting when SORTING-P is nil.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1178 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
1179 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
1180 BUFFER-LIST and the buffer list used for buffer cycling."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1181 (let* ((bs--current-sort-function (if sorting-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1182 bs--current-sort-function))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1183 (bs-buffer-list (or buffer-list (bs-buffer-list))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1184 (cons (or (car (cdr bs-buffer-list))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1185 (car bs-buffer-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1186 (current-buffer))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1187 bs-buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1188
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1189 (defun bs-previous-buffer (&optional buffer-list sorting-p)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1190 "Return previous buffer and buffer list for buffer cycling in BUFFER-LIST.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1191 Ignore sorting when SORTING-P is nil.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 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
1193 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
1194 buffer list used for buffer cycling."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195 (let* ((bs--current-sort-function (if sorting-p
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1196 bs--current-sort-function))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1197 (bs-buffer-list (or buffer-list (bs-buffer-list))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 (cons (or (car (last bs-buffer-list))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1199 (current-buffer))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1200 bs-buffer-list)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1201
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202 (defun bs-message-without-log (&rest args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 "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
1204 All arguments ARGS are transferred to function `message'."
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 (let ((message-log-max nil))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1206 (apply 'message args)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1207
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1208 (defvar bs--cycle-list nil
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1209 "Current buffer list used for cycling.")
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1211 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 (defun bs-cycle-next ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 "Select next buffer defined by buffer cycling.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 The buffers taking part in buffer cycling are defined
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215 by buffer configuration `bs-cycle-configuration-name'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 (let ((bs--buffer-coming-from (current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1218 (bs-dont-show-regexp bs-dont-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1219 (bs-must-show-regexp bs-must-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1220 (bs-dont-show-function bs-dont-show-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1221 (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
1222 (bs--show-all nil))
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1223 (bs-set-configuration (or bs-cycle-configuration-name bs-default-configuration))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1224 (let ((bs-buffer-sort-function nil)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1225 (bs--current-sort-function nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226 (let* ((tupel (bs-next-buffer (if (or (eq last-command
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1227 'bs-cycle-next)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1228 (eq last-command
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1229 'bs-cycle-previous))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1230 bs--cycle-list)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1231 (next (car tupel))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1232 (cycle-list (cdr tupel)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1233 (setq bs--cycle-list (append (cdr cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1234 (list (car cycle-list))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1235 (bury-buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1236 (switch-to-buffer next)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1237 (bs-message-without-log "Next buffers: %s"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1238 (or (cdr bs--cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1239 "this buffer"))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1243 (defun bs-cycle-previous ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 "Select previous buffer defined by buffer cycling.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1245 The buffers taking part in buffer cycling are defined
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246 by buffer configuration `bs-cycle-configuration-name'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 (let ((bs--buffer-coming-from (current-buffer))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1249 (bs-dont-show-regexp bs-dont-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1250 (bs-must-show-regexp bs-must-show-regexp)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1251 (bs-dont-show-function bs-dont-show-function)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1252 (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
1253 (bs--show-all nil))
11256092b610 (bs-cycle-next, bs-cycle-previous): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 36415
diff changeset
1254 (bs-set-configuration (or bs-cycle-configuration-name bs-default-configuration))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1255 (let ((bs-buffer-sort-function nil)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1256 (bs--current-sort-function nil))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1257 (let* ((tupel (bs-previous-buffer (if (or (eq last-command
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1258 'bs-cycle-next)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1259 (eq last-command
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1260 'bs-cycle-previous))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1261 bs--cycle-list)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1262 (prev-buffer (car tupel))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1263 (cycle-list (cdr tupel)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1264 (setq bs--cycle-list (append (last cycle-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1265 (reverse (cdr (reverse cycle-list)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1266 (switch-to-buffer prev-buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1267 (bs-message-without-log "Previous buffers: %s"
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1268 (or (reverse (cdr bs--cycle-list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1269 "this buffer"))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1271 (defun bs--get-value (fun &optional args)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272 "Apply function FUN with arguments ARGS.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1273 Return result of evaluation. Will return FUN if FUN is a number
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1274 or a string."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1275 (cond ((numberp fun)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1276 fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1277 ((stringp fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1278 fun)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1279 (t (apply fun args))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1280
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1281 (defun bs--get-marked-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1282 "Return a string which describes whether current buffer is marked.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1283 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1284 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1285 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
1286 `bs-string-marked', `bs-string-show-normally', `bs-string-show-never', or
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1287 `bs-string-show-always'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1288 (cond ;; current buffer is the buffer we started buffer selection.
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1289 ((eq (current-buffer) start-buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1290 (if (memq (current-buffer) bs--marked-buffers)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1291 bs-string-current-marked ; buffer is marked
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1292 bs-string-current))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1293 ;; current buffer is marked
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1294 ((memq (current-buffer) bs--marked-buffers)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1295 bs-string-marked)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1296 ;; current buffer hasn't a special mark.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1297 ((null bs-buffer-show-mark)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1298 bs-string-show-normally)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1299 ;; current buffer has a mark not to show itself.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1300 ((eq bs-buffer-show-mark 'never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1301 bs-string-show-never)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1302 ;; otherwise current buffer is marked to show always.
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1303 (t
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1304 bs-string-show-always)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1305
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306 (defun bs--get-modified-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 "Return a string which describes whether current buffer is modified.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1310 (if (buffer-modified-p) "*" " "))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1312 (defun bs--get-readonly-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 "Return a string which describes whether current buffer is read only.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1314 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 (if buffer-read-only "%" " "))
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-size-string (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1319 "Return a string which describes the size of current buffer.
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 (int-to-string (buffer-size)))
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-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1325 "Return name of current buffer for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1326 The name of current buffer gets additional text properties
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 for mouse highlighting.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330 (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
1331 (add-text-properties
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1332 0 (length name)
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1333 '(mouse-face highlight
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1334 help-echo
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1335 "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
1336 name)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1337 (if (< (length name) bs--name-entry-length)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1338 (concat name
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1339 (make-string (- bs--name-entry-length (length name)) ? ))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340 name)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342 (defun bs--get-mode-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 "Return the name of mode of current buffer for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1346 mode-name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1347
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 (defun bs--get-file-name (start-buffer all-buffers)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1349 "Return string for column 'File' in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 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
1351 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
1352 default directory.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 START-BUFFER is the buffer where we started buffer selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 ALL-BUFFERS is the list of buffer appearing in Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 (let ((string (copy-sequence (if (member major-mode
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1356 '(shell-mode dired-mode))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1357 default-directory
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1358 (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
1359 (add-text-properties
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1360 0 (length string)
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1361 '(mouse-face highlight
7b6797bc61ef (bs--get-name, bs--get-file-name): Add help-echo to
Eli Zaretskii <eliz@gnu.org>
parents: 36925
diff changeset
1362 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
1363 string)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 string))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 (defun bs--insert-one-entry (buffer)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367 "Generate one entry for buffer BUFFER in Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368 It goes over all columns described in `bs-attributes-list'
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 and evaluates corresponding string. Inserts string in current buffer;
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370 normally *buffer-selection*."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 (let ((string "")
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1372 (columns bs-attributes-list)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1373 (to-much 0)
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 (apply-args (append (list bs--buffer-coming-from bs-current-list))))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 (save-excursion
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 (while columns
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1377 (set-buffer buffer)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1378 (let ((min (bs--get-value (nth 1 (car columns))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1379 ;;(max (bs--get-value (nth 2 (car columns)))) refered no more
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1380 (align (nth 3 (car columns)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1381 (fun (nth 4 (car columns)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1382 (val nil)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1383 new-string)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1384 (setq val (bs--get-value fun apply-args))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1385 (setq new-string (bs--format-aux val align (- min to-much)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1386 (setq string (concat string new-string))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1387 (if (> (length new-string) min)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1388 (setq to-much (- (length new-string) min)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1389 ) ; let
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1390 (setq columns (cdr columns))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 (insert string)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1392 string))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394 (defun bs--format-aux (string align len)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395 "Generate a string with STRING with alignment ALIGN and length LEN.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1396 ALIGN is one of the symbols `left', `middle', or `right'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 (let ((length (length string)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398 (if (>= length len)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1399 string
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 (if (eq 'right align)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1401 (concat (make-string (- len length) ? ) string)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1402 (concat string (make-string (- len length) ? ))))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404 (defun bs--show-header ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405 "Insert header for Buffer Selection Menu in current buffer."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406 (mapcar '(lambda (string)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1407 (insert string "\n"))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1408 (bs--create-header)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410 (defun bs--get-name-length ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411 "Return value of `bs--name-entry-length'."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1412 bs--name-entry-length)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1414 (defun bs--create-header ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1415 "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
1416 (list (mapconcat (lambda (column)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1417 (bs--format-aux (bs--get-value (car column))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1418 (nth 3 column) ; align
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1419 (bs--get-value (nth 1 column))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1420 bs-attributes-list
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1421 "")
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1422 (mapconcat (lambda (column)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1423 (let ((length (length (bs--get-value (car column)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1424 (bs--format-aux (make-string length ?-)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1425 (nth 3 column) ; align
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1426 (bs--get-value (nth 1 column)))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1427 bs-attributes-list
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1428 "")))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430 (defun bs--show-with-configuration (name &optional arg)
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1431 "Display buffer list of configuration with name NAME.
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1432 Set configuration NAME and determine window for Buffer Selection Menu.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1433 Unless current buffer is buffer *buffer-selection* we have to save
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1434 the buffer we started Buffer Selection Menu and the current window
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1435 configuration to restore buffer and window configuration after a
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1436 selection. If there is already a window displaying *buffer-selection*
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1437 select this window for Buffer Selection Menu. Otherwise open a new
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1438 window.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1439 The optional argument ARG is the prefix argument when calling a function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440 for buffer selection."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1441 (bs-set-configuration name)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 (let ((bs--show-all (or bs--show-all arg)))
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1443 (unless (string= "*buffer-selection*" (buffer-name))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444 ;; Only when not in buffer *buffer-selection*
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445 ;; we have to set the buffer we started the command
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 (progn
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1447 (setq bs--buffer-coming-from (current-buffer))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1448 (setq bs--window-config-coming-from (current-window-configuration))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1449 (let ((liste (bs-buffer-list))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1450 (active-window (bs--window-for-buffer "*buffer-selection*")))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1451 (if active-window
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1452 (select-window active-window)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1453 (if (> (window-height (selected-window)) 7)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1454 (progn
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1455 (split-window-vertically)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1456 (other-window 1))))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1457 (bs-show-in-buffer liste)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1458 (bs-message-without-log "%s" (bs--current-config-message)))))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1459
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 (defun bs--configuration-name-for-prefix-arg (prefix-arg)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461 "Convert prefix argument PREFIX-ARG to a name of a buffer configuration.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462 If PREFIX-ARG is nil return `bs-default-configuration'.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 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
1464 Otherwise return `bs-alternative-configuration'."
34048
9e0243647685 Fix typos and spelling errors.
Gerd Moellmann <gerd@gnu.org>
parents: 34043
diff changeset
1465 (cond ;; usually activation
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1466 ((null prefix-arg)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1467 bs-default-configuration)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1468 ;; call with integer as prefix argument
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1469 ((integerp prefix-arg)
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1470 (if (and (< 0 prefix-arg) (<= prefix-arg (length bs-configurations)))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1471 (car (nth (1- prefix-arg) bs-configurations))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1472 bs-default-configuration))
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1473 ;; call by prefix argument C-u
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1474 (t bs-alternative-configuration)))
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1475
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1476 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1477 ;; Main function bs-customize and bs-show
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1478 ;; ----------------------------------------------------------------------
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1479
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1480 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1481 (defun bs-customize ()
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1482 "Customization of group bs for Buffer Selection Menu."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1483 (interactive)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1484 (customize-group "bs"))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1485
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1486 ;;;###autoload
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1487 (defun bs-show (arg)
30799
eef673503486 Fix indentation.
Dave Love <fx@gnu.org>
parents: 30615
diff changeset
1488 "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
1489 \\<bs-mode-map>
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1490 There are many key commands similar to `Buffer-menu-mode' for
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1491 manipulating buffer list and buffers itself.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1492 User can move with [up] or [down], select a buffer
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1493 by \\[bs-select] or [SPC]\n
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1494 Type \\[bs-kill] to leave Buffer Selection Menu without a selection.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1495 Type \\[bs-help] after invocation to get help on commands available.
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1496 With prefix argument ARG show a different buffer list. Function
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1497 `bs--configuration-name-for-prefix-arg' determine accordingly
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1498 name of buffer configuration."
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1499 (interactive "P")
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1500 (setq bs--marked-buffers nil)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1501 (bs--show-with-configuration (bs--configuration-name-for-prefix-arg arg)))
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1502
39568
e67950065cf9 Change ;;; to ;; for outline-minor-mode.
Gerd Moellmann <gerd@gnu.org>
parents: 38095
diff changeset
1503 ;; Now provide feature bs
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1504 (provide 'bs)
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1505
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52243
diff changeset
1506 ;;; arch-tag: c0d9ab34-bf06-4368-ae9d-af88878e6802
27016
62cd5f1749cc *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1507 ;;; bs.el ends here