(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
()
(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)
(interactive)
(save-excursion
(goto-char (point-min))
- (forward-line 1)
+ (unless Buffer-menu-use-header-line
+ (forward-line 1))
(while (re-search-forward "^..S" nil t)
(let ((modp nil))
(save-excursion
(insert (if modp ?* ? ))))))
(save-excursion
(goto-char (point-min))
- (forward-line 1)
+ (unless Buffer-menu-use-header-line
+ (forward-line 1))
(let ((buff-menu-buffer (current-buffer))
(buffer-read-only nil))
- (while (search-forward "\nD" nil t)
+ (while (re-search-forward "^D" nil t)
(forward-char -1)
(let ((buf (Buffer-menu-buffer nil)))
(or (eq buf nil)
(progn (delete-char 1)
(insert ? ))
(delete-region (point) (progn (forward-line 1) (point)))
- (forward-char -1)))))))
+ (unless (bobp)
+ (forward-char -1))))))))
(defun Buffer-menu-select ()
"Select this line's buffer; also display buffers marked with `>'.
(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)
(let* ((old-buffer (current-buffer))
(standard-output standard-output)
(mode-end (make-string (- Buffer-menu-mode-width 2) ? ))
- (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
+ ;; FIXME: This is using the settings of the current frame rather
+ ;; than the frame into which the buffer will be displayed.
+ (/ (+ 0.0 (or (frame-parameter nil 'left-fringe) 0)
+ (or (if (eq (frame-parameter nil 'vertical-scroll-bars)
+ 'left)
+ (frame-parameter nil 'scroll-bar-width))
+ 0))
+ (frame-char-width)))
+ (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)
(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