]> git.eshelyaron.com Git - emacs.git/commitdiff
(easy-menu-intern):
authorRichard M. Stallman <rms@gnu.org>
Tue, 2 Nov 2004 09:26:28 +0000 (09:26 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 2 Nov 2004 09:26:28 +0000 (09:26 +0000)
Don't downcase; rather, case-flip the first letter of each word.

lisp/emacs-lisp/easymenu.el

index dbd7194f50a4a9fea178355dc3b9c489447a40a7..e039b80aee5b2db94f9a16768f8a9c83c8c4885d 100644 (file)
@@ -42,7 +42,25 @@ menus, turn this variable off, otherwise it is probably better to keep it on."
   :version "20.3")
 
 (defsubst easy-menu-intern (s)
-  (if (stringp s) (intern (downcase s)) 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)