annotate lisp/msb.el @ 72550:666bd542be19

(get_window_cursor_type): Replace BOX cursor on images with a hollow box cursor if image is larger than 32x32 (or the default frame font if that is bigger). Replace any other cursor on images with hollow box cursor, as redisplay doesn't support bar and hbar cursors on images.
author Kim F. Storm <storm@cua.dk>
date Sun, 27 Aug 2006 22:23:07 +0000
parents 0759482f5cba
children e3694f1cb928 138ce2701550
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 36229
diff changeset
1 ;;; msb.el --- customizable buffer-selection with multiple menus
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002,
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 65367
diff changeset
4 ;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
5
44988
964839c0844c Update email address.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
6 ;; Author: Lars Lindberg <lars.lindberg@home.se>
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
7 ;; Maintainer: FSF
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Created: 8 Oct 1993
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
9 ;; Lindberg's last update version: 3.34
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
10 ;; Keywords: mouse buffer menu
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
11
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
12 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
13
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
14 ;; GNU Emacs is free software; you can redistribute it and/or modify
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
16 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
17 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
18
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
23
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63850
diff changeset
26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63850
diff changeset
27 ;; Boston, MA 02110-1301, USA.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13998
diff changeset
30
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; Purpose of this package:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; 1. Offer a function for letting the user choose buffer,
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; not necessarily for switching to it.
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
34 ;; 2. Make a better mouse-buffer-menu. This is done as a global
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
35 ;; minor mode, msb-mode.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; Customization:
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
38 ;; Look at the variable `msb-menu-cond' for deciding what menus you
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
39 ;; want. It's not that hard to customize, despite my not-so-good
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
40 ;; doc-string. Feel free to send me a better doc-string.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; There are some constants for you to try here:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; msb--few-menus
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; msb--very-many-menus (default)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49320
diff changeset
44 ;;
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
45 ;; Look at the variable `msb-item-handling-function' for customization
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
46 ;; of the appearance of every menu item. Try for instance setting
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
47 ;; it to `msb-alon-item-handler'.
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49320
diff changeset
48 ;;
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
49 ;; Look at the variable `msb-item-sort-function' for customization
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
50 ;; of sorting the menus. Set it to t for instance, which means no
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; sorting - you will get latest used buffer first.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
53 ;; Also check out the variable `msb-display-invisible-buffers-p'.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; Known bugs:
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
56 ;; - Files-by-directory
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
57 ;; + No possibility to show client/changed buffers separately.
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
58 ;; + All file buffers only appear in a file sub-menu, they will
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
59 ;; for instance not appear in the Mail sub-menu.
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
60
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; Future enhancements:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;;; Thanks goes to
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
64 ;; Mark Brader <msb@sq.com>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
65 ;; Jim Berry <m1jhb00@FRB.GOV>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
66 ;; Hans Chalupsky <hans@cs.Buffalo.EDU>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
67 ;; Larry Rosenberg <ljr@ictv.com>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
68 ;; Will Henney <will@astroscu.unam.mx>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
69 ;; Jari Aalto <jaalto@tre.tele.nokia.fi>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
70 ;; Michael Kifer <kifer@sbkifer.cs.sunysb.edu>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
71 ;; Gael Marziou <gael@gnlab030.grenoble.hp.com>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
72 ;; Dave Gillespie <daveg@thymus.synaptics.com>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
73 ;; Alon Albert <alon@milcse.rtsg.mot.com>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
74 ;; Kevin Broadey, <KevinB@bartley.demon.co.uk>
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
75 ;; Ake Stenhof <ake@cadpoint.se>
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 25123
diff changeset
76 ;; Richard Stallman <rms@gnu.org>
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
77 ;; Steve Fisk <fisk@medved.bowdoin.edu>
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
25095
514b71b0b8f8 Require cl only when compiling.
Dave Love <fx@gnu.org>
parents: 25050
diff changeset
79 ;; This version turned into a global minor mode and subsequently
514b71b0b8f8 Require cl only when compiling.
Dave Love <fx@gnu.org>
parents: 25050
diff changeset
80 ;; hacked on by Dave Love.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;; Code:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82
25095
514b71b0b8f8 Require cl only when compiling.
Dave Love <fx@gnu.org>
parents: 25050
diff changeset
83 (eval-when-compile (require 'cl))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;;;
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
86 ;;; Some example constants to be used for `msb-menu-cond'. See that
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
87 ;;; variable for more information. Please note that if the condition
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
88 ;;; returns `multi', then the buffer can appear in several menus.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 (defconst msb--few-menus
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 '(((and (boundp 'server-buffer-clients)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 server-buffer-clients
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 3030
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 "Clients (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ((and msb-display-invisible-buffers-p
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 (msb-invisible-buffer-p)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 3090
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 "Invisible buffers (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ((eq major-mode 'dired-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 2010
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 "Dired (%d)"
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 msb-dired-item-handler
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 msb-sort-by-directory)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ((eq major-mode 'Man-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 4090
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 "Manuals (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ((eq major-mode 'w3-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 4020
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 "WWW (%d)")
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
112 ((or (memq major-mode
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
113 '(rmail-mode rmail-edit-mode vm-summary-mode vm-mode mail-mode))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
114 (memq major-mode '(mh-letter-mode mh-show-mode mh-folder-mode))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
115 (memq major-mode
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
116 '(gnus-summary-mode message-mode gnus-group-mode
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
117 gnus-article-mode score-mode gnus-browse-killed-mode)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 4010
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 "Mail (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ((not buffer-file-name)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 4099
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 "Buffers (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ('no-multi
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 1099
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 "Files (%d)")))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (defconst msb--very-many-menus
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 '(((and (boundp 'server-buffer-clients)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 server-buffer-clients
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 1010
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 "Clients (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ((and (boundp 'vc-mode) vc-mode 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 1020
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "Version Control (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ((and buffer-file-name
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 (buffer-modified-p)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 1030
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 "Changed files (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ((and (get-buffer-process (current-buffer))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 1040
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 "Processes (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ((and msb-display-invisible-buffers-p
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 (msb-invisible-buffer-p)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 1090
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
149 "Invisible buffers (%d)")
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ((eq major-mode 'dired-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 2010
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 "Dired (%d)"
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;; Note this different menu-handler
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 msb-dired-item-handler
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;; Also note this item-sorter
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 msb-sort-by-directory)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ((eq major-mode 'Man-mode)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
158 5030
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 "Manuals (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ((eq major-mode 'w3-mode)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
161 5020
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 "WWW (%d)")
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
163 ((or (memq major-mode
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
164 '(rmail-mode rmail-edit-mode vm-summary-mode vm-mode mail-mode))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
165 (memq major-mode '(mh-letter-mode mh-show-mode mh-folder-mode))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
166 (memq major-mode '(gnus-summary-mode message-mode gnus-group-mode
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
167 gnus-article-mode score-mode
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 gnus-browse-killed-mode)))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
169 5010
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 "Mail (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; Catchup for all non-file buffers
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ((and (not buffer-file-name)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 'no-multi)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
174 5099
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 "Other non-file buffers (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 ((and (string-match "/\\.[^/]*$" buffer-file-name)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 3090
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 "Hidden Files (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ((memq major-mode '(c-mode c++-mode))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 3010
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "C/C++ Files (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 ((eq major-mode 'emacs-lisp-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 3020
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 "Elisp Files (%d)")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ((eq major-mode 'latex-mode)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 3030
65367
476036a1e6bf (msb--very-many-menus): Fix typo.
Reiner Steib <Reiner.Steib@gmx.de>
parents: 64762
diff changeset
188 "LaTeX Files (%d)")
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ('no-multi
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 3099
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 "Other files (%d)")))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; msb--many-menus is obsolete
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (defvar msb--many-menus msb--very-many-menus)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;;; Customizable variables
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
200 (defgroup msb nil
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
201 "Customizable buffer-selection with multiple menus."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
202 :prefix "msb-"
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
203 :group 'mouse)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
205 (defun msb-custom-set (symbol value)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
206 "Set the value of custom variables for msb."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
207 (set symbol value)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
208 (if (and (featurep 'msb) msb-mode)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
209 ;; wait until package has been loaded before bothering to update
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
210 ;; the buffer lists.
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
211 (msb-menu-bar-update-buffers t)))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
212
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
213 (defcustom msb-menu-cond msb--very-many-menus
13998
2f2d3995b57f (msb-max-file-menu-items, msb-menu-cond): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13372
diff changeset
214 "*List of criteria for splitting the mouse buffer menu.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 The elements in the list should be of this type:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLING-FN ITEM-SORT-FN).
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 When making the split, the buffers are tested one by one against the
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
219 CONDITION, just like a Lisp cond: When hitting a true condition, the
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
220 other criteria are *not* tested and the buffer name will appear in the
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
221 menu with the menu-title corresponding to the true condition.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
223 If the condition returns the symbol `multi', then the buffer will be
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 added to this menu *and* tested for other menus too. If it returns
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
225 `no-multi', then the buffer will only be added if it hasn't been added
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 to any other menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 During this test, the buffer in question is the current buffer, and
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 the test is surrounded by calls to `save-excursion' and
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
230 `save-match-data'.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
232 The categories are sorted by MENU-SORT-KEY. Smaller keys are on top.
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
233 nil means don't display this menu.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
235 MENU-TITLE is really a format. If you add %d in it, the %d is
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
236 replaced with the number of items in that menu.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
238 ITEM-HANDLING-FN, is optional. If it is supplied and is a function,
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
239 than it is used for displaying the items in that particular buffer
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
240 menu, otherwise the function pointed out by
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
241 `msb-item-handling-function' is used.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 ITEM-SORT-FN, is also optional.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 If it is not supplied, the function pointed out by
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
245 `msb-item-sort-function' is used.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 If it is nil, then no sort takes place and the buffers are presented
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 in least-recently-used order.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 If it is t, then no sort takes place and the buffers are presented in
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 most-recently-used order.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 If it is supplied and non-nil and not t than it is used for sorting
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 the items in that particular buffer menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
253 Note1: There should always be a `catch-all' as last element, in this
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
254 list. That is an element like (t TITLE ITEM-HANDLING-FUNCTION).
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 Note2: A buffer menu appears only if it has at least one buffer in it.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 Note3: If you have a CONDITION that can't be evaluated you will get an
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
257 error every time you do \\[msb]."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
258 :type `(choice (const :tag "long" :value ,msb--very-many-menus)
28977
7322c22e17b0 (msb-menu-cond): Add choice `user'.
Gerd Moellmann <gerd@gnu.org>
parents: 28300
diff changeset
259 (const :tag "short" :value ,msb--few-menus)
7322c22e17b0 (msb-menu-cond): Add choice `user'.
Gerd Moellmann <gerd@gnu.org>
parents: 28300
diff changeset
260 (sexp :tag "user"))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
261 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
262 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
263
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
264 (defcustom msb-modes-key 4000
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
265 "The sort key for files sorted by mode."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
266 :type 'integer
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
267 :set 'msb-custom-set
21670
808ecc2eaa84 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20901
diff changeset
268 :group 'msb
808ecc2eaa84 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20901
diff changeset
269 :version "20.3")
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
270
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
271 (defcustom msb-separator-diff 100
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
272 "*Non-nil means use separators.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
273 The separators will appear between all menus that have a sorting key
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
274 that differs by this value or more."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
275 :type '(choice integer (const nil))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
276 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
277 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
278
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
279 (defvar msb-files-by-directory-sort-key 0
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
280 "*The sort key for files sorted by directory.")
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
281
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
282 (defcustom msb-max-menu-items 15
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
283 "*The maximum number of items in a menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
284 If this variable is set to 15 for instance, then the submenu will be
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 38412
diff changeset
285 split up in minor parts, 15 items each. nil means no limit."
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
286 :type '(choice integer (const nil))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
287 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
288 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
289
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
290 (defcustom msb-max-file-menu-items 10
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
291 "*The maximum number of items from different directories.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
292
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
293 When the menu is of type `file by directory', this is the maximum
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
294 number of buffers that are clumped together from different
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
295 directories.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
296
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
297 Set this to 1 if you want one menu per directory instead of clumping
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
298 them together.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
299
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
300 If the value is not a number, then the value 10 is used."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
301 :type 'integer
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
302 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
303 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
304
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
305 (defcustom msb-most-recently-used-sort-key -1010
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
306 "*Where should the menu with the most recently used buffers be placed?"
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
307 :type 'integer
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
308 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
309 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
310
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
311 (defcustom msb-display-most-recently-used 15
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
312 "*How many buffers should be in the most-recently-used menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
313 No buffers at all if less than 1 or nil (or any non-number)."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
314 :type 'integer
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
315 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
316 :group 'msb)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
318 (defcustom msb-most-recently-used-title "Most recently used (%d)"
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
319 "*The title for the most-recently-used menu."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
320 :type 'string
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
321 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
322 :group 'msb)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49320
diff changeset
323
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
324 (defvar msb-horizontal-shift-function '(lambda () 0)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
325 "*Function that specifies how many pixels to shift the top menu leftwards.")
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
326
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
327 (defcustom msb-display-invisible-buffers-p nil
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
328 "*Show invisible buffers or not.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
329 Non-nil means that the buffer menu should include buffers that have
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
330 names that starts with a space character."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
331 :type 'boolean
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
332 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
333 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
334
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
335 (defvar msb-item-handling-function 'msb-item-handler
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
336 "*The appearance of a buffer menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
337
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
338 The default function to call for handling the appearance of a menu
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
339 item. It should take to arguments, BUFFER and MAX-BUFFER-NAME-LENGTH,
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
340 where the latter is the max length of all buffer names.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
341
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
342 The function should return the string to use in the menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
343
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
344 When the function is called, BUFFER is the current buffer. This
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
345 function is called for items in the variable `msb-menu-cond' that have
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
346 nil as ITEM-HANDLING-FUNCTION. See `msb-menu-cond' for more
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
347 information.")
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
348
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
349 (defcustom msb-item-sort-function 'msb-sort-by-name
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
350 "*The order of items in a buffer menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
351
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
352 The default function to call for handling the order of items in a menu
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
353 item. This function is called like a sort function. The items look
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
354 like (ITEM-NAME . BUFFER).
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
355
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
356 ITEM-NAME is the name of the item that will appear in the menu.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
357 BUFFER is the buffer, this is not necessarily the current buffer.
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
358
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
359 Set this to nil or t if you don't want any sorting (faster)."
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
360 :type '(choice (const msb-sort-by-name)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
361 (const :tag "Newest first" t)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
362 (const :tag "Oldest first" nil))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
363 :set 'msb-custom-set
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
364 :group 'msb)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49320
diff changeset
365
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
366 (defcustom msb-files-by-directory nil
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
367 "*Non-nil means that files should be sorted by directory.
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
368 This is instead of the groups in `msb-menu-cond'."
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
369 :type 'boolean
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
370 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
371 :group 'msb)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
372
33192
76b47f37d61c (msb-mode): Drop unneeded positional args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31812
diff changeset
373 (defcustom msb-after-load-hook nil
76b47f37d61c (msb-mode): Drop unneeded positional args.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 31812
diff changeset
374 "Hook run after the msb package has been loaded."
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
375 :type 'hook
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
376 :set 'msb-custom-set
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
377 :group 'msb)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 ;;; Internal variables
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 ;; The last calculated menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 (defvar msb--last-buffer-menu nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 ;; If this is non-nil, then it is a string that describes the error.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (defvar msb--error nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 ;;;
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
390 ;;; Some example function to be used for `msb-item-handling-function'.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 (defun msb-item-handler (buffer &optional maxbuf)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 "Create one string item, concerning BUFFER, for the buffer menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 The item looks like:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 *% <buffer-name>
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
396 The `*' appears only if the buffer is marked as modified.
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
397 The `%' appears only if the buffer is read-only.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 Optional second argument MAXBUF is completely ignored."
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (let ((name (buffer-name))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (modified (if (buffer-modified-p) "*" " "))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (read-only (if buffer-read-only "%" " ")))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (format "%s%s %s" modified read-only name)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (eval-when-compile (require 'dired))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
407 ;; `dired' can be called with a list of the form (directory file1 file2 ...)
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
408 ;; which causes `dired-directory' to be in the same form.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (defun msb--dired-directory ()
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (cond ((stringp dired-directory)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (abbreviate-file-name (expand-file-name dired-directory)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 ((consp dired-directory)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (abbreviate-file-name (expand-file-name (car dired-directory))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (t
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
415 (error "Unknown type of `dired-directory' in buffer %s"
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (buffer-name)))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (defun msb-dired-item-handler (buffer &optional maxbuf)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 "Create one string item, concerning a dired BUFFER, for the buffer menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 The item looks like:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 *% <buffer-name>
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
422 The `*' appears only if the buffer is marked as modified.
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
423 The `%' appears only if the buffer is read-only.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 Optional second argument MAXBUF is completely ignored."
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (let ((name (msb--dired-directory))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (modified (if (buffer-modified-p) "*" " "))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (read-only (if buffer-read-only "%" " ")))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (format "%s%s %s" modified read-only name)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (defun msb-alon-item-handler (buffer maxbuf)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 "Create one string item for the buffer menu.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 The item looks like:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 <buffer-name> *%# <file-name>
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
434 The `*' appears only if the buffer is marked as modified.
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
435 The `%' appears only if the buffer is read-only.
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
436 The `#' appears only version control file (SCCS/RCS)."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 (format (format "%%%ds %%s%%s%%s %%s" maxbuf)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (buffer-name buffer)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (if (buffer-modified-p) "*" " ")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (if buffer-read-only "%" " ")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (if (and (boundp 'vc-mode) vc-mode) "#" " ")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (or buffer-file-name "")))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 ;;;
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
445 ;;; Some example function to be used for `msb-item-sort-function'.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (defun msb-sort-by-name (item1 item2)
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
448 "Sort the items ITEM1 and ITEM2 by their `buffer-name'.
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
449 An item looks like (NAME . BUFFER)."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (string-lessp (buffer-name (cdr item1))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (buffer-name (cdr item2))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (defun msb-sort-by-directory (item1 item2)
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
455 "Sort the items ITEM1 and ITEM2 by directory name. Made for dired.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 An item look like (NAME . BUFFER)."
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
457 (string-lessp (save-excursion (set-buffer (cdr item1))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
458 (msb--dired-directory))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
459 (save-excursion (set-buffer (cdr item2))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
460 (msb--dired-directory))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 ;;; msb
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ;;; This function can be used instead of (mouse-buffer-menu EVENT)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 ;;; function in "mouse.el".
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
467 ;;;
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (defun msb (event)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 "Pop up several menus of buffers for selection with the mouse.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 This command switches buffers in the window that you clicked on, and
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 selects that window.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
473 See the function `mouse-select-buffer' and the variable
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
474 `msb-menu-cond' for more information about how the menus are split."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (interactive "e")
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
476 (let ((old-window (selected-window))
71403
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
477 (window (posn-window (event-start event)))
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
478 early-release)
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
479 (unless (framep window) (select-window window))
71403
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
480 ;; This `sit-for' magically makes the menu stay up if the mouse
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
481 ;; button is released within 0.1 second.
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
482 (setq early-release (not (sit-for 0.1 t)))
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
483 (let ((buffer (mouse-select-buffer event)))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
484 (if buffer
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
485 (switch-to-buffer buffer)
71403
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
486 (select-window old-window)))
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
487 ;; If the above `sit-for' was interrupted by a mouse-up, avoid
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
488 ;; generating a drag event.
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
489 (if (and early-release (memq 'down (event-modifiers last-input-event)))
0759482f5cba * msb.el (msb): Move `sit-for' hack here to handle both
Chong Yidong <cyd@stupidchicken.com>
parents: 71024
diff changeset
490 (discard-input)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 ;;; Some supportive functions
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 ;;;
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (defun msb-invisible-buffer-p (&optional buffer)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 "Return t if optional BUFFER is an \"invisible\" buffer.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 If the argument is left out or nil, then the current buffer is considered."
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (and (> (length (buffer-name buffer)) 0)
63850
ebf4306a600f (msb-invisible-buffer-p): Change space constants followed by a sexp to "?\s ".
Juanma Barranquero <lekktu@gmail.com>
parents: 61274
diff changeset
500 (eq ?\s (aref (buffer-name buffer) 0))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501
20505
10abc15f305a Fix copyright notice.
Richard M. Stallman <rms@gnu.org>
parents: 20504
diff changeset
502 (defun msb--strip-dir (dir)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
503 "Strip one hierarchy level from the end of DIR."
20758
f5a113b108ff (msb--strip-dir): Use Emacs filename primitives, not regexps.
Richard M. Stallman <rms@gnu.org>
parents: 20506
diff changeset
504 (file-name-directory (directory-file-name dir)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 ;; Create an alist with all buffers from LIST that lies under the same
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
507 ;; directory will be in the same item as the directory name.
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
508 ;; ((DIR1 . (BUFFER-1 BUFFER-2 ...)) (DIR2 . (BUFFER-K BUFFER-K+1...)) ...)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (defun msb--init-file-alist (list)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (let ((buffer-alist
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
511 ;; Make alist that looks like
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
512 ;; ((DIR-1 BUFFER-1) (DIR-2 BUFFER-2) ...)
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
513 ;; sorted on DIR-x
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
514 (sort
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
515 (apply #'nconc
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
516 (mapcar
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
517 (lambda (buffer)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
518 (let ((file-name (expand-file-name
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
519 (buffer-file-name buffer))))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
520 (when file-name
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
521 (list (cons (msb--strip-dir file-name) buffer)))))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
522 list))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
523 (lambda (item1 item2)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
524 (string< (car item1) (car item2))))))
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
525 ;; Now clump buffers together that have the same directory name
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 ;; Make alist that looks like
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
527 ;; ((DIR1 . (BUFFER-1 BUFFER-2 ...)) (DIR2 . (BUFFER-K)) ...)
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
528 (let ((dir nil)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
529 (buffers nil))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
530 (nconc
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
531 (apply
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
532 #'nconc
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
533 (mapcar (lambda (item)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
534 (cond
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
535 ((equal dir (car item))
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
536 ;; The same dir as earlier:
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
537 ;; Add to current list of buffers.
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
538 (push (cdr item) buffers)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
539 ;; This item should not be added to list
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
540 nil)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
541 (t
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
542 ;; New dir
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
543 (let ((result (and dir (cons dir buffers))))
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
544 (setq dir (car item))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
545 (setq buffers (list (cdr item)))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
546 ;; Add the last result the list.
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
547 (and result (list result))))))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
548 buffer-alist))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
549 ;; Add the last result to the list
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
550 (list (cons dir buffers))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
552 (defun msb--format-title (top-found-p dir number-of-items)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
553 "Format a suitable title for the menu item."
25095
514b71b0b8f8 Require cl only when compiling.
Dave Love <fx@gnu.org>
parents: 25050
diff changeset
554 (format (if top-found-p "%s... (%d)" "%s (%d)")
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
555 (abbreviate-file-name dir) number-of-items))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
556
20884
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
557 ;; Variables for debugging.
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
558 (defvar msb--choose-file-menu-list)
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
559 (defvar msb--choose-file-menu-arg-list)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
560
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (defun msb--choose-file-menu (list)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
562 "Choose file-menu with respect to directory for every buffer in LIST."
20884
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
563 (setq msb--choose-file-menu-arg-list list)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (let ((buffer-alist (msb--init-file-alist list))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (final-list nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (max-clumped-together (if (numberp msb-max-file-menu-items)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 msb-max-file-menu-items
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 10))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (top-found-p nil)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
570 (last-dir nil)
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
571 first rest dir buffers old-dir)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
572 ;; Prepare for looping over all items in buffer-alist
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
573 (setq first (car buffer-alist)
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
574 rest (cdr buffer-alist)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
575 dir (car first)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
576 buffers (cdr first))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
577 (setq msb--choose-file-menu-list (copy-sequence rest))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
578 ;; This big loop tries to clump buffers together that have a
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
579 ;; similar name. Remember that buffer-alist is sorted based on the
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
580 ;; directory name of the buffers' visited files.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (while rest
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (let ((found-p nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (tmp-rest rest)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
584 result
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
585 new-dir item)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (setq item (car tmp-rest))
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
587 ;; Clump together the "rest"-buffers that have a dir that is
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
588 ;; a subdir of the current one.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (while (and tmp-rest
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (<= (length buffers) max-clumped-together)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
591 (>= (length (car item)) (length dir))
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
592 ;; `completion-ignore-case' seems to default to t
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
593 ;; on the systems with case-insensitive file names.
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
594 (eq t (compare-strings dir 0 nil
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
595 (car item) 0 (length dir)
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
596 completion-ignore-case)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (setq found-p t)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
598 (setq buffers (append buffers (cdr item))) ;nconc is faster than append
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
599 (setq tmp-rest (cdr tmp-rest)
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
600 item (car tmp-rest)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (cond
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ((> (length buffers) max-clumped-together)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
603 ;; Oh, we failed. Too many buffers clumped together.
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
604 ;; Just use the original ones for the result.
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
605 (setq last-dir (car first))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
606 (push (cons (msb--format-title top-found-p
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
607 (car first)
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
608 (length (cdr first)))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
609 (cdr first))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
610 final-list)
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
611 (setq top-found-p nil)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (setq first (car rest)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
613 rest (cdr rest)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
614 dir (car first)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 buffers (cdr first)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (t
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
617 ;; The first pass of clumping together worked out, go ahead
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
618 ;; with this result.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (when found-p
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 (setq top-found-p t)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
621 (setq first (cons dir buffers)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 rest tmp-rest))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
623 ;; Now see if we can clump more buffers together if we go up
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
624 ;; one step in the file hierarchy.
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
625 ;; If dir isn't changed by msb--strip-dir, we are looking
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
626 ;; at the machine name component of an ange-ftp filename.
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
627 (setq old-dir dir)
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
628 (setq dir (msb--strip-dir dir)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 buffers (cdr first))
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
630 (if (equal old-dir dir)
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
631 (setq last-dir dir))
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
632 (when (and last-dir
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
633 (or (and (>= (length dir) (length last-dir))
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
634 (eq t (compare-strings
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
635 last-dir 0 nil dir 0
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
636 (length last-dir)
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
637 completion-ignore-case)))
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
638 (and (< (length dir) (length last-dir))
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
639 (eq t (compare-strings
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
640 dir 0 nil last-dir 0 (length dir)
25281
26430a2408d5 (msb--choose-file-menu): Use `completion-ignore-case' in name
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
641 completion-ignore-case)))))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
642 ;; We have reached the same place in the file hierarchy as
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
643 ;; the last result, so we should quit at this point and
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
644 ;; take what we have as result.
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
645 (push (cons (msb--format-title top-found-p
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
646 (car first)
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
647 (length (cdr first)))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
648 (cdr first))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
649 final-list)
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
650 (setq top-found-p nil)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (setq first (car rest)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
652 rest (cdr rest)
49320
d5d5364f76be Use `dir' instead of `path' everywhere.
Kim F. Storm <storm@cua.dk>
parents: 49168
diff changeset
653 dir (car first)
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
654 buffers (cdr first)))))))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
655 ;; Now take care of the last item.
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
656 (when first
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
657 (push (cons (msb--format-title top-found-p
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
658 (car first)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
659 (length (cdr first)))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
660 (cdr first))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
661 final-list))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
662 (setq top-found-p nil)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (nreverse final-list)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (defun msb--create-function-info (menu-cond-elt)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
666 "Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
667 This takes the form:
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
668 \]BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER)
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
669 See `msb-menu-cond' for a description of its elements."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (let* ((list-symbol (make-symbol "-msb-buffer-list"))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 (tmp-ih (and (> (length menu-cond-elt) 3)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (nth 3 menu-cond-elt)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (item-handler (if (and tmp-ih (fboundp tmp-ih))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 tmp-ih
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 msb-item-handling-function))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (tmp-s (if (> (length menu-cond-elt) 4)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (nth 4 menu-cond-elt)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 msb-item-sort-function))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 (sorter (if (or (fboundp tmp-s)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (null tmp-s)
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
681 (eq tmp-s t))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
682 tmp-s
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 msb-item-sort-function)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (when (< (length menu-cond-elt) 3)
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
685 (error "Wrong format of msb-menu-cond"))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (when (and (> (length menu-cond-elt) 3)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (not (fboundp tmp-ih)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (signal 'invalid-function (list tmp-ih)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (when (and (> (length menu-cond-elt) 4)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 tmp-s
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (not (fboundp tmp-s))
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
692 (not (eq tmp-s t)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 (signal 'invalid-function (list tmp-s)))
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
694 (set list-symbol ())
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 (vector list-symbol ;BUFFER-LIST-VARIABLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (nth 0 menu-cond-elt) ;CONDITION
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (nth 1 menu-cond-elt) ;SORT-KEY
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (nth 2 menu-cond-elt) ;MENU-TITLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 item-handler ;ITEM-HANDLER
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 sorter) ;SORTER
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 ))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 ;; This defsubst is only used in `msb--choose-menu' below. It was
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
704 ;; pulled out merely to make the code somewhat clearer. The indentation
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 ;; level was too big.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (defsubst msb--collect (function-info-vector)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (let ((result nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (multi-flag nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 function-info-list)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (setq function-info-list
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (loop for fi
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 across function-info-vector
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 if (and (setq result
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (eval (aref fi 1))) ;Test CONDITION
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (not (and (eq result 'no-multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 multi-flag))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (progn (when (eq result 'multi)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (setq multi-flag t))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
719 t))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 collect fi
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 until (and result
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (not (eq result 'multi)))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (when (and (not function-info-list)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (not result))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (error "No catch-all in msb-menu-cond!"))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 function-info-list))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (defun msb--add-to-menu (buffer function-info max-buffer-name-length)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
729 "Add BUFFER to the menu depicted by FUNCTION-INFO.
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
730 All side-effects. Adds an element of form (BUFFER-TITLE . BUFFER)
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
731 to the buffer-list variable in function-info."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (let ((list-symbol (aref function-info 0))) ;BUFFER-LIST-VARIABLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 ;; Here comes the hairy side-effect!
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (set list-symbol
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (cons (cons (funcall (aref function-info 4) ;ITEM-HANDLER
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 buffer
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 max-buffer-name-length)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 buffer)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (eval list-symbol)))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49320
diff changeset
740
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (defsubst msb--choose-menu (buffer function-info-vector max-buffer-name-length)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
742 "Select the appropriate menu for BUFFER."
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
743 ;; This is all side-effects, folks!
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
744 ;; This should be optimized.
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (unless (and (not msb-display-invisible-buffers-p)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (msb-invisible-buffer-p buffer))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (condition-case nil
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (save-excursion
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (set-buffer buffer)
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
750 ;; Menu found. Add to this menu
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
751 (dolist (info (msb--collect function-info-vector))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
752 (msb--add-to-menu buffer info max-buffer-name-length)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (error (unless msb--error
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 (setq msb--error
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (format
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
756 "In msb-menu-cond, error for buffer `%s'."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (buffer-name buffer)))
14427
ac3101efc47e (msb--choose-menu): Fix error format string.
Karl Heuer <kwzh@gnu.org>
parents: 14292
diff changeset
758 (error "%s" msb--error))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (defun msb--create-sort-item (function-info)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
761 "Return (SORT-KEY TITLE . BUFFER-LIST) or nil if the buffer-list is empty."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (let ((buffer-list (eval (aref function-info 0))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (when buffer-list
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (let ((sorter (aref function-info 5)) ;SORTER
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (sort-key (aref function-info 2))) ;MENU-SORT-KEY
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (when sort-key
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
767 (cons sort-key
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (cons (format (aref function-info 3) ;MENU-TITLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (length buffer-list))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (cond
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 ((null sorter)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 buffer-list)
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
773 ((eq sorter t)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (nreverse buffer-list))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 (t
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 (sort buffer-list sorter))))))))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
778 (defun msb--aggregate-alist (alist same-predicate sort-predicate)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
779 "Return ALIST as a sorted, aggregated alist.
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
780
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
781 In the result all items with the same car element (according to
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
782 SAME-PREDICATE) are aggregated together. The alist is first sorted by
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
783 SORT-PREDICATE.
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
784
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
785 Example:
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
786 \(msb--aggregate-alist
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
787 '((a . a1) (a . a2) (b . b1) (c . c3) (a . a4) (a . a3) (b . b3) (b . b2))
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
788 (function string=)
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
789 (lambda (item1 item2)
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
790 (string< (symbol-name item1) (symbol-name item2))))
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
791 results in
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
792 \((a a1 a2 a4 a3) (b b1 b3 b2) (c c3))"
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
793 (when (not (null alist))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
794 (let (result
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
795 same
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
796 tmp-old-car
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
797 tmp-same
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
798 (first-time-p t)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
799 old-car)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
800 (nconc
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
801 (apply #'nconc
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
802 (mapcar
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
803 (lambda (item)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
804 (cond
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
805 (first-time-p
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
806 (push (cdr item) same)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
807 (setq first-time-p nil)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
808 (setq old-car (car item))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
809 nil)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
810 ((funcall same-predicate (car item) old-car)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
811 (push (cdr item) same)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
812 nil)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
813 (t
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
814 (setq tmp-same same
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
815 tmp-old-car old-car)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
816 (setq same (list (cdr item))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
817 old-car (car item))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
818 (list (cons tmp-old-car (nreverse tmp-same))))))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
819 (sort alist (lambda (item1 item2)
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
820 (funcall sort-predicate (car item1) (car item2))))))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
821 (list (cons old-car (nreverse same)))))))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
822
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
823
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
824 (defun msb--mode-menu-cond ()
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
825 (let ((key msb-modes-key))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
826 (mapcar (lambda (item)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
827 (incf key)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
828 (list `( eq major-mode (quote ,(car item)))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
829 key
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
830 (concat (cdr item) " (%d)")))
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
831 (sort
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
832 (let ((mode-list nil))
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
833 (dolist (buffer (cdr (buffer-list)))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
834 (save-excursion
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
835 (set-buffer buffer)
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
836 (when (and (not (msb-invisible-buffer-p))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
837 (not (assq major-mode mode-list)))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
838 (push (cons major-mode mode-name)
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
839 mode-list))))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
840 mode-list)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
841 (lambda (item1 item2)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
842 (string< (cdr item1) (cdr item2)))))))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
843
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (defun msb--most-recently-used-menu (max-buffer-name-length)
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
845 "Return a list for the most recently used buffers.
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
846 It takes the form ((TITLE . BUFFER-LIST)...)."
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
847 (when (and (numberp msb-display-most-recently-used)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
848 (> msb-display-most-recently-used 0))
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
849 (let* ((buffers (cdr (buffer-list)))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
850 (most-recently-used
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 (loop with n = 0
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
852 for buffer in buffers
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 if (save-excursion
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (set-buffer buffer)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 (and (not (msb-invisible-buffer-p))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (not (eq major-mode 'dired-mode))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 collect (save-excursion
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (set-buffer buffer)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (cons (funcall msb-item-handling-function
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 buffer
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 max-buffer-name-length)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 buffer))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 and do (incf n)
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
864 until (>= n msb-display-most-recently-used))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 (cons (if (stringp msb-most-recently-used-title)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (format msb-most-recently-used-title
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (length most-recently-used))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 (signal 'wrong-type-argument (list msb-most-recently-used-title)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 most-recently-used))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 (defun msb--create-buffer-menu-2 ()
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 (let ((max-buffer-name-length 0)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 file-buffers
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 function-info-vector)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 ;; Calculate the longest buffer name.
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
876 (dolist (buffer (buffer-list))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
877 (when (or msb-display-invisible-buffers-p
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
878 (not (msb-invisible-buffer-p)))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
879 (setq max-buffer-name-length
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
880 (max max-buffer-name-length (length (buffer-name buffer))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 ;; Make a list with elements of type
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 ;; (BUFFER-LIST-VARIABLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 ;; CONDITION
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 ;; MENU-SORT-KEY
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 ;; MENU-TITLE
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 ;; ITEM-HANDLER
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 ;; SORTER)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 ;; Uses "function-global" variables:
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 ;; function-info-vector
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 (setq function-info-vector
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (apply (function vector)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 (mapcar (function msb--create-function-info)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
893 (append msb-menu-cond (msb--mode-menu-cond)))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 ;; Split the buffer-list into several lists; one list for each
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
895 ;; criteria. This is the most critical part with respect to time.
28300
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
896 (dolist (buffer (buffer-list))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
897 (cond ((and msb-files-by-directory
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
898 (buffer-file-name buffer)
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
899 ;; exclude ange-ftp buffers
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
900 ;;(not (string-match "\\/[^/:]+:"
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
901 ;; (buffer-file-name buffer)))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
902 )
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
903 (push buffer file-buffers))
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
904 (t
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
905 (msb--choose-menu buffer
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
906 function-info-vector
4a7a0fc36977 (msb--choose-file-menu): Use `(apply #'list ...)'
Gerd Moellmann <gerd@gnu.org>
parents: 25281
diff changeset
907 max-buffer-name-length))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 (when file-buffers
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (setq file-buffers
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
910 (mapcar (lambda (buffer-list)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
911 (cons msb-files-by-directory-sort-key
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
912 (cons (car buffer-list)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
913 (sort
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
914 (mapcar (function
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
915 (lambda (buffer)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
916 (cons (save-excursion
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
917 (set-buffer buffer)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
918 (funcall msb-item-handling-function
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
919 buffer
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
920 max-buffer-name-length))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
921 buffer)))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
922 (cdr buffer-list))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
923 (function
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
924 (lambda (item1 item2)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
925 (string< (car item1) (car item2))))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (msb--choose-file-menu file-buffers))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 ;; Now make the menu - a list of (TITLE . BUFFER-LIST)
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
928 (let* (menu
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (most-recently-used
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (msb--most-recently-used-menu max-buffer-name-length))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
931 (others (nconc file-buffers
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (loop for elt
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
933 across function-info-vector
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
934 for value = (msb--create-sort-item elt)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
935 if value collect value))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (setq menu
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (mapcar 'cdr ;Remove the SORT-KEY
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 ;; Sort the menus - not the items.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 (msb--add-separators
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (sort
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 ;; Get a list of (SORT-KEY TITLE . BUFFER-LIST)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 ;; Also sorts the items within the menus.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (if (cdr most-recently-used)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (cons
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 ;; Add most recent used buffers
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (cons msb-most-recently-used-sort-key
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 most-recently-used)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 others)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 others)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
950 (lambda (elt1 elt2)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
951 (< (car elt1) (car elt2)))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 ;; Now make it a keymap menu
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (append
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 '(keymap "Select Buffer")
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 (msb--make-keymap-menu menu)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 (when msb-separator-diff
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
957 (list (list 'separator "--")))
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
958 (list (cons 'toggle
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 (cons
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (if msb-files-by-directory
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
961 "*Files by type*"
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
962 "*Files by directory*")
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
963 'msb--toggle-menu-type)))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 (defun msb--create-buffer-menu ()
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 (save-match-data
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 (save-excursion
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 (msb--create-buffer-menu-2))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 (defun msb--toggle-menu-type ()
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
971 "Multi purpose function for selecting a buffer with the mouse."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 (interactive)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (setq msb-files-by-directory (not msb-files-by-directory))
20884
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
974 ;; This gets a warning, but it is correct,
91f9c828fc1a (msb--choose-file-menu): Save some debugging info.
Richard M. Stallman <rms@gnu.org>
parents: 20758
diff changeset
975 ;; because this file redefines menu-bar-update-buffers.
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
976 (msb-menu-bar-update-buffers t))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 (defun mouse-select-buffer (event)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 "Pop up several menus of buffers, for selection with the mouse.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 Returns the selected buffer or nil if no buffer is selected.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
982 The way the buffers are split is conveniently handled with the
10239
52a1e5ef144c Fix quoting conventions and spaces at end of sentence.
Richard M. Stallman <rms@gnu.org>
parents: 10228
diff changeset
983 variable `msb-menu-cond'."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 ;; Popup the menu and return the selected buffer.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (when (or msb--error
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 (not msb--last-buffer-menu)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (not (fboundp 'frame-or-buffer-changed-p))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (frame-or-buffer-changed-p))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (setq msb--error nil)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (setq msb--last-buffer-menu (msb--create-buffer-menu)))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
991 (let ((position event)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
992 choice)
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 (when (and (fboundp 'posn-x-y)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 (fboundp 'posn-window))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (let ((posX (car (posn-x-y (event-start event))))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 (posY (cdr (posn-x-y (event-start event))))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
997 (posWind (posn-window (event-start event))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 ;; adjust position
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (setq posX (- posX (funcall msb-horizontal-shift-function))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 position (list (list posX posY) posWind))))
10823
abd2a268ed88 (mouse-select-buffer): Do sit-for before x-popup-menu.
Richard M. Stallman <rms@gnu.org>
parents: 10821
diff changeset
1001 ;; Popup the menu
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1002 (setq choice (x-popup-menu position msb--last-buffer-menu))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 (cond
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1004 ((eq (car choice) 'toggle)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1005 ;; Bring up the menu again with type toggled.
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1006 (msb--toggle-menu-type)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1007 (mouse-select-buffer event))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1008 ((and (numberp (car choice))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1009 (null (cdr choice)))
71024
947a5b1dd3b6 * msb.el (mouse-select-buffer): Minor fix to make popup menu work
Chong Yidong <cyd@stupidchicken.com>
parents: 70346
diff changeset
1010 (let ((msb--last-buffer-menu (nthcdr 2 (assq (car choice)
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1011 msb--last-buffer-menu))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (mouse-select-buffer event)))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1013 ((while (numberp (car choice))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1014 (setq choice (cdr choice))))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1015 ((and (stringp (car choice))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1016 (null (cdr choice)))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1017 (car choice))
10403
c0e27466fb3f (mouse-select-buffer) Handle an aborted selection.
Richard M. Stallman <rms@gnu.org>
parents: 10371
diff changeset
1018 ((null choice)
c0e27466fb3f (mouse-select-buffer) Handle an aborted selection.
Richard M. Stallman <rms@gnu.org>
parents: 10371
diff changeset
1019 choice)
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1020 (t
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1021 (error "Unknown form for buffer: %s" choice)))))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1022
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 ;; Add separators
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 (defun msb--add-separators (sorted-list)
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1025 (if (or (not msb-separator-diff)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1026 (not (numberp msb-separator-diff)))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1027 sorted-list
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 (let ((last-key nil))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1029 (apply #'nconc
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1030 (mapcar
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1031 (lambda (item)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1032 (cond
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1033 ((and msb-separator-diff
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1034 last-key
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1035 (> (- (car item) last-key)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1036 msb-separator-diff))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1037 (setq last-key (car item))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1038 (list (cons last-key 'separator)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1039 item))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1040 (t
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1041 (setq last-key (car item))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1042 (list item))))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1043 sorted-list)))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1045 (defun msb--split-menus-2 (list mcount result)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1046 (cond
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1047 ((> (length list) msb-max-menu-items)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1048 (let ((count 0)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1049 sub-name
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1050 (tmp-list nil))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1051 (while (< count msb-max-menu-items)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1052 (push (pop list) tmp-list)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1053 (incf count))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1054 (setq tmp-list (nreverse tmp-list))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1055 (setq sub-name (concat (car (car tmp-list)) "..."))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1056 (push (nconc (list mcount sub-name
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1057 'keymap sub-name)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1058 tmp-list)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1059 result))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1060 (msb--split-menus-2 list (1+ mcount) result))
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1061 ((null result)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1062 list)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1063 (t
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1064 (let (sub-name)
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1065 (setq sub-name (concat (car (car list)) "..."))
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1066 (push (nconc (list mcount sub-name 'keymap sub-name)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1067 list)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1068 result))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1069 (nreverse result))))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1070
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1071 (defun msb--split-menus (list)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1072 (if (and (integerp msb-max-menu-items)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1073 (> msb-max-menu-items 0))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1074 (msb--split-menus-2 list 0 nil)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1075 list))
10371
629821e2b42e Better format of files-by-directory menus.
Richard M. Stallman <rms@gnu.org>
parents: 10239
diff changeset
1076
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (defun msb--make-keymap-menu (raw-menu)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 (let ((end (cons '(nil) 'menu-bar-select-buffer))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 (mcount 0))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (mapcar
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1081 (lambda (sub-menu)
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1082 (cond
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1083 ((eq 'separator sub-menu)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1084 (list 'separator "--"))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1085 (t
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1086 (let ((buffers (mapcar (lambda (item)
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1087 (cons (buffer-name (cdr item))
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1088 (cons (car item) end)))
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1089 (cdr sub-menu))))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1090 (nconc (list (incf mcount) (car sub-menu)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1091 'keymap (car sub-menu))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1092 (msb--split-menus buffers))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 raw-menu)))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
1095 (defun msb-menu-bar-update-buffers (&optional arg)
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
1096 "A re-written version of `menu-bar-update-buffers'."
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 ;; If user discards the Buffers item, play along.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 (when (and (lookup-key (current-global-map) [menu-bar buffer])
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (or (not (fboundp 'frame-or-buffer-changed-p))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 (frame-or-buffer-changed-p)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 arg))
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1102 (let ((frames (frame-list))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 buffers-menu frames-menu)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 ;; Make the menu of buffers proper.
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (setq msb--last-buffer-menu (msb--create-buffer-menu))
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (setq buffers-menu msb--last-buffer-menu)
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 ;; Make a Frames menu if we have more than one frame.
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1108 (when (cdr frames)
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1109 (let* ((frame-length (length frames))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1110 (f-title (format "Frames (%d)" frame-length)))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1111 ;; List only the N most recently selected frames
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1112 (when (and (integerp msb-max-menu-items)
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1113 (> msb-max-menu-items 1)
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1114 (> frame-length msb-max-menu-items))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1115 (setcdr (nthcdr msb-max-menu-items frames) nil))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 (setq frames-menu
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1117 (nconc
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1118 (list 'frame f-title '(nil) 'keymap f-title)
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1119 (mapcar
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1120 (lambda (frame)
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1121 (nconc
45180
b9324402ed2f (msb-menu-bar-update-buffers): Fixed frame menu to use
Richard M. Stallman <rms@gnu.org>
parents: 44988
diff changeset
1122 (list (frame-parameter frame 'name)
b9324402ed2f (msb-menu-bar-update-buffers): Fixed frame menu to use
Richard M. Stallman <rms@gnu.org>
parents: 44988
diff changeset
1123 (frame-parameter frame 'name)
20901
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1124 (cons nil nil))
3d355fb3b30f File customized.
Stephen Eglen <stephen@gnu.org>
parents: 20884
diff changeset
1125 'menu-bar-select-frame))
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1126 frames)))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (define-key (current-global-map) [menu-bar buffer]
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (cons "Buffers"
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 (if (and buffers-menu frames-menu)
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1130 ;; Combine Frame and Buffers menus with separator between
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1131 (nconc (list 'keymap "Buffers and Frames" frames-menu
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
1132 (and msb-separator-diff '(separator "--")))
10821
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1133 (cddr buffers-menu))
1ff0ed96a4c0 (msb): Select the window that the mouse is in before
Richard M. Stallman <rms@gnu.org>
parents: 10403
diff changeset
1134 (or buffers-menu 'undefined)))))))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1136 ;; Snarf current bindings of `mouse-buffer-menu' (normally
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1137 ;; C-down-mouse-1).
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1138 (defvar msb-mode-map
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1139 (let ((map (make-sparse-keymap "Msb")))
49168
92fb2806e140 (msb-mode-map): Use command remapping instead of substitute-key-definition.
Andreas Schwab <schwab@suse.de>
parents: 45180
diff changeset
1140 (define-key map [remap mouse-buffer-menu] 'msb)
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1141 map))
20504
1b8aec1c12f1 Doc fixes. Changed `append' to `nconc'
Richard M. Stallman <rms@gnu.org>
parents: 16833
diff changeset
1142
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1143 ;;;###autoload
30864
904dafa7e039 (msb-mode): Define it in terms of define-minor-mode.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 30800
diff changeset
1144 (define-minor-mode msb-mode
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1145 "Toggle Msb mode.
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1146 With arg, turn Msb mode on if and only if arg is positive.
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1147 This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1148 different buffer menu using the function `msb'."
61274
38d05b1ac290 (msb-mode): Specify :group.
Lute Kamstra <lute@gnu.org>
parents: 57525
diff changeset
1149 :global t :group 'msb
24796
19424321d8e1 Add to minor-mode-map-alist. Remove hook installation
Dave Love <fx@gnu.org>
parents: 21670
diff changeset
1150 (if msb-mode
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
1151 (progn
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
1152 (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers)
36229
779e2936512e (msb-mode): Call the update-buffers function explicitly
Gerd Moellmann <gerd@gnu.org>
parents: 35815
diff changeset
1153 (remove-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
779e2936512e (msb-mode): Call the update-buffers function explicitly
Gerd Moellmann <gerd@gnu.org>
parents: 35815
diff changeset
1154 (msb-menu-bar-update-buffers t))
25050
1539c0070dd3 (msb-menu-bar-update-buffers): Renamed from
Dave Love <fx@gnu.org>
parents: 24796
diff changeset
1155 (remove-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers)
36229
779e2936512e (msb-mode): Call the update-buffers function explicitly
Gerd Moellmann <gerd@gnu.org>
parents: 35815
diff changeset
1156 (add-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
779e2936512e (msb-mode): Call the update-buffers function explicitly
Gerd Moellmann <gerd@gnu.org>
parents: 35815
diff changeset
1157 (menu-bar-update-buffers t)))
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1159 (defun msb-unload-hook ()
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1160 (msb-mode 0))
57525
c2b32641aa8c (msb-unload-hook): Set the variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1161 (add-hook 'msb-unload-hook 'msb-unload-hook)
30800
aa5afea93d8a (msb--few-menus, msb--very-many-menus): Use current Gnus
Dave Love <fx@gnu.org>
parents: 28977
diff changeset
1162
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (provide 'msb)
35815
6ad253d733d5 (toplevel): Quote hook symbols.
Gerd Moellmann <gerd@gnu.org>
parents: 35715
diff changeset
1164 (eval-after-load "msb" '(run-hooks 'msb-after-load-hook 'msb-after-load-hooks))
16833
052a9f2e21e5 (frame-or-buffer-changed-p): Definition deleted.
Richard M. Stallman <rms@gnu.org>
parents: 16428
diff changeset
1165
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49597
diff changeset
1166 ;;; arch-tag: 403f9e82-b92e-4e7a-a797-5d6d9b76da36
10228
4181e3182312 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 ;;; msb.el ends here