changeset 42911:4e96369656bc

(mode-line-copied-mode-name): New variable. (mode-line-mode-name): Don't modify mode-name itself! Instead, make a copy and reuse it.
author Richard M. Stallman <rms@gnu.org>
date Tue, 22 Jan 2002 22:46:51 +0000
parents 82930a88c1dd
children b6c4b1fbd8bc
files lisp/bindings.el
diffstat 1 files changed, 10 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/bindings.el	Tue Jan 22 21:05:28 2002 +0000
+++ b/lisp/bindings.el	Tue Jan 22 22:46:51 2002 +0000
@@ -316,28 +316,19 @@
       (if binding
 	  (call-interactively binding)))))
 
+(defvar mode-line-copied-mode-name nil
+  "A copy of `mode-name', with `help-echo' and `local-map' properties added.")
+
 (defun mode-line-mode-name () "\
 Return a string to display in the mode line for the current mode name."
   (when (stringp mode-name)
-    (let ((local-map (get-text-property 0 'local-map mode-name))
-	  (help-echo (get-text-property 0 'help-echo mode-name)))
-      ;; For correctness, we shouldn't modify mode-name.  But adding some
-      ;; text-properties to those mode-name strings can't hurt, really, and
-      ;; furthermore, by doing it in-place, we make sure that we don't need to
-      ;; do the work over and over and over and ....  -stef
-      (unless (and local-map help-echo)
-	(setq mode-name (copy-sequence mode-name)))
-      ;; Add `local-map' property if there isn't already one.
-      (unless (or local-map
-		  (next-single-property-change 0 'local-map mode-name))
-	(put-text-property 0 (length mode-name)
-			   'local-map mode-line-minor-mode-keymap mode-name)
-	;; Add `help-echo' property if there isn't already one.
-	(unless (or help-echo
-		    (next-single-property-change 0 'help-echo mode-name))
-	  (put-text-property 0 (length mode-name) 'help-echo
-			     "mouse-3: minor mode menu" mode-name)))))
-  mode-name)
+    (if (equal mode-name mode-line-copied-mode-name)
+	mode-line-copied-mode-name
+      (setq mode-line-copied-mode-name
+	    (propertize mode-name
+			'local-map mode-line-minor-mode-keymap 
+			'help-echo "mouse-3: minor mode menu"))))
+  mode-line-copied-mode-name)
 
 (defmacro bound-and-true-p (var)
   "Return the value of symbol VAR if it is bound, else nil."