;ELC   
;;; Compiled by pot@pot.cnuce.cnr.it on Tue Mar 18 15:48:19 2003
;;; from file /home/pot/gnu/emacs-pretest.new/lisp/msb.el
;;; in Emacs version 21.3
;;; with bytecomp version 2.85.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`msb.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\301B\304\302B\305\303B\306\303!\204 \n\307\310\311\312\313\314\315\316&\207" [current-load-list msb--few-menus msb--very-many-menus msb--many-menus (((and (boundp 'server-buffer-clients) server-buffer-clients 'multi) 3030 "Clients (%d)") ((and msb-display-invisible-buffers-p (msb-invisible-buffer-p) 'multi) 3090 "Invisible buffers (%d)") ((eq major-mode 'dired-mode) 2010 "Dired (%d)" msb-dired-item-handler msb-sort-by-directory) ((eq major-mode 'Man-mode) 4090 "Manuals (%d)") ((eq major-mode 'w3-mode) 4020 "WWW (%d)") ((or (memq major-mode '(rmail-mode rmail-edit-mode vm-summary-mode vm-mode mail-mode)) (memq major-mode '(mh-letter-mode mh-show-mode mh-folder-mode)) (memq major-mode '(gnus-summary-mode message-mode gnus-group-mode gnus-article-mode score-mode gnus-browse-killed-mode))) 4010 "Mail (%d)") ((not buffer-file-name) 4099 "Buffers (%d)") ('no-multi 1099 "Files (%d)")) (((and (boundp 'server-buffer-clients) server-buffer-clients 'multi) 1010 "Clients (%d)") ((and (boundp 'vc-mode) vc-mode 'multi) 1020 "Version Control (%d)") ((and buffer-file-name (buffer-modified-p) 'multi) 1030 "Changed files (%d)") ((and (get-buffer-process (current-buffer)) 'multi) 1040 "Processes (%d)") ((and msb-display-invisible-buffers-p (msb-invisible-buffer-p) 'multi) 1090 "Invisible buffers (%d)") ((eq major-mode 'dired-mode) 2010 "Dired (%d)" msb-dired-item-handler msb-sort-by-directory) ((eq major-mode 'Man-mode) 5030 "Manuals (%d)") ((eq major-mode 'w3-mode) 5020 "WWW (%d)") ((or (memq major-mode '(rmail-mode rmail-edit-mode vm-summary-mode vm-mode mail-mode)) (memq major-mode '(mh-letter-mode mh-show-mode mh-folder-mode)) (memq major-mode '(gnus-summary-mode message-mode gnus-group-mode gnus-article-mode score-mode gnus-browse-killed-mode))) 5010 "Mail (%d)") ((and (not buffer-file-name) 'no-multi) 5099 "Other non-file buffers (%d)") ((and (string-match "/\\.[^/]*$" buffer-file-name) 'multi) 3090 "Hidden Files (%d)") ((memq major-mode '(c-mode c++-mode)) 3010 "C/C++ Files (%d)") ((eq major-mode 'emacs-lisp-mode) 3020 "Elisp Files (%d)") ((eq major-mode 'latex-mode) 3030 "LaTex Files (%d)") ('no-multi 3099 "Other files (%d)")) boundp custom-declare-group msb nil "Customizable buffer-selection with multiple menus." :prefix "msb-" :group mouse] 8)
#@44 Set the value of custom variables for msb.
(defalias 'msb-custom-set #[(symbol value) "	L\210\303\304!\205 \n\205 \305\306!\207" [symbol value msb-mode featurep msb msb-menu-bar-update-buffers t] 2 (#$ . 2907)])
#@1987 *List of criteria for splitting the mouse buffer menu.
The elements in the list should be of this type:
 (CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLING-FN ITEM-SORT-FN).

When making the split, the buffers are tested one by one against the
CONDITION, just like a Lisp cond: When hitting a true condition, the
other criteria are *not* tested and the buffer name will appear in the
menu with the menu-title corresponding to the true condition.

If the condition returns the symbol `multi', then the buffer will be
added to this menu *and* tested for other menus too.  If it returns
`no-multi', then the buffer will only be added if it hasn't been added
to any other menu.

During this test, the buffer in question is the current buffer, and
the test is surrounded by calls to `save-excursion' and
`save-match-data'.

The categories are sorted by MENU-SORT-KEY.  Smaller keys are on top.
nil means don't display this menu.

MENU-TITLE is really a format.  If you add %d in it, the %d is
replaced with the number of items in that menu.

ITEM-HANDLING-FN, is optional.  If it is supplied and is a function,
than it is used for displaying the items in that particular buffer
menu, otherwise the function pointed out by
`msb-item-handling-function' is used.

ITEM-SORT-FN, is also optional.
If it is not supplied, the function pointed out by
`msb-item-sort-function' is used.
If it is nil, then no sort takes place and the buffers are presented
in least-recently-used order.
If it is t, then no sort takes place and the buffers are presented in
most-recently-used order.
If it is supplied and non-nil and not t than it is used for sorting
the items in that particular buffer menu.

Note1: There should always be a `catch-all' as last element, in this
list.  That is an element like (t TITLE ITEM-HANDLING-FUNCTION).
Note2: A buffer menu appears only if it has at least one buffer in it.
Note3: If you have a CONDITION that can't be evaluated you will get an
error every time you do \[msb].
(custom-declare-variable 'msb-menu-cond 'msb--very-many-menus '(#$ . -3130) :type `(choice (const :tag "long" :value ,msb--very-many-menus) (const :tag "short" :value ,msb--few-menus) (sexp :tag "user")) :set 'msb-custom-set :group 'msb)
#@40 The sort key for files sorted by mode.
(custom-declare-variable 'msb-modes-key '4000 '(#$ . 5360) :type 'integer :set 'msb-custom-set :group 'msb :version "20.3")
#@137 *Non-nil means use separators.
The separators will appear between all menus that have a sorting key
that differs by this value or more.
(custom-declare-variable 'msb-separator-diff '100 '(#$ . -5530) :type '(choice integer (const nil)) :set 'msb-custom-set :group 'msb)
#@46 *The sort key for files sorted by directory.
(defvar msb-files-by-directory-sort-key 0 (#$ . -5806))
#@171 *The maximum number of items in a menu.
If this variable is set to 15 for instance, then the submenu will be
split up in minor parts, 15 items each.  Nil means no limit.
(custom-declare-variable 'msb-max-menu-items '15 '(#$ . -5914) :type '(choice integer (const nil)) :set 'msb-custom-set :group 'msb)
#@340 *The maximum number of items from different directories.

When the menu is of type `file by directory', this is the maximum
number of buffers that are clumped together from different
directories.

Set this to 1 if you want one menu per directory instead of clumping
them together.

If the value is not a number, then the value 10 is used.
(custom-declare-variable 'msb-max-file-menu-items '10 '(#$ . -6224) :type 'integer :set 'msb-custom-set :group 'msb)
#@71 *Where should the menu with the most recently used buffers be placed?
(custom-declare-variable 'msb-most-recently-used-sort-key '-1010 '(#$ . -6686) :type 'integer :set 'msb-custom-set :group 'msb)
#@122 *How many buffers should be in the most-recently-used menu.
No buffers at all if less than 1 or nil (or any non-number).
(custom-declare-variable 'msb-display-most-recently-used '15 '(#$ . -6891) :type 'integer :set 'msb-custom-set :group 'msb)
#@45 *The title for the most-recently-used menu.
(custom-declare-variable 'msb-most-recently-used-title '"Most recently used (%d)" '(#$ . -7142) :type 'string :set 'msb-custom-set :group 'msb)
#@75 *Function that specifies how many pixels to shift the top menu leftwards.
(defvar msb-horizontal-shift-function '(lambda nil 0) (#$ . -7336))
#@143 *Show invisible buffers or not.
Non-nil means that the buffer menu should include buffers that have
names that starts with a space character.
(custom-declare-variable 'msb-display-invisible-buffers-p 'nil '(#$ . -7485) :type 'boolean :set 'msb-custom-set :group 'msb)
#@500 *The appearance of a buffer menu.

The default function to call for handling the appearance of a menu
item.  It should take to arguments, BUFFER and MAX-BUFFER-NAME-LENGTH,
where the latter is the max length of all buffer names.

The function should return the string to use in the menu.

When the function is called, BUFFER is the current buffer.  This
function is called for items in the variable `msb-menu-cond' that have
nil as ITEM-HANDLING-FUNCTION.  See `msb-menu-cond' for more
information.
(defvar msb-item-handling-function 'msb-item-handler (#$ . -7760))
#@400 *The order of items in a buffer menu.

The default function to call for handling the order of items in a menu
item.  This function is called like a sort function.  The items look
like (ITEM-NAME . BUFFER).

ITEM-NAME is the name of the item that will appear in the menu.
BUFFER is the buffer, this is not necessarily the current buffer.

Set this to nil or t if you don't want any sorting (faster).
(custom-declare-variable 'msb-item-sort-function ''msb-sort-by-name '(#$ . -8333) :type '(choice (const msb-sort-by-name) (const :tag "Newest first" t) (const :tag "Oldest first" nil)) :set 'msb-custom-set :group 'msb)
#@108 *Non-nil means that files should be sorted by directory.
This is instead of the groups in `msb-menu-cond'.
(custom-declare-variable 'msb-files-by-directory 'nil '(#$ . -8958) :type 'boolean :set 'msb-custom-set :group 'msb)
#@49 Hook run after the msb package has been loaded.
(custom-declare-variable 'msb-after-load-hook 'nil '(#$ . 9188) :type 'hook :set 'msb-custom-set :group 'msb)
(byte-code "\301B\303\301!\204\f \304\302B\303\302!\204 \304\304\207" [current-load-list msb--last-buffer-menu msb--error boundp nil] 2)
#@265 Create one string item, concerning BUFFER, for the buffer menu.
The item looks like:
*% <buffer-name>
The `*' appears only if the buffer is marked as modified.
The `%' appears only if the buffer is read-only.
Optional second argument MAXBUF is completely ignored.
(defalias 'msb-item-handler #[(buffer &optional maxbuf) "\304 \305 \203 \306\202\f \307\203 \310\202 \307\311\312\n	$+\207" [buffer-read-only read-only modified name buffer-name buffer-modified-p "*" " " "%" format "%s%s %s"] 5 (#$ . 9497)])
(defalias 'msb--dired-directory #[nil ";\203 \301\302!!\207:\203 \301\302@!!\207\303\304\305 \"\207" [dired-directory abbreviate-file-name expand-file-name error "Unknown type of `dired-directory' in buffer %s" buffer-name] 3])
#@273 Create one string item, concerning a dired BUFFER, for the buffer menu.
The item looks like:
*% <buffer-name>
The `*' appears only if the buffer is marked as modified.
The `%' appears only if the buffer is read-only.
Optional second argument MAXBUF is completely ignored.
(defalias 'msb-dired-item-handler #[(buffer &optional maxbuf) "\304 \305 \203 \306\202\f \307\203 \310\202 \307\311\312\n	$+\207" [buffer-read-only read-only modified name msb--dired-directory buffer-modified-p "*" " " "%" format "%s%s %s"] 5 (#$ . 10252)])
#@257 Create one string item for the buffer menu.
The item looks like:
<buffer-name> *%# <file-name>
The `*' appears only if the buffer is marked as modified.
The `%' appears only if the buffer is read-only.
The `#' appears only version control file (SCCS/RCS).
(defalias 'msb-alon-item-handler #[(buffer maxbuf) "\305\211\306\"\307	!\310 \203 \311\202 \312\n\203 \313\202 \312\314\303!\203) \203) \315\202* \312\f\206/ \316&\207" [maxbuf buffer buffer-read-only vc-mode buffer-file-name format "%%%ds  %%s%%s%%s  %%s" buffer-name buffer-modified-p "*" " " "%" boundp "#" ""] 7 (#$ . 10797)])
#@92 Sort the items ITEM1 and ITEM2 by their `buffer-name'.
An item looks like (NAME . BUFFER).
(defalias 'msb-sort-by-name #[(item1 item2) "\302A!\302	A!\231\207" [item1 item2 buffer-name] 3 (#$ . 11397)])
#@103 Sort the items ITEM1 and ITEM2 by directory name.  Made for dired.
An item look like (NAME . BUFFER).
(defalias 'msb-sort-by-directory #[(item1 item2) "\212Aq\210\302 )\212	Aq\210\302 )\231\207" [item1 item2 msb--dired-directory] 2 (#$ . 11607)])
#@278 Pop up several menus of buffers for selection with the mouse.
This command switches buffers in the window that you clicked on, and
selects that window.

See the function `mouse-select-buffer' and the variable
`msb-menu-cond' for more information about how the menus are split.
(defalias 'msb #[(event) "\305 \3068)\307	8)\310\n!\204 \311\n!\210\312!\211\203( \313\f!\210\202, \311!\210+\314\207" [event position window old-window buffer selected-window 1 0 framep select-window mouse-select-buffer switch-to-buffer nil] 4 (#$ . 11862) "e"])
#@130 Return t if optional BUFFER is an "invisible" buffer.
If the argument is left out or nil, then the current buffer is considered.
(defalias 'msb-invisible-buffer-p #[(&optional buffer) "\301!G\302V\205 \301!\302H\303=\207" [buffer buffer-name 0 32] 2 (#$ . 12420)])
#@48 Strip one hierarchy level from the end of DIR.
(defalias 'msb--strip-dir #[(dir) "\301\302!!\207" [dir file-name-directory directory-file-name] 3 (#$ . 12694)])
(defalias 'msb--init-file-alist #[(list) "\304\305\306\307\310\"\"\311\"\312\211\305\306\307\313	\"\"\nBC\244+\207" [list buffer-alist buffers path sort apply nconc mapcar #[(buffer) "\302\303!!\211\205 \304	!BC)\207" [buffer file-name expand-file-name buffer-file-name msb--strip-dir] 4] #[(item1 item2) "@	@\231\207" [item1 item2] 2] nil #[(item) "	@\232\203 	A\nB\304\207\205 \nB	@	AC\205# C)\207" [path item buffers result nil] 2]] 6])
#@44 Format a suitable title for the menu item.
(defalias 'msb--format-title #[(top-found-p path number-of-items) "\303\203	 \304\202\n \305\306	!\n#\207" [top-found-p path number-of-items format "%s... (%d)" "%s (%d)" abbreviate-file-name] 4 (#$ . 13323)])
(byte-code "\301B\302B\301\207" [current-load-list msb--choose-file-menu-list msb--choose-file-menu-arg-list] 2)
#@70 Choose file-menu with respect to directory for every buffer in LIST.
(defalias 'msb--choose-file-menu #[(list) "\306!\307\n\247\203 \n\202 \310\307\211\211\211\211\211\211\211@A@A\311!\203_\307\307\211\211@\203\231 \fGX\203\231 @GGY\203\231 \312\313\307@\313G&\314=\203\231 \314\315\fA\"A\211@\202Y \fGV\203\322 @\316@AG#ABB\307@A@A\202[\203\343 \314\fB\317!A\232\203\366 \203[GGY\203\312\313\307\313G&\314=\2042GGW\203[\312\313\307\313G&\314=\203[\316@AG#ABB\307@A@A-\202? \203x\316@AG#ABB\307\237.\n\207" [list msb--choose-file-menu-arg-list msb-max-file-menu-items old-path buffers path msb--init-file-alist nil 10 copy-sequence compare-strings 0 t append msb--format-title msb--strip-dir rest first last-path top-found-p max-clumped-together final-list buffer-alist msb--choose-file-menu-list item new-path result tmp-rest found-p completion-ignore-case] 11 (#$ . 13700)])
#@221 Create a vector from an element MENU-COND-ELT of `msb-menu-cond'.
This takes the form:
]BUFFER-LIST-VARIABLE CONDITION MENU-SORT-KEY MENU-TITLE ITEM-HANDLER SORTER)
See `msb-menu-cond' for a description of its elements.
(defalias 'msb--create-function-info #[(menu-cond-elt) "\306\307!	G\310V\205 \310	8\211\203 \311\n!\203 \n\202 	G\312V\203, \312	8\202- \311!\204B \203B \313=\203G \202H 	G\310W\203U \314\315!\210	G\310V\203h \311\n!\204h \316\317\nC\"\210	G\312V\203\211 \203\211 \311!\204\211 \313=\204\211 \316\317C\"\210\320L\210\321	@	A@\322	8\f&-\207" [list-symbol menu-cond-elt tmp-ih msb-item-handling-function item-handler msb-item-sort-function make-symbol "-msb-buffer-list" 3 fboundp 4 t error "Wrong format of msb-menu-cond" signal invalid-function nil vector 2 tmp-s sorter] 8 (#$ . 14800)])
(defalias 'msb--collect #[(function-info-vector) "\306\211\211\307\306\306T\211\fGW\203M \fH\310\311H!\211\203C \n\312=\2034 	\204C \n\313=\203< \314B\n\203 \n\313=\204 \237,\211\204^ \n\204^ \315\316!\210+\207" [function-info-list multi-flag result function-info-vector #1=#:G97269 #2=#:G97270 nil -1 eval 1 no-multi multi t error "No catch-all in msb-menu-cond!" fi #3=#:G97271] 4])
(put 'msb--collect 'byte-optimizer 'byte-compile-inline-expand)
#@164 Add BUFFER to the menu depicted by FUNCTION-INFO.
All side-effects.  Adds an element of form (BUFFER-TITLE . BUFFER)
to the buffer-list variable in function-info.
(defalias 'msb--add-to-menu #[(buffer function-info max-buffer-name-length) "\304H\211\305H\n\"\nB\306	!BL)\207" [function-info list-symbol buffer max-buffer-name-length 0 4 eval] 5 (#$ . 16131)])
#@41 Select the appropriate menu for BUFFER.
(defalias 'msb--choose-menu #[(buffer function-info-vector max-buffer-name-length) "?\205 \302	!?\205 \303\304\305\217\207" [msb-display-invisible-buffers-p buffer msb-invisible-buffer-p nil (byte-code "\212q\210	\306\211\211	\307\306\306T\211GW\203W H\310\311H!\211\203M \f\312=\203> \204M \f\313=\203F \314B\f\203 \f\313=\204 \237,\211\204h \f\204h \315\316!\210\n,\306\211\203\211 @\317#\210A\211\204s +\306\207" [buffer function-info-vector function-info-list multi-flag result #1=#:G97269 nil -1 eval 1 no-multi multi t error "No catch-all in msb-menu-cond!" msb--add-to-menu #2=#:G97270 fi #3=#:G97271 info #4=#:--dolist-temp--97272 max-buffer-name-length] 5) ((error (byte-code "?\205 \302\303\304	!\"\305\306\"\207" [msb--error buffer format "In msb-menu-cond, error for buffer `%s'." buffer-name error "%s"] 4)))] 3 (#$ . 16501)])
(put 'msb--choose-menu 'byte-optimizer 'byte-compile-inline-expand)
#@75 Return (SORT-KEY TITLE . BUFFER-LIST) or nil if the buffer-list is empty.
(defalias 'msb--create-sort-item #[(function-info) "\304\305H!\211\2058 \306H\307H\n\2057 \n\310\311H	G\"\204& 	\2025 \312=\2031 	\237\2025 \313	\"BB*)\207" [function-info buffer-list sort-key sorter eval 0 5 2 format 3 t sort] 6 (#$ . 17517)])
#@452 Return ALIST as a sorted, aggregated alist.

In the result all items with the same car element (according to
SAME-PREDICATE) are aggregated together.  The alist is first sorted by
SORT-PREDICATE.

Example:
(msb--aggregate-alist
 '((a . a1) (a . a2) (b . b1) (c . c3) (a . a4) (a . a3) (b . b3) (b . b2))
 (function string=)
 (lambda (item1 item2)
   (string< (symbol-name item1) (symbol-name item2))))
results in
((a a1 a2 a4 a3) (b b1 b3 b2) (c c3))
(defalias 'msb--aggregate-alist #[(alist same-predicate sort-predicate) "??\205% \306\211\211\211\307\306\310\311\312\313\314\315\"\"\"	\237BC\244.\207" [alist old-car first-time-p tmp-same tmp-old-car same nil t apply nconc mapcar #[(item) "\203 	A\nB\306	@\306\207\f	@\"\203 	A\nB\306\207\n	AC	@\237BC\207" [first-time-p item same old-car same-predicate tmp-same nil tmp-old-car] 3] sort #[(item1 item2) "	@\n@\"\207" [sort-predicate item1 item2] 3] result] 7 (#$ . 17853)])
(defalias 'msb--mode-menu-cond #[nil "\306\307\310\311\312 A\311\211\2032 \f@\212q\210\313 \204* \n\236\204* B\nB)\fA\211\204 *\n)\314\"\")\207" [msb-modes-key key mode-list buffer #1=#:--dolist-temp--97273 major-mode mapcar #[(item) "T\302\303\304	@DE	A\305PE\207" [key item eq major-mode quote " (%d)"] 4] sort nil buffer-list msb-invisible-buffer-p #[(item1 item2) "A	A\231\207" [item1 item2] 2] mode-name] 6])
#@97 Return a list for the most recently used buffers.
It takes the form ((TITLE . BUFFER-LIST)...).
(defalias 'msb--most-recently-used-menu #[(max-buffer-name-length) "\247\205q \306V\205q \307 A\306	\310\310:\203R @\212\fq\210\311 ?\205. \312=?)\203E \212\fq\210\f\"\f)BB\nT\nY\204R A\211\202 \237,;\203g \313G\"\202m \314\315C\"*B\207" [msb-display-most-recently-used buffers n #1=#:G97274 buffer #2=#:G97275 0 buffer-list nil msb-invisible-buffer-p dired-mode format signal wrong-type-argument major-mode msb-item-handling-function max-buffer-name-length most-recently-used msb-most-recently-used-title] 4 (#$ . 19248)])
(defalias 'msb--create-buffer-menu-2 #[nil "\306\307\211\310 \307\211\203) \f@\204 \311 \204\" \n\312!G]\fA\211\204 *\313\314\315\316\317%\320 \"\"\"\310 \307\211&\203v &@'\203W \321!\203W 	B\202m \n\204g \311!\204l \307\322\323\217\210+&A\211&\204A *	\203\202 \315\324\325	!\"\307(\326\n!)	*\327+\307,\307-\307.+T\211+*GW\203\302 *+H,\330,!\211-\203\232 -.B.\202\232 .\237-\244/\315\331\332\333)A\203\336 0)B/B\202\340 /\334\"!\"(\317\335\336(!1\205\365 \337\340DC\341'\203\377 \342\202 \343\344BBC$.\207" [function-info-vector file-buffers max-buffer-name-length buffer #1=#:--dolist-temp--97276 msb-display-invisible-buffers-p 0 nil buffer-list msb-invisible-buffer-p buffer-name apply vector mapcar msb--create-function-info append msb--mode-menu-cond buffer-file-name (byte-code "\212q\210	\306\211\211	\307\306\306T\211GW\203W H\310\311H!\211\203M \f\312=\203> \204M \f\313=\203F \314B\f\203 \f\313=\204 \237,\211\204h \f\204h \315\316!\210\n,\306\211\203\211 @\317#\210A\211\204s +\306\207" [buffer function-info-vector function-info-list multi-flag result #2=#:G97269 nil -1 eval 1 no-multi multi t error "No catch-all in msb-menu-cond!" msb--add-to-menu #3=#:G97270 fi #4=#:G97271 info #5=#:--dolist-temp--97272 max-buffer-name-length] 5) ((error (byte-code "?\205 \302\303\304	!\"\305\306\"\207" [msb--error buffer format "In msb-menu-cond, error for buffer `%s'." buffer-name error "%s"] 4))) #[(buffer-list) "	@\302\303\304	A\"\305\"BB\207" [msb-files-by-directory-sort-key buffer-list sort mapcar #[(buffer) "\212q\210	\n\")B\207" [buffer msb-item-handling-function max-buffer-name-length] 3] #[(item1 item2) "@	@\231\207" [item1 item2] 2]] 6] msb--choose-file-menu msb--most-recently-used-menu -1 msb--create-sort-item cdr msb--add-separators sort #[(elt1 elt2) "@	@W\207" [elt1 elt2] 2] (keymap "Select Buffer") msb--make-keymap-menu separator "--" toggle "*Files by type*" "*Files by directory*" msb--toggle-menu-type msb-menu-cond #6=#:--dolist-temp--97277 msb-files-by-directory menu most-recently-used #7=#:G97278 #8=#:G97279 elt value #9=#:G97280 others msb-most-recently-used-sort-key msb-separator-diff] 7])
(defalias 'msb--create-buffer-menu #[nil "\301 \302\216\212\303 +\207" [save-match-data-internal match-data ((set-match-data save-match-data-internal)) msb--create-buffer-menu-2] 1])
#@63 Multi purpose function for selecting a buffer with the mouse.
(defalias 'msb--toggle-menu-type #[nil "?\301\302!\207" [msb-files-by-directory msb-menu-bar-update-buffers t] 2 (#$ . 22353) nil])
#@215 Pop up several menus of buffers, for selection with the mouse.
Returns the selected buffer or nil if no buffer is selected.

The way the buffers are split is conveniently handled with the
variable `msb-menu-cond'.
(defalias 'mouse-select-buffer #[(event) "\204 	\203 \306\307!\203 \307 \203 \310\311 \n\310\306\312!\203_ \306\313!\203_ \n\314\n8)\315\f8)@\n\314\n8)\315\f8)A\n\314\n8)\316\f8)\211 Z\211DD+\317\316\320\"\210\321\f	\"\211@\322=\203y \323 \210\324\n!\202\273 @\247\203\222 A\204\222 \325@	\236\233\324\n!)\202\273 @\247\203\237 A\211\202\223 @;\203\257 A\204\257 @\202\273 \204\267 \202\273 \326\327\"*\207" [msb--error msb--last-buffer-menu event choice position posWind fboundp frame-or-buffer-changed-p nil msb--create-buffer-menu posn-x-y posn-window 1 2 0 sit-for 100 x-popup-menu toggle msb--toggle-menu-type mouse-select-buffer 3 error "Unknown form for buffer: %s" posY posX msb-horizontal-shift-function] 5 (#$ . 22556)])
(defalias 'msb--add-separators #[(sorted-list) "\203	 \247\204 	\207\303\304\305\306\307	\"\")\207" [msb-separator-diff sorted-list last-key nil apply nconc mapcar #[(item) "\203 	\203 \n@	ZV\203 \n@\211\303B\nD\207\n@\nC\207" [msb-separator-diff last-key item separator] 3]] 5])
(defalias 'msb--split-menus-2 #[(list mcount result) "G	V\203@ \306\307\211\211	W\203\" \211A@\nB\fT\211\202 \n\237\211@@\310P\311F\n\244B+\312T#\207\204G \207\307@@\310P\311F\244B)\237\207" [list msb-max-menu-items tmp-list sub-name count mcount 0 nil "..." keymap msb--split-menus-2 result] 5])
(defalias 'msb--split-menus #[(list) "\250\203 \302V\203 \303	\302\304#\207	\207" [msb-max-menu-items list 0 msb--split-menus-2 nil] 4])
(defalias 'msb--make-keymap-menu #[(raw-menu) "\303\304B\305\306\307\n\"*\207" [mcount end raw-menu (nil) menu-bar-select-buffer 0 mapcar #[(sub-menu) "\303=\203\n \303\304D\207\305\306A\"\nT\211@\307@F\310	!\244)\207" [sub-menu buffers mcount separator "--" mapcar #[(item) "\302A!@	BB\207" [item end buffer-name] 3] keymap msb--split-menus] 4]] 3])
#@52 A re-written version of `menu-bar-update-buffers'.
(defalias 'msb-menu-bar-update-buffers #[(&optional arg) "\306\307 \310\"\205\206 \311\312!\203 \312 \204 \205\206 \313 \314\211\315 \211A\203\\ G\316\317\"\250\203L \320V\203L V\203L \233\314\241\210\321\322\323\257\324\325\"\244*\326\307 \327\330\n\203~ 	\203~ \323\331	\205r \332F\n\211AA)\244\202\203 \n\206\203 \333B#+\207" [arg frames-menu buffers-menu frames msb--last-buffer-menu frame-length lookup-key current-global-map [menu-bar buffer] fboundp frame-or-buffer-changed-p frame-list nil msb--create-buffer-menu format "Frames (%d)" 1 frame (nil) keymap mapcar #[(frame) "\301\302!\236A\303\211BE\304\244\207" [frame name frame-parameters nil menu-bar-select-frame] 4] define-key [menu-bar buffer] "Buffers" "Buffers and Frames" (separator "--") undefined f-title msb-max-menu-items msb-separator-diff x] 9 (#$ . 24677)])
(byte-code "\303B\304\303!\204 \305\306!\307\310\311	\n$\210	)\303\207" [current-load-list map global-map msb-mode-map boundp make-sparse-keymap "Msb" substitute-key-definition mouse-buffer-menu msb] 5)
#@203 Non-nil if Msb mode is enabled.
See the command `msb-mode' for a description of this minor-mode.
Setting this variable directly does not take effect;
use either \[customize] or the function `msb-mode'.
(custom-declare-variable 'msb-mode 'nil '(#$ . 25812) :set (lambda (symbol value) (funcall symbol (or value 0))) :initialize 'custom-initialize-default :group 'msb :type 'boolean :require 'msb)
#@196 Toggle Msb mode.
With arg, turn Msb mode on if and only if arg is positive.
This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
different buffer menu using the function `msb'.
(defalias 'msb-mode #[(&optional arg) "\203\f \302!\303V\202 	?\211\203$ \304\305\306\"\210\307\305\310\"\210\306\311!\210\2022 \307\305\306\"\210\304\305\310\"\210\310\311!\210\312\313	\203< \314\202= \315\"\210t\203P \316\317	\203M \320\202N \321\"\210\322 \210	\207" [arg msb-mode prefix-numeric-value 0 add-hook menu-bar-update-hook msb-menu-bar-update-buffers remove-hook menu-bar-update-buffers t run-hooks msb-mode-hook msb-mode-on-hook msb-mode-off-hook message "Msb mode %sabled" "en" "dis" force-mode-line-update] 4 (#$ . 26215) nil])
#@45 Hook run at the end of function `msb-mode'.
(custom-declare-variable 'msb-mode-hook 'nil '(#$ . 26965) :group 'msb :type 'hook)
(byte-code "\303\301\304\305\306!\205 \306J#\210\203 	\203 \n\204 \307\310\"\210\304\207" [load-file-name msb-mode purify-flag add-minor-mode nil boundp msb-mode-map eval-after-load (msb-mode 1)] 5)
(defalias 'msb-unload-hook #[nil "\300\301!\207" [msb-mode 0] 2])
(byte-code "\300\301!\210\302\303\304\"\207" [provide msb eval-after-load "msb" (run-hooks 'msb-after-load-hook 'msb-after-load-hooks)] 3)
