diff lisp/emacs-lisp/easymenu.el @ 6600:f75ac1f3d99c

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Wed, 30 Mar 1994 18:57:29 +0000
parents 1d9da8160357
children 3063675a5424
line wrap: on
line diff
--- a/lisp/emacs-lisp/easymenu.el	Wed Mar 30 18:51:54 1994 +0000
+++ b/lisp/emacs-lisp/easymenu.el	Wed Mar 30 18:57:29 1994 +0000
@@ -1,8 +1,9 @@
 ;;; easymenu.el --- support the easymenu interface for defining a menu.
 
+;; Copyright (C) 1994 Free Software Foundation, Inc.
+
 ;; Keywords: emulations
-
-;; Copyright (C) 1994 Free Software Foundation, Inc.
+;; Author: rms
 
 ;; This file is part of GNU Emacs.
 
@@ -27,22 +28,26 @@
 ;;; 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 @@
 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 @@
 	       (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 @@
       (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