From 7a78e19f24ff07f5e57c63758ee4a98dd61453fb Mon Sep 17 00:00:00 2001 From: Karl Fogel Date: Thu, 7 Mar 2013 16:33:22 -0600 Subject: [PATCH] * bookmark.el: Display the bookmark list header similarly to the buffer list header (see `list-buffers'), where the default is now an immovable/immutable header line. Patch by Matthias Meulien with a few tweaks by me. (bookmark-bmenu-use-header-line): New variable. (bookmark-bmenu-inline-header-height): New name for `bookmark-bmenu-header-height', to avoid confusion with the code for the new immovable header. All references changed. (bookmark-bmenu-set-header): New function. (bookmark-bmenu-list, bookmark-bmenu-toggle-filenames): Conditionalize header construction accordingly. (bookmark-bmenu-ensure-position): Conditionalize the skipping of the inline header height. (bookmark-bmenu-show-filenames, bookmark-bmenu-hide-filenames): Conditionalize the skipping of the inline header height. --- lisp/ChangeLog | 19 +++++++++++++++++ lisp/bookmark.el | 53 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 709242e6006..f1ca958044b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,22 @@ +2013-03-07 Karl Fogel + + * bookmark.el: Display the bookmark list header similarly to the + buffer list header (see `list-buffers'), where the default is now + an immovable/immutable header line. Patch by Matthias Meulien + with a few tweaks by me. + + (bookmark-bmenu-use-header-line): New variable. + (bookmark-bmenu-inline-header-height): New name for + `bookmark-bmenu-header-height', to avoid confusion with the code + for the new immovable header. All references changed. + (bookmark-bmenu-set-header): New function. + (bookmark-bmenu-list, bookmark-bmenu-toggle-filenames): + Conditionalize header construction accordingly. + (bookmark-bmenu-ensure-position): Conditionalize the skipping of + the inline header height. + (bookmark-bmenu-show-filenames, bookmark-bmenu-hide-filenames): + Conditionalize the skipping of the inline header height. + 2013-03-07 Dmitry Gutov * progmodes/js.el (js--multi-line-declaration-indentation): Merge diff --git a/lisp/bookmark.el b/lisp/bookmark.el index da6ffb38452..fd6ae217bf8 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -129,9 +129,15 @@ recently set ones come first, oldest ones come last)." :type 'boolean :group 'bookmark) +(defcustom bookmark-bmenu-use-header-line t + "Non-nil means to use an immovable header line, as opposed to inline +text at the top of the buffer." + :type 'boolean + :group 'bookmark) -(defconst bookmark-bmenu-header-height 2 - "Number of lines used for the *Bookmark List* header.") +(defconst bookmark-bmenu-inline-header-height 2 + "Number of lines used for the *Bookmark List* header +\(only significant when `bookmark-bmenu-use-header-line' is nil\).") (defconst bookmark-bmenu-marks-width 2 "Number of columns (chars) used for the *Bookmark List* marks column, @@ -1552,7 +1558,8 @@ deletion, or > if it is flagged for displaying." (set-buffer buf))) (let ((inhibit-read-only t)) (erase-buffer) - (insert "% Bookmark\n- --------\n") + (if (not bookmark-bmenu-use-header-line) + (insert "% Bookmark\n- --------\n")) (add-text-properties (point-min) (point) '(font-lock-face bookmark-menu-heading)) (dolist (full-record (bookmark-maybe-sort-alist)) @@ -1577,8 +1584,10 @@ deletion, or > if it is flagged for displaying." (insert "\n"))) (set-buffer-modified-p (not (= bookmark-alist-modification-count 0))) (goto-char (point-min)) - (forward-line 2) (bookmark-bmenu-mode) + (if bookmark-bmenu-use-header-line + (bookmark-bmenu-set-header) + (forward-line bookmark-bmenu-inline-header-height)) (if bookmark-bmenu-toggle-filenames (bookmark-bmenu-toggle-filenames t)))) @@ -1587,7 +1596,25 @@ deletion, or > if it is flagged for displaying." ;;;###autoload (defalias 'edit-bookmarks 'bookmark-bmenu-list) - +(defun bookmark-bmenu-set-header () + "Sets the immutable header line." + (let ((header (concat "%% " "Bookmark"))) + (when bookmark-bmenu-toggle-filenames + (setq header (concat header + (make-string (- bookmark-bmenu-file-column + (- (length header) 3)) ?\s) + "File"))) + (let ((pos 0)) + (while (string-match "[ \t\n]+" header pos) + (setq pos (match-end 0)) + (put-text-property (match-beginning 0) pos 'display + (list 'space :align-to (- pos 1)) + header))) + (put-text-property 0 2 'face 'fixed-pitch header) + (setq header (concat (propertize " " 'display '(space :align-to 0)) + header)) + ;; Code derived from `buff-menu.el'. + (setq header-line-format header))) (define-derived-mode bookmark-bmenu-mode special-mode "Bookmark Menu" "Major mode for editing a list of bookmarks. @@ -1640,7 +1667,9 @@ Optional argument SHOW means show them unconditionally." (setq bookmark-bmenu-toggle-filenames nil)) (t (bookmark-bmenu-show-filenames) - (setq bookmark-bmenu-toggle-filenames t)))) + (setq bookmark-bmenu-toggle-filenames t))) + (when bookmark-bmenu-use-header-line + (bookmark-bmenu-set-header))) (defun bookmark-bmenu-show-filenames (&optional force) @@ -1653,7 +1682,8 @@ mainly for debugging, and should not be necessary in normal use." (save-excursion (save-window-excursion (goto-char (point-min)) - (forward-line 2) + (if (not bookmark-bmenu-use-header-line) + (forward-line bookmark-bmenu-inline-header-height)) (setq bookmark-bmenu-hidden-bookmarks ()) (let ((inhibit-read-only t)) (while (< (point) (point-max)) @@ -1681,7 +1711,8 @@ mainly for debugging, and should not be necessary in normal use." (with-buffer-modified-unmodified (save-excursion (goto-char (point-min)) - (forward-line 2) + (if (not bookmark-bmenu-use-header-line) + (forward-line bookmark-bmenu-inline-header-height)) (setq bookmark-bmenu-hidden-bookmarks (nreverse bookmark-bmenu-hidden-bookmarks)) (let ((inhibit-read-only t)) @@ -1705,9 +1736,11 @@ mainly for debugging, and should not be necessary in normal use." "If point is not on a bookmark line, move it to one. If before the first bookmark line, move to the first; if after the last full line, move to the last full line. The return value is undefined." - (cond ((< (count-lines (point-min) (point)) bookmark-bmenu-header-height) + (cond ((and (not bookmark-bmenu-use-header-line) + (< (count-lines (point-min) (point)) + bookmark-bmenu-inline-header-height)) (goto-char (point-min)) - (forward-line bookmark-bmenu-header-height)) + (forward-line bookmark-bmenu-inline-header-height)) ((and (bolp) (eobp)) (beginning-of-line 0)))) -- 2.39.2