emacs-devel
[Top][All Lists]
Advanced

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

Re: Attempt to modify read-only value


From: Miles Bader
Subject: Re: Attempt to modify read-only value
Date: 23 Apr 2002 17:43:17 +0900

Juanma Barranquero <address@hidden> writes:
> I'm getting "attempt to modify read-only value" while bootstraping.

I've fixed it in CVS:


2002-04-23  Miles Bader  <address@hidden>

        * menu-bar.el (menu-bar-update-buffers): Don't use constant lists
        for command menu entries, since the low-level menu code modifies
        them.  Cache the resulting list.
        (menu-bar-buffers-menu-command-entries): New variable.

Index: menu-bar.el
===================================================================
RCS file: /cvs/emacs/lisp/menu-bar.el,v
retrieving revision 1.207
retrieving revision 1.208
diff -u -p -r1.207 -r1.208
--- menu-bar.el 23 Apr 2002 05:01:50 -0000      1.207
+++ menu-bar.el 23 Apr 2002 08:34:57 -0000      1.208
@@ -1282,6 +1282,9 @@ key (or menu-item)"))
           file))
        (car elt)))
 
+;; Used to cache the menu entries for commands in the Buffers menu
+(defvar menu-bar-buffers-menu-command-entries nil)
+
 (defun menu-bar-update-buffers (&optional force)
   ;; If user discards the Buffers item, play along.
   (and (lookup-key (current-global-map) [menu-bar buffer])
@@ -1357,20 +1360,27 @@ key (or menu-item)"))
                          `((frames-separator "--")
                            (frames menu-item "Frames" ,frames-menu))))))
 
-        ;; Add in some normal commands at the end of the menu
+        ;; Add in some normal commands at the end of the menu.  We use
+        ;; the copy cached in `menu-bar-buffers-menu-command-entries'
+        ;; if it's been set already.  Note that we can't use constant
+        ;; lists for the menu-entries, because the low-level menu-code
+        ;; modifies them.
+        (unless menu-bar-buffers-menu-command-entries
+          (setq menu-bar-buffers-menu-command-entries
+                (list '(command-separator "--")
+                      (list 'select-named-buffer
+                            'menu-item
+                            "Select Named Buffer..."
+                            'switch-to-buffer
+                            :help "Prompt for a buffer name, and select that 
buffer in the current window")
+                      (list 'list-all-buffers
+                            'menu-item
+                            "List All Buffers"
+                            'list-buffers
+                            :help "Pop up a window listing all emacs buffers"
+                            ))))
         (setq buffers-menu
-              (nconc buffers-menu
-                     '((command-separator "--")
-                       (select-named-buffer
-                        menu-item
-                        "Select Named Buffer..."
-                        switch-to-buffer
-                        :help "Prompt for a buffer name, and select that 
buffer in the current window")
-                       (list-all-buffers
-                        menu-item
-                        "List All Buffers"
-                        list-buffers
-                        :help "Pop up a window listing all emacs buffers"))))
+              (nconc buffers-menu menu-bar-buffers-menu-command-entries))
 
         (setq buffers-menu (cons 'keymap (cons "Select Buffer" buffers-menu)))
         (define-key (current-global-map) [menu-bar buffer]


-Miles
-- 
80% of success is just showing up.  --Woody Allen



reply via email to

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