emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/easymenu.el [lexbind]


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/easymenu.el [lexbind]
Date: Thu, 11 Nov 2004 23:44:57 -0500

Index: emacs/lisp/emacs-lisp/easymenu.el
diff -c emacs/lisp/emacs-lisp/easymenu.el:1.50.2.6 
emacs/lisp/emacs-lisp/easymenu.el:1.50.2.7
*** emacs/lisp/emacs-lisp/easymenu.el:1.50.2.6  Thu Nov  4 13:12:43 2004
--- emacs/lisp/emacs-lisp/easymenu.el   Fri Nov 12 04:21:19 2004
***************
*** 42,66 ****
    :version "20.3")
  
  (defsubst easy-menu-intern (s)
!   (if (stringp s)
!       (let ((copy (copy-sequence s))
!           (pos 0)
!           found)
!       ;; For each letter that starts a word, flip its case.
!       ;; This way, the usual convention for menu strings (capitalized)
!       ;; corresponds to the usual convention for menu item event types
!       ;; (all lower case).  It's a 1-1 mapping so causes no conflicts.
!       (while (setq found (string-match "\\<\\sw" copy pos))
!         (setq pos (match-end 0))
!         (unless (= (upcase (aref copy found))
!                    (downcase (aref copy found)))
!           (aset copy found
!                 (if (= (upcase (aref copy found))
!                        (aref copy found))
!                     (downcase (aref copy found))
!                   (upcase (aref copy found))))))
!        (intern copy))
!     s))
  
  ;;;###autoload
  (put 'easy-menu-define 'lisp-indent-function 'defun)
--- 42,48 ----
    :version "20.3")
  
  (defsubst easy-menu-intern (s)
!   (if (stringp s) (intern s) s))
  
  ;;;###autoload
  (put 'easy-menu-define 'lisp-indent-function 'defun)
***************
*** 242,250 ****
        (setq visible (or arg ''nil)))))
      (if (equal visible ''nil)
        nil                             ; Invisible menu entry, return nil.
!       (if (and visible (not (easy-menu-always-true visible)))
          (setq prop (cons :visible (cons visible prop))))
!       (if (and enable (not (easy-menu-always-true enable)))
          (setq prop (cons :enable (cons enable prop))))
        (if filter (setq prop (cons :filter (cons filter prop))))
        (if help (setq prop (cons :help (cons help prop))))
--- 224,232 ----
        (setq visible (or arg ''nil)))))
      (if (equal visible ''nil)
        nil                             ; Invisible menu entry, return nil.
!       (if (and visible (not (easy-menu-always-true-p visible)))
          (setq prop (cons :visible (cons visible prop))))
!       (if (and enable (not (easy-menu-always-true-p enable)))
          (setq prop (cons :enable (cons enable prop))))
        (if filter (setq prop (cons :filter (cons filter prop))))
        (if help (setq prop (cons :help (cons help prop))))
***************
*** 363,374 ****
                                  (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)))
                  (if (equal visible ''nil)
                      ;; Invisible menu item. Don't insert into keymap.
                      (setq remove t)
                    (setq prop (cons :visible (cons visible prop)))))))
!       (if (and active (not (easy-menu-always-true active)))
            (setq prop (cons :enable (cons active prop))))
        (if (and (or no-name cache-specified)
                 (or (null cache) (stringp cache) (vectorp cache)))
--- 345,356 ----
                                  (cons cmd keys))))
                   (setq cache-specified nil))
                 (if keys (setq prop (cons :keys (cons keys prop)))))
!             (if (and visible (not (easy-menu-always-true-p visible)))
                  (if (equal visible ''nil)
                      ;; Invisible menu item. Don't insert into keymap.
                      (setq remove t)
                    (setq prop (cons :visible (cons visible prop)))))))
!       (if (and active (not (easy-menu-always-true-p active)))
            (setq prop (cons :enable (cons active prop))))
        (if (and (or no-name cache-specified)
                 (or (null cache) (stringp cache) (vectorp cache)))
***************
*** 396,401 ****
--- 378,384 ----
  BEFORE can be either a string (menu item name) or a symbol
  \(the fake function key for the menu item).
  KEY does not have to be a symbol, and comparison is done with equal."
+   (if (symbolp menu) (setq menu (indirect-function menu)))
    (let ((inserted (null item))                ; Fake already inserted.
        tail done)
      (while (not done)
***************
*** 426,432 ****
  
  (defun easy-menu-name-match (name item)
    "Return t if NAME is the name of menu item ITEM.
! NAME can be either a string, or a symbol."
    (if (consp item)
        (if (symbolp name)
          (eq (car-safe item) name)
--- 409,416 ----
  
  (defun easy-menu-name-match (name item)
    "Return t if NAME is the name of menu item ITEM.
! NAME can be either a string, or a symbol.
! ITEM should be a keymap binding of the form (KEY . MENU-ITEM)."
    (if (consp item)
        (if (symbolp name)
          (eq (car-safe item) name)
***************
*** 436,445 ****
                  (error nil))          ;`item' might not be a proper list.
                ;; Also check the string version of the symbol name,
                ;; for backwards compatibility.
!               (eq (car-safe item) (intern name))
!               (eq (car-safe item) (easy-menu-intern name)))))))
  
! (defun easy-menu-always-true (x)
    "Return true if form X never evaluates to nil."
    (if (consp x) (and (eq (car x) 'quote) (cadr x))
      (or (eq x t) (not (symbolp x)))))
--- 420,428 ----
                  (error nil))          ;`item' might not be a proper list.
                ;; Also check the string version of the symbol name,
                ;; for backwards compatibility.
!               (eq (car-safe item) (intern name)))))))
  
! (defun easy-menu-always-true-p (x)
    "Return true if form X never evaluates to nil."
    (if (consp x) (and (eq (car x) 'quote) (cadr x))
      (or (eq x t) (not (symbolp x)))))
***************
*** 540,554 ****
        (easy-menu-define-key map (easy-menu-intern (car item))
                            (cdr item) before)
      (if (or (keymapp item)
!           (and (symbolp item) (keymapp (symbol-value item))))
        ;; Item is a keymap, find the prompt string and use as item name.
!       (let ((tail (easy-menu-get-map item nil)) name)
!         (if (not (keymapp item)) (setq item tail))
!         (while (and (null name) (consp (setq tail (cdr tail)))
!                     (not (keymapp tail)))
!           (if (stringp (car tail)) (setq name (car tail)) ; Got a name.
!             (setq tail (cdr tail))))
!         (setq item (cons name item))))
      (easy-menu-do-add-item map item before)))
  
  (defun easy-menu-item-present-p (map path name)
--- 523,532 ----
        (easy-menu-define-key map (easy-menu-intern (car item))
                            (cdr item) before)
      (if (or (keymapp item)
!           (and (symbolp item) (keymapp (symbol-value item))
!                (setq item (symbol-value item))))
        ;; Item is a keymap, find the prompt string and use as item name.
!       (setq item (cons (keymap-prompt item) item)))
      (easy-menu-do-add-item map item before)))
  
  (defun easy-menu-item-present-p (map path name)
***************
*** 591,600 ****
        (cons name item))                       ; Keymap or new menu format
       )))
  
! (defun easy-menu-get-map-look-for-name (name submap)
!   (while (and submap (not (easy-menu-name-match name (car submap))))
!     (setq submap (cdr submap)))
!   submap)
  
  (defun easy-menu-get-map (map path &optional to-modify)
    "Return a sparse keymap in which to add or remove an item.
--- 569,592 ----
        (cons name item))                       ; Keymap or new menu format
       )))
  
! (defun easy-menu-lookup-name (map name)
!   "Lookup menu item NAME in keymap MAP.
! Like `lookup-key' except that NAME is not an array but just a single key
! and that NAME can be a string representing the menu item's name."
!   (or (lookup-key map (vector (easy-menu-intern name)))
!       (when (stringp name)
!       ;; `lookup-key' failed and we have a menu item name: look at the
!       ;; actual menu entries's names.
!       (catch 'found
!         (map-keymap (lambda (key item)
!                       (if (condition-case nil (member name item)
!                             (error nil))
!                           ;; Found it!!  Look for it again with
!                           ;; `lookup-key' so as to handle inheritance and
!                           ;; to extract the actual command/keymap bound to
!                           ;; `name' from the item (via get_keyelt).
!                           (throw 'found (lookup-key map (vector key)))))
!                     map)))))
  
  (defun easy-menu-get-map (map path &optional to-modify)
    "Return a sparse keymap in which to add or remove an item.
***************
*** 605,638 ****
  In some cases we use that to select between the local and global maps."
    (setq map
        (catch 'found
!         (let* ((key (vconcat (unless map '(menu-bar))
!                              (mapcar 'easy-menu-intern path)))
!                (maps (mapcar (lambda (map)
!                                (setq map (lookup-key map key))
!                                (while (and (symbolp map) (keymapp map))
!                                  (setq map (symbol-function map)))
!                                map)
!                              (if map
!                                  (list (if (and (symbolp map)
!                                                 (not (keymapp map)))
!                                            (symbol-value map) map))
!                                (current-active-maps)))))
            ;; Prefer a map that already contains the to-be-modified entry.
            (when to-modify
              (dolist (map maps)
!               (when (and (keymapp map)
!                          (easy-menu-get-map-look-for-name to-modify map))
                  (throw 'found map))))
            ;; Use the first valid map.
!           (dolist (map maps)
!             (when (keymapp map)
!               (throw 'found map)))
            ;; Otherwise, make one up.
            ;; Hardcoding current-local-map is lame, but it's difficult
            ;; to know what the caller intended for us to do ;-(
            (let* ((name (if path (format "%s" (car (reverse path)))))
                   (newmap (make-sparse-keymap name)))
!             (define-key (or map (current-local-map)) key
                (if name (cons name newmap) newmap))
              newmap))))
    (or (keymapp map) (error "Malformed menu in easy-menu: (%s)" map))
--- 597,630 ----
  In some cases we use that to select between the local and global maps."
    (setq map
        (catch 'found
!         (if (and map (symbolp map) (not (keymapp map)))
!             (setq map (symbol-value map)))
!         (let ((maps (if map (list map) (current-active-maps))))
!           ;; Look for PATH in each map.
!           (unless map (push 'menu-bar path))
!           (dolist (name path)
!             (setq maps
!                   (delq nil (mapcar (lambda (map)
!                                       (setq map (easy-menu-lookup-name
!                                                  map name))
!                                       (and (keymapp map) map))
!                                     maps))))
! 
            ;; Prefer a map that already contains the to-be-modified entry.
            (when to-modify
              (dolist (map maps)
!               (when (easy-menu-lookup-name map to-modify)
                  (throw 'found map))))
            ;; Use the first valid map.
!           (when maps (throw 'found (car maps)))
! 
            ;; Otherwise, make one up.
            ;; Hardcoding current-local-map is lame, but it's difficult
            ;; to know what the caller intended for us to do ;-(
            (let* ((name (if path (format "%s" (car (reverse path)))))
                   (newmap (make-sparse-keymap name)))
!             (define-key (or map (current-local-map))
!               (apply 'vector (mapcar 'easy-menu-intern path))
                (if name (cons name newmap) newmap))
              newmap))))
    (or (keymapp map) (error "Malformed menu in easy-menu: (%s)" map))
***************
*** 640,644 ****
  
  (provide 'easymenu)
  
! ;;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a
  ;;; easymenu.el ends here
--- 632,636 ----
  
  (provide 'easymenu)
  
! ;; arch-tag: 2a04020d-90d2-476d-a7c6-71e072007a4a
  ;;; easymenu.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]