]> code.delx.au - gnu-emacs/blobdiff - lisp/buff-menu.el
(match-string-no-properties): Use substring-no-properties.
[gnu-emacs] / lisp / buff-menu.el
index c7bb7009241a8c995764c8da3175baaf8dc8a1c5..800f8693edae2917680605a851ef8ab46da0a135 100644 (file)
@@ -96,7 +96,8 @@ nil for default sorting by visited order.")
 
 (defconst Buffer-menu-buffer-column 4)
 
-(defvar Buffer-menu-mode-map nil "")
+(defvar Buffer-menu-mode-map nil
+  "Local keymap for `Buffer-menu-mode' buffers.")
 
 (if Buffer-menu-mode-map
     ()
@@ -199,8 +200,8 @@ Letters do not insert themselves; instead, they are commands.
                (error "No buffer named `%s'" name)
              nil))
       (or (and buf (buffer-name buf) buf)
-      (if error-if-non-existent-p
-         (error "No buffer on this line")
+         (if error-if-non-existent-p
+             (error "No buffer on this line")
            nil)))))
 \f
 (defun buffer-menu (&optional arg)
@@ -373,7 +374,9 @@ in the selected frame."
        (others ())
        tem)
     (goto-char (point-min))
-    (while (search-forward "\n>" nil t)
+    (unless Buffer-menu-use-header-line
+      (forward-line 1))
+    (while (re-search-forward "^>" nil t)
       (setq tem (Buffer-menu-buffer t))
       (let ((buffer-read-only nil))
        (delete-char -1)
@@ -554,19 +557,36 @@ For more information, see the function `buffer-menu'."
   (let* ((old-buffer (current-buffer))
         (standard-output standard-output)
         (mode-end (make-string (- Buffer-menu-mode-width 2) ? ))
-        ;; Fixme: This is wrong for left-hand scroll-bars.
-        (header (concat "CRM " (Buffer-menu-buffer+size "Buffer" "Size")
+        (header (concat (propertize "CRM " 'face 'fixed-pitch)
+                        (Buffer-menu-buffer+size "Buffer" "Size")
                         "  Mode" mode-end "File\n"))
         list desired-point name file mode)
+    (when Buffer-menu-use-header-line
+      (let ((spaces
+            (- (car (window-inside-edges))
+               (car (window-edges))))
+           (pos 0))
+       ;; Turn spaces in the header into stretch specs so they work
+       ;; regardless of the header-line face.
+       (while (string-match "[ \t]+" header pos)
+         (setq pos (match-end 0))
+         (put-text-property (match-beginning 0) pos 'display
+                            ;; Assume fixed-size chars
+                            (list 'space :align-to (+ spaces pos))
+                            header))
+       ;; Add the leading space
+       (setq header (concat (propertize (make-string (floor spaces) ? )
+                                        'display (list 'space :width spaces))
+                            header))))
     (save-excursion
       (set-buffer (get-buffer-create "*Buffer List*"))
       (setq buffer-read-only nil)
       (erase-buffer)
       (setq standard-output (current-buffer))
       (unless Buffer-menu-use-header-line
-       (insert header "--- ------")
-       (indent-to Buffer-menu-buffer+size-width)
-       (insert "----  ----" mode-end "----\n")
+       (insert header (propertize "---" 'face 'fixed-pitch) " ")
+       (insert (Buffer-menu-buffer+size "------" "----"))
+       (insert "  ----" mode-end "----\n")
        (put-text-property 1 (point) 'intangible t))
       (setq list
            (delq t
@@ -637,13 +657,12 @@ For more information, see the function `buffer-menu'."
        (princ "\n"))
       (Buffer-menu-mode)
       (when Buffer-menu-use-header-line
-       (set (make-local-variable 'Buffer-menu-header-line)
-            (concat " " header))
-       (setq header-line-format 'Buffer-menu-header-line))
+       (setq header-line-format header))
       ;; DESIRED-POINT doesn't have to be set; it is not when the
       ;; current buffer is not displayed for some reason.
       (and desired-point
           (goto-char desired-point))
       (current-buffer))))
 
+;;; arch-tag: e7dfcfc9-6cb2-46e4-bf55-8ef1936d83c6
 ;;; buff-menu.el ends here