]> git.eshelyaron.com Git - emacs.git/commitdiff
(mouse-buffer-menu): Pass mode-name through format-mode-line because it
authorSam Steingold <sds@gnu.org>
Mon, 6 Aug 2007 17:19:26 +0000 (17:19 +0000)
committerSam Steingold <sds@gnu.org>
Mon, 6 Aug 2007 17:19:26 +0000 (17:19 +0000)
may be a list, e.g., (sgml-xml-mode "XML" "SGML"), and not a string.

lisp/ChangeLog
lisp/mouse.el

index 92b0673c1c6d0409ce11f0dabd03de1ae7eb31d5..f2bde13f0be1316bff990f6cdfcebc76846b5c64 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-06  Sam Steingold  <sds@gnu.org>
+
+       * mouse.el (mouse-buffer-menu): Pass mode-name through
+       format-mode-line because it may be a list,
+       e.g., (sgml-xml-mode "XML" "SGML"), and not a string.
+
 2007-08-06  Vinicius Jose Latorre  <viniciusig@ig.com.br>
 
        * printing.el (pr-update-menus): Docstring fix.
index cbbaf73fcbbfbed46a8198a15497f58d4f3d1c9b..27c5dd901f795903d6b77ae78bd7e4f2ae640253 100644 (file)
@@ -1814,27 +1814,23 @@ and selects that window."
   (mouse-minibuffer-check event)
   (let ((buffers (buffer-list))  alist menu split-by-major-mode sum-of-squares)
     ;; Make an alist of elements that look like (MENU-ITEM . BUFFER).
-    (let ((tail buffers))
-      (while tail
-       ;; Divide all buffers into buckets for various major modes.
-       ;; Each bucket looks like (MODE NAMESTRING BUFFERS...).
-       (with-current-buffer (car tail)
-         (let* ((adjusted-major-mode major-mode) elt)
-           (let ((tail mouse-buffer-menu-mode-groups))
-             (while tail
-               (if (string-match (car (car tail)) mode-name)
-                   (setq adjusted-major-mode (cdr (car tail))))
-               (setq tail (cdr tail))))
-           (setq elt (assoc adjusted-major-mode split-by-major-mode))
-           (if (null elt)
-               (setq elt (list adjusted-major-mode
-                               (if (stringp adjusted-major-mode)
-                                   adjusted-major-mode
-                                 mode-name))
-                     split-by-major-mode (cons elt split-by-major-mode)))
-           (or (memq (car tail) (cdr (cdr elt)))
-               (setcdr (cdr elt) (cons (car tail) (cdr (cdr elt)))))))
-       (setq tail (cdr tail))))
+    (dolist (buf buffers)
+      ;; Divide all buffers into buckets for various major modes.
+      ;; Each bucket looks like (MODE NAMESTRING BUFFERS...).
+      (with-current-buffer buf
+        (let* ((adjusted-major-mode major-mode) elt)
+          (dolist (group mouse-buffer-menu-mode-groups)
+            (when (string-match (car group) (format-mode-line mode-name))
+              (setq adjusted-major-mode (cdr group))))
+          (setq elt (assoc adjusted-major-mode split-by-major-mode))
+          (unless elt
+            (setq elt (list adjusted-major-mode
+                            (if (stringp adjusted-major-mode)
+                                adjusted-major-mode
+                                mode-name))
+                  split-by-major-mode (cons elt split-by-major-mode)))
+          (or (memq buf (cdr (cdr elt)))
+              (setcdr (cdr elt) (cons buf (cdr (cdr elt))))))))
     ;; Compute the sum of squares of sizes of the major-mode buckets.
     (let ((tail split-by-major-mode))
       (setq sum-of-squares 0)