changeset 57883:4e4baf7bbf77

(easy-menu-intern): Don't downcase; rather, case-flip the first letter of each word.
author Richard M. Stallman <rms@gnu.org>
date Tue, 02 Nov 2004 09:26:28 +0000
parents 15493a81cb78
children 9fdca2852881
files lisp/emacs-lisp/easymenu.el
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/easymenu.el	Tue Nov 02 09:23:34 2004 +0000
+++ b/lisp/emacs-lisp/easymenu.el	Tue Nov 02 09:26:28 2004 +0000
@@ -42,7 +42,25 @@
   :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)