1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-26 10:49:33 +00:00

* 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
<orontee {_AT_} gmail.com> 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.
This commit is contained in:
Karl Fogel 2013-03-07 16:33:22 -06:00
parent 94e48c7d75
commit 7a78e19f24
2 changed files with 62 additions and 10 deletions

View File

@ -1,3 +1,22 @@
2013-03-07 Karl Fogel <kfogel@red-bean.com>
* 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
<orontee {_AT_} gmail.com> 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 <dgutov@yandex.ru>
* progmodes/js.el (js--multi-line-declaration-indentation): Merge

View File

@ -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))))