X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=lisp%2Feasymenu.el;h=906b51d7c2aedc9034f87cd8c28d8efb992b07da;hp=3bd9f34c70cbae84ae285788af4dee686825e8d7;hb=a5f466de30a3e927ed1146b0c7e3870e71465c8f;hpb=8b0299e2a613ab99d6e4dc2423e77ff93b715adc diff --git a/lisp/easymenu.el b/lisp/easymenu.el index 3bd9f34..906b51d 100644 --- a/lisp/easymenu.el +++ b/lisp/easymenu.el @@ -23,7 +23,9 @@ ;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ;; 02111-1307, USA. -;;; Synched up with: Not synched with FSF. +;;; Synched up with: Not synched with FSF but coordinated with the FSF +;;; easymenu maintor for compatability with FSF 20.4. +;;; Please: Coordinate changes with Inge Frick ;; Commentary: @@ -63,6 +65,15 @@ ;; - Function: easy-menu-remove MENU ;; Remove MENU from the current menubar. +;; - Function: easy-menu-add-item +;; Add item or submenu to existing menu + +;; - Function: easy-menu-item-present-p +;; Locate item + +;; - Function: easy-menu-remove-item +;; Delete item from menu. + ;; Emacs 19 never uses `easy-menu-add' or `easy-menu-remove', menus ;; automatically appear and disappear when the keymaps specified by ;; the MAPS argument to `easy-menu-define' are activated. @@ -137,9 +148,9 @@ A menu item can be a list. It is treated as a submenu. The first element should be the submenu name. That's used as the menu item in the top-level menu. The cdr of the submenu list is a list of menu items, as above." - (` (progn - (defvar (, symbol) nil (, doc)) - (easy-menu-do-define (quote (, symbol)) (, maps) (, doc) (, menu))))) + `(progn + (defvar ,symbol nil ,doc) + (easy-menu-do-define (quote ,symbol) ,maps ,doc ,menu))) (defun easy-menu-do-define (symbol maps doc menu) (if (featurep 'menubar) @@ -200,6 +211,50 @@ is a list of menu items, as above." (assoc (car menu) current-menubar) (delete-menu-item (list (car menu))))))) +(defsubst easy-menu-normalize (menu) + (if (symbolp menu) + (symbol-value menu) + menu)) + +(defun easy-menu-add-item (menu path item &optional before) + "At the end of the submenu of MENU with path PATH add ITEM. +If ITEM is already present in this submenu, then this item will be changed. +otherwise ITEM will be added at the end of the submenu, unless the optional +argument BEFORE is present, in which case ITEM will instead be added +before the item named BEFORE. +MENU is either a symbol, which have earlier been used as the first +argument in a call to `easy-menu-define', or the value of such a symbol +i.e. a menu, or nil which stands for the current menubar. +PATH is a list of strings for locating the submenu where ITEM is to be +added. If PATH is nil, MENU itself is used. Otherwise, the first +element should be the name of a submenu directly under MENU. This +submenu is then traversed recursively with the remaining elements of PATH. +ITEM is either defined as in `easy-menu-define', a menu defined earlier +by `easy-menu-define' or `easy-menu-create-menu' or an item returned +from `easy-menu-item-present-p' or `easy-menu-remove-item'." + (add-menu-button path item before (easy-menu-normalize menu))) + +(defun easy-menu-item-present-p (menu path name) + "In submenu of MENU with path PATH, return true iff item NAME is present. +MENU and PATH are defined as in `easy-menu-add-item'. +NAME should be a string, the name of the element to be looked for. + +The return value can be used as as an argument to `easy-menu-add-item'." + (car (find-menu-item (or (easy-menu-normalize menu) current-menubar) + (append path (list name))))) + +(defun easy-menu-remove-item (menu path name) + "From submenu of MENU with path PATH remove item NAME. +MENU and PATH are defined as in `easy-menu-add-item'. +NAME should be a string, the name of the element to be removed. + +The return value can be used as as an argument to `easy-menu-add-item'." + (delete-menu-item (append path (list name)) + (easy-menu-normalize menu))) + + + + ;; Think up a good title for the menu. Take the major-mode of the ;; buffer, strip the -mode part, convert hyphens to spaces, and ;; capitalize it.