From 545128a805d40f8ecb8d91bd651ae1d2c1bb9d21 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 23 May 1998 04:26:39 +0000 Subject: [PATCH] (easy-menu-do-add-item): Small simplifications. (easy-menu-precalculate-equivalent-keybindings): New customization variable. (easy-menu-add): Precalculate key bindings if `easy-menu-precalculate-equivalent-keybindings' is on. --- lisp/emacs-lisp/easymenu.el | 41 +++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el index 4d553f10965..9f175340b9e 100644 --- a/lisp/emacs-lisp/easymenu.el +++ b/lisp/emacs-lisp/easymenu.el @@ -30,6 +30,17 @@ ;;; Code: +(defcustom easy-menu-precalculate-equivalent-keybindings t + "Determine when equivalent key bindings are computed for easy-menu menus. +It can take some time to calculate the equivalent key bindings that are shown +in a menu. If the variable is on, then this calculation gives a (maybe +noticeable) delay when a mode is first entered. If the variable is off, then +this delay will come when a menu is displayed the first time. If you never use +menus, turn this variable off, otherwise it is probably better to keep it on." + :type 'boolean + :group 'menu + :version "20.3") + ;;;###autoload (defmacro easy-menu-define (symbol maps doc menu) "Define a menu bar submenu in maps MAPS, according to MENU. @@ -198,17 +209,17 @@ shadow\\(Double\\)?Etched\\(In\\|Out\\)\\(Dash\\)?\\)\\)$" (setq prop (cddr prop))) (setq command (symbol-function command))))) ((vectorp item) - (let ((active (if (> (length item) 2) (or (aref item 2) ''nil) t)) - (no-name (not (symbolp (setq command (aref item 1))))) - cache cache-specified - (count 2)) + (let* ((ilen (length item)) + (active (if (> ilen 2) (or (aref item 2) ''nil) t)) + (no-name (not (symbolp (setq command (aref item 1))))) + cache cache-specified) (setq label (setq name (aref item 0))) (if no-name (setq command (easy-menu-make-symbol command))) (if (and (symbolp active) (= ?: (aref (symbol-name active) 0))) (let ((count 2) keyword arg suffix visible style selected keys) (setq active nil) - (while (> (length item) count) + (while (> ilen count) (setq keyword (aref item count)) (setq arg (aref item (1+ count))) (setq count (+ 2 count)) @@ -241,11 +252,11 @@ shadow\\(Double\\)?Etched\\(In\\|Out\\)\\(Dash\\)?\\)\\)$" (substring keys (match-end 1)))) (cmd (intern (substring keys (match-beginning 2) (match-end 2))))) + (setq keys (and (or prefix postfix) + (cons prefix postfix))) (setq keys - (and (or prefix postfix (not (eq command cmd))) - (cons cmd - (and (or prefix postfix) - (cons prefix postfix)))))) + (and (or keys (not (eq command cmd))) + (cons cmd keys)))) (setq cache-specified nil)) (if keys (setq prop (cons :keys (cons keys prop))))) (if (and visible (not (easy-menu-always-true visible))) @@ -333,10 +344,18 @@ to implement dynamic menus." ;; XEmacs needs the following two functions to add and remove menus. ;; In Emacs this is done automatically when switching keymaps, so -;; here these functions are noops. +;; here easy-menu-remove is a noop and easy-menu-add only precalculates +;; equivalent keybindings (if easy-menu-precalculate-equivalent-keybindings +;; is on). (defun easy-menu-remove (menu)) -(defun easy-menu-add (menu &optional map)) +(defun easy-menu-add (menu &optional map) + "Maybe precalculate equivalent key bindings. +Do it if `easy-menu-precalculate-equivalent-keybindings' is on," + (when easy-menu-precalculate-equivalent-keybindings + (if (and (symbolp menu) (not (keymapp menu)) (boundp menu)) + (setq menu (symbol-value menu))) + (if (keymapp menu) (x-popup-menu nil menu)))) (defun easy-menu-add-item (menu path item &optional before) "At the end of the submenu of MENU with path PATH add ITEM. -- 2.39.2