X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/965440e65bcafa4dd86972bc2703a2a07a7caa03..dc3eeeb48af706de824b7b8bae62dc868d26637e:/lisp/msb.el diff --git a/lisp/msb.el b/lisp/msb.el index 5c31842037..aa42e18300 100644 --- a/lisp/msb.el +++ b/lisp/msb.el @@ -1,7 +1,7 @@ ;;; msb.el --- customizable buffer-selection with multiple menus -;; Copyright (C) 1993, 94, 95, 97, 98, 99, 2000, 2001, 2003 -;; Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, +;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc. ;; Author: Lars Lindberg ;; Maintainer: FSF @@ -23,8 +23,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -41,11 +41,11 @@ ;; There are some constants for you to try here: ;; msb--few-menus ;; msb--very-many-menus (default) -;; +;; ;; Look at the variable `msb-item-handling-function' for customization ;; of the appearance of every menu item. Try for instance setting ;; it to `msb-alon-item-handler'. -;; +;; ;; Look at the variable `msb-item-sort-function' for customization ;; of sorting the menus. Set it to t for instance, which means no ;; sorting - you will get latest used buffer first. @@ -185,7 +185,7 @@ "Elisp Files (%d)") ((eq major-mode 'latex-mode) 3030 - "LaTex Files (%d)") + "LaTeX Files (%d)") ('no-multi 3099 "Other files (%d)"))) @@ -320,7 +320,7 @@ No buffers at all if less than 1 or nil (or any non-number)." :type 'string :set 'msb-custom-set :group 'msb) - + (defvar msb-horizontal-shift-function '(lambda () 0) "*Function that specifies how many pixels to shift the top menu leftwards.") @@ -362,7 +362,7 @@ Set this to nil or t if you don't want any sorting (faster)." (const :tag "Oldest first" nil)) :set 'msb-custom-set :group 'msb) - + (defcustom msb-files-by-directory nil "*Non-nil means that files should be sorted by directory. This is instead of the groups in `msb-menu-cond'." @@ -474,12 +474,20 @@ See the function `mouse-select-buffer' and the variable `msb-menu-cond' for more information about how the menus are split." (interactive "e") (let ((old-window (selected-window)) - (window (posn-window (event-start event)))) + (window (posn-window (event-start event))) + early-release) (unless (framep window) (select-window window)) + ;; This `sit-for' magically makes the menu stay up if the mouse + ;; button is released within 0.1 second. + (setq early-release (not (sit-for 0.1 t))) (let ((buffer (mouse-select-buffer event))) (if buffer (switch-to-buffer buffer) - (select-window old-window)))) + (select-window old-window))) + ;; If the above `sit-for' was interrupted by a mouse-up, avoid + ;; generating a drag event. + (if (and early-release (memq 'down (event-modifiers last-input-event))) + (discard-input))) nil) ;;; @@ -489,7 +497,7 @@ See the function `mouse-select-buffer' and the variable "Return t if optional BUFFER is an \"invisible\" buffer. If the argument is left out or nil, then the current buffer is considered." (and (> (length (buffer-name buffer)) 0) - (eq ?\ (aref (buffer-name buffer) 0)))) + (eq ?\s (aref (buffer-name buffer) 0)))) (defun msb--strip-dir (dir) "Strip one hierarchy level from the end of DIR." @@ -729,7 +737,7 @@ to the buffer-list variable in function-info." max-buffer-name-length) buffer) (eval list-symbol))))) - + (defsubst msb--choose-menu (buffer function-info-vector max-buffer-name-length) "Select the appropriate menu for BUFFER." ;; This is all side-effects, folks! @@ -990,9 +998,6 @@ variable `msb-menu-cond'." ;; adjust position (setq posX (- posX (funcall msb-horizontal-shift-function)) position (list (list posX posY) posWind)))) - ;; This `sit-for' magically makes the menu stay up if the mouse - ;; button is released within 0.1 second. - (sit-for 0 100) ;; Popup the menu (setq choice (x-popup-menu position msb--last-buffer-menu)) (cond @@ -1002,7 +1007,7 @@ variable `msb-menu-cond'." (mouse-select-buffer event)) ((and (numberp (car choice)) (null (cdr choice))) - (let ((msb--last-buffer-menu (nthcdr 3 (assq (car choice) + (let ((msb--last-buffer-menu (nthcdr 2 (assq (car choice) msb--last-buffer-menu)))) (mouse-select-buffer event))) ((while (numberp (car choice)) @@ -1141,7 +1146,7 @@ variable `msb-menu-cond'." 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'." - :global t + :global t :group 'msb (if msb-mode (progn (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers) @@ -1153,8 +1158,10 @@ different buffer menu using the function `msb'." (defun msb-unload-hook () (msb-mode 0)) +(add-hook 'msb-unload-hook 'msb-unload-hook) (provide 'msb) (eval-after-load "msb" '(run-hooks 'msb-after-load-hook 'msb-after-load-hooks)) +;;; arch-tag: 403f9e82-b92e-4e7a-a797-5d6d9b76da36 ;;; msb.el ends here