]> git.eshelyaron.com Git - emacs.git/commitdiff
*** empty log message ***
authorRichard M. Stallman <rms@gnu.org>
Wed, 30 Mar 1994 18:57:29 +0000 (18:57 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 30 Mar 1994 18:57:29 +0000 (18:57 +0000)
lisp/emacs-lisp/easymenu.el

index 0a489840133fa1ba5673f93b4814b4269f0ae561..90b4f55fe09ec27c8079edd0259b2c86875b7890 100644 (file)
@@ -1,9 +1,10 @@
 ;;; easymenu.el --- support the easymenu interface for defining a menu.
 
-;; Keywords: emulations
-
 ;; Copyright (C) 1994 Free Software Foundation, Inc.
 
+;; Keywords: emulations
+;; Author: rms
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;;; Code:
 
 ;;;###autoload
-(defun easy-menu-define (symbol maps doc menu)
+(defmacro easy-menu-define (symbol maps doc menu)
   "Define a menu bar submenu in maps MAPS, according to MENU.
 The arguments SYMBOL and DOC are ignored; they are present for
-compatibility only.  In other Emacs versions they may be used
-as a variable to hold the menu data, and a doc string for that variable.
+compatibility only.  SYMBOL is not evaluated.  In other Emacs versions
+these arguments may be used as a variable to hold the menu data, and a
+doc string for that variable.
 
 The first element of MENU must be a string.  It is the menu bar item name.
 The rest of the elements are menu items.
 
-A menu item is usually a vector of three elements:  [NAME CALLBACK t]
+A menu item is usually a vector of three elements:  [NAME CALLBACK ENABLE]
 
 NAME is a string--the menu item name.
 
 CALLBACK is a command to run when the item is chosen,
 or a list to evaluate when the item is chosen.
 
+ENABLE is a symbol; if its value is non-nil, the item is enabled
+for selection.
+
 A menu item can be a string.  Then that string appears in the menu as
 unselectable text.  A string consisting solely of hyphens is displayed
 as a solid horizontal line.
@@ -51,12 +56,14 @@ 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."
-  (or (keymapp maps) (setq maps (list maps)))
-  (let ((keymap (easy-menu-keymap (car menu) (cdr menu))))
-    (while maps
-      (define-key (car maps) (vector 'menu-bar (intern (car menu)))
-       (cons (car menu) keymap))
-      (setq maps (cdr maps)))))
+  (` (let* ((maps (, maps))
+           (menu (, menu))
+           (keymap (easy-menu-keymap (car menu) (cdr menu))))
+       (and (keymapp maps) (setq maps (list maps)))
+       (while maps
+        (define-key (car maps) (vector 'menu-bar (intern (car menu)))
+          (cons (car menu) keymap))
+        (setq maps (cdr maps))))))
 
 (defvar easy-menu-item-count 0)
 
@@ -76,16 +83,15 @@ is a list of menu items, as above."
               (setq name (if (string-match "^-+$" item) "" item)))
              ((consp item)
               (setq command (easy-menu-keymap (car item) (cdr item)))
-              (setq name (car item)))
+              (setq name (concat (car item) "...")))
              ((vectorp item)
               (setq command (make-symbol (format "menu-function-%d"
                                                  easy-menu-item-count)))
-              (setq enabler (make-symbol (format "menu-function-%d-enabler"
-                                                 easy-menu-item-count)))
               (setq easy-menu-item-count (1+ easy-menu-item-count))
-              (put command 'menu-enable enabler)
-              (set enabler (aref item 2))
+              (put command 'menu-enable (aref item 2))
               (setq name (aref item 0))               
+              (if (keymapp callback)
+                  (setq name (concat name " ...")))
               (if (symbolp callback)
                   (fset command callback)
                 (fset command (list 'lambda () '(interactive) callback)))))
@@ -98,6 +104,10 @@ is a list of menu items, as above."
       (setq menu-items (cdr menu-items)))
     menu))
 
+(defmacro easy-menu-remove (menu))
+
+(defmacro easy-menu-add (menu &optional map))
+
 (provide 'easymenu)
 
 ;;; easymenu.el ends here