unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Boruch Baum <boruch_baum@gmx.com>
To: 20152@debbugs.gnu.org
Subject: bug#20152: 24.4: bookmarks display wrong annotation (FIX INCLUDED)
Date: Fri, 20 Mar 2015 06:38:54 -0400	[thread overview]
Message-ID: <550BF8BE.5080105@gmx.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 7563 bytes --]

In the bookmark list buffer, after viewing an annotation for a
bookmark, navigating to another bookmark entry does not kill the
annotation buffer display, leading to confusion about which entry
the still-visible annotation refers.

The atttached bugfix kills the annotation buffer on navigation,
and remaps navigation keys accordingly.

The bugfix also introduces an option to automatically display
annotations as one navigates within the bookmark list buffer.

The bugfix also introduces an option to toggle auto-display of
annotations.

Note that the code has two sets of key-binding definitions: Only
the first, (defvar bookmark-bmenu-mode-map ..., is for the bugfix
to bookmark.el. The second, (eval-after-load "bookmark" ..., or
better, just (progn ..., is included for convenience / testing.



;-------------------------------------------------------------------
; bookmark-bmenu-next-line
; bookmark-bmenu-previous-line
; bookmark-bmenu-forward-char
; bookmark-bmenu-backward-char
;
; Functions to address bug in which the `*Bookmark Annotation*' buffer
; is not modified or updated when navigating through the
; bookmark-bmenu-list.
;
; Also provides option to auto-display annotations as one navigates
; the bmenu-list

(defvar bookmark-bmenu-auto-display-annotations nil
"Whether to automatically display a bookmark's annotation as one
navigates through the bookmark list. `t' for yes. Default is
`nil'.")

(defun bookmark-bmenu-next-line (&optional ARG TRY-VSCROLL)
"Move cursor vertically down ARG lines within the bookmark list.
Refer to function `next-line' for details."
  (interactive "^p\np")
  (let
    ((annotation-buffer
       (get-buffer "*Bookmark Annotation*")))
    (when annotation-buffer
      (kill-buffer annotation-buffer)))
  (next-line ARG TRY-VSCROLL)
  (when bookmark-bmenu-auto-display-annotations
     (bookmark-bmenu-show-annotation)))

(defun bookmark-bmenu-previous-line (&optional ARG TRY-VSCROLL)
"Move cursor vertically up ARG lines within the bookmark list.
Refer to function `previous-line' for details."
  (interactive "^p\np")
  (let
    ((annotation-buffer
       (get-buffer "*Bookmark Annotation*")))
    (when annotation-buffer
      (kill-buffer annotation-buffer)))
  (previous-line ARG TRY-VSCROLL)
  (when bookmark-bmenu-auto-display-annotations
     (bookmark-bmenu-show-annotation)))

(defun bookmark-bmenu-forward-char (&optional N)
  (interactive "p")
  (bookmark-bmenu-backward-forward-char 'forward-char N))

(defun bookmark-bmenu-backward-char (&optional N)
  (interactive "p")
  (bookmark-bmenu-backward-forward-char 'backward-char N))

(defun bookmark-bmenu-backward-forward-char (direction-function N)
  (let (annotation-buffer
        (initial-line (line-number-at-pos)))
    (funcall direction-function N)
    (when (/= initial-line (line-number-at-pos))
      (when (setq annotation-buffer (get-buffer "*Bookmark Annotation*"))
        (kill-buffer annotation-buffer))
      (when bookmark-bmenu-auto-display-annotations
        (bookmark-bmenu-show-annotation)))))

;-------------------------------------------------------------------
;
; ONLY ONE OF THE FOLLOWING TWO OPTIONS ARE NECESSARY !
;
; Either redine the mode map, or just the individual keys
;
;-------------------------------------------------------------------
(defvar bookmark-bmenu-mode-map
  (let ((map (make-keymap)))
    (set-keymap-parent map special-mode-map)
    (define-key map "v" 'bookmark-bmenu-select)
    (define-key map "w" 'bookmark-bmenu-locate)
    (define-key map "2" 'bookmark-bmenu-2-window)
    (define-key map "1" 'bookmark-bmenu-1-window)
    (define-key map "j" 'bookmark-bmenu-this-window)
    (define-key map "\C-c\C-c" 'bookmark-bmenu-this-window)
    (define-key map "f" 'bookmark-bmenu-this-window)
    (define-key map "\C-m" 'bookmark-bmenu-this-window)
    (define-key map "o" 'bookmark-bmenu-other-window)
    (define-key map "\C-o" 'bookmark-bmenu-switch-other-window)
    (define-key map "s" 'bookmark-bmenu-save)
    (define-key map "k" 'bookmark-bmenu-delete)
    (define-key map "\C-d" 'bookmark-bmenu-delete-backwards)
    (define-key map "x" 'bookmark-bmenu-execute-deletions)
    (define-key map "d" 'bookmark-bmenu-delete)
    (define-key map " " 'bookmark-bmenu-next-line)
    (define-key map "n" 'bookmark-bmenu-next-line)
    (define-key map [remap next-line] 'bookmark-bmenu-next-line)
    (define-key map "p" 'bookmark-bmenu-previous-line)
    (define-key map [remap previous-line] 'bookmark-bmenu-previous-line)
    (define-key map "\177" 'bookmark-bmenu-backup-unmark)
    (define-key map "u" 'bookmark-bmenu-unmark)
    (define-key map "m" 'bookmark-bmenu-mark)
    (define-key map "l" 'bookmark-bmenu-load)
    (define-key map "r" 'bookmark-bmenu-rename)
    (define-key map "R" 'bookmark-bmenu-relocate)
    (define-key map "t" 'bookmark-bmenu-toggle-filenames)
    (define-key map "a" 'bookmark-bmenu-show-annotation)
    (define-key map "A" 'bookmark-bmenu-show-all-annotations)
    (define-key map "e" 'bookmark-bmenu-edit-annotation)
    (define-key map "/" 'bookmark-bmenu-search)
    (define-key map [remap backward-char] 'bookmark-bmenu-backward-char)
    (define-key map [remap forward-char]  'bookmark-bmenu-forward-char)
    (define-key map [mouse-2] 'bookmark-bmenu-other-window-with-mouse)
    map))


(eval-after-load "bookmark"
  (progn
    (define-key bookmark-bmenu-mode-map
      [remap next-line] 'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      [remap previous-line] 'bookmark-bmenu-previous-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "n")   'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "SPC") 'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "p")   'bookmark-bmenu-previous-line)
    (define-key bookmark-bmenu-mode-map
      [remap backward-char] 'bookmark-bmenu-backward-char)
    (define-key bookmark-bmenu-mode-map
      [remap forward-char]  'bookmark-bmenu-forward-char)
  ))
;-------------------------------------------------------------------


;-------------------------------------------------------------------
; Modification to function `bookmark-bmenu-show-annotation' to allow
; for toggling whether to autodisplay annotations as one navigates
; through the bookmark list.
;
; Do note that the documentation for function `called-interactively-p'
; discourages its use in favor of eg. '(not (or executing-kbd-macro
; noninteractive))'. See there for details.
;
(defvar bookmark-bmenu-toggle-auto-display-annotations nil
"When not `nil', function `bookmark-bmenu-show-annotation' (by
default, bound to `a`), toggles whether to automatically display
a bookmark's annotation as one navigates through the bookmark
list. Default is `nil'.")

(defun bookmark-bmenu-show-annotation ()
  "Show the annotation for the current bookmark in another window."
  (interactive)
  (when (and (called-interactively-p "any")
             bookmark-bmenu-toggle-auto-display-annotations)
    (if bookmark-bmenu-auto-display-annotations
      (setq bookmark-bmenu-auto-display-annotations nil)
     (setq bookmark-bmenu-auto-display-annotations t)))
  (let ((bookmark (bookmark-bmenu-bookmark)))
    (bookmark-show-annotation bookmark)))
;-------------------------------------------------------------------


-- 
hkp://keys.gnupg.net
CA45 09B5 5351 7C11 A9D1  7286 0036 9E45 1595 8BC0


[-- Attachment #1.2: attachment-1 --]
[-- Type: text/plain, Size: 6501 bytes --]

;-------------------------------------------------------------------
; bookmark-bmenu-next-line
; bookmark-bmenu-previous-line
; bookmark-bmenu-forward-char
; bookmark-bmenu-backward-char
;
; Functions to address bug in which the `*Bookmark Annotation*' buffer
; is not modified or updated when navigating through the
; bookmark-bmenu-list.
;
; Also provides option to auto-display annotations as one navigates
; the bmenu-list

(defvar bookmark-bmenu-auto-display-annotations nil
"Whether to automatically display a bookmark's annotation as one
navigates through the bookmark list. `t' for yes. Default is
`nil'.")

(defun bookmark-bmenu-next-line (&optional ARG TRY-VSCROLL)
"Move cursor vertically down ARG lines within the bookmark list.
Refer to function `next-line' for details."
  (interactive "^p\np")
  (let
    ((annotation-buffer
       (get-buffer "*Bookmark Annotation*")))
    (when annotation-buffer
      (kill-buffer annotation-buffer)))
  (next-line ARG TRY-VSCROLL)
  (when bookmark-bmenu-auto-display-annotations
     (bookmark-bmenu-show-annotation)))

(defun bookmark-bmenu-previous-line (&optional ARG TRY-VSCROLL)
"Move cursor vertically up ARG lines within the bookmark list.
Refer to function `previous-line' for details."
  (interactive "^p\np")
  (let
    ((annotation-buffer
       (get-buffer "*Bookmark Annotation*")))
    (when annotation-buffer
      (kill-buffer annotation-buffer)))
  (previous-line ARG TRY-VSCROLL)
  (when bookmark-bmenu-auto-display-annotations
     (bookmark-bmenu-show-annotation)))

(defun bookmark-bmenu-forward-char (&optional N)
  (interactive "p")
  (bookmark-bmenu-backward-forward-char 'forward-char N))

(defun bookmark-bmenu-backward-char (&optional N)
  (interactive "p")
  (bookmark-bmenu-backward-forward-char 'backward-char N))

(defun bookmark-bmenu-backward-forward-char (direction-function N)
  (let (annotation-buffer
        (initial-line (line-number-at-pos)))
    (funcall direction-function N)
    (when (/= initial-line (line-number-at-pos))
      (when (setq annotation-buffer (get-buffer "*Bookmark Annotation*"))
        (kill-buffer annotation-buffer))
      (when bookmark-bmenu-auto-display-annotations
        (bookmark-bmenu-show-annotation)))))

;-------------------------------------------------------------------
;
; ONLY ONE OF THE FOLLOWING TWO OPTIONS ARE NECESSARY !
;
; Either redine the mode map, or just the individual keys
;
;-------------------------------------------------------------------
(defvar bookmark-bmenu-mode-map
  (let ((map (make-keymap)))
    (set-keymap-parent map special-mode-map)
    (define-key map "v" 'bookmark-bmenu-select)
    (define-key map "w" 'bookmark-bmenu-locate)
    (define-key map "2" 'bookmark-bmenu-2-window)
    (define-key map "1" 'bookmark-bmenu-1-window)
    (define-key map "j" 'bookmark-bmenu-this-window)
    (define-key map "\C-c\C-c" 'bookmark-bmenu-this-window)
    (define-key map "f" 'bookmark-bmenu-this-window)
    (define-key map "\C-m" 'bookmark-bmenu-this-window)
    (define-key map "o" 'bookmark-bmenu-other-window)
    (define-key map "\C-o" 'bookmark-bmenu-switch-other-window)
    (define-key map "s" 'bookmark-bmenu-save)
    (define-key map "k" 'bookmark-bmenu-delete)
    (define-key map "\C-d" 'bookmark-bmenu-delete-backwards)
    (define-key map "x" 'bookmark-bmenu-execute-deletions)
    (define-key map "d" 'bookmark-bmenu-delete)
    (define-key map " " 'bookmark-bmenu-next-line)
    (define-key map "n" 'bookmark-bmenu-next-line)
    (define-key map [remap next-line] 'bookmark-bmenu-next-line)
    (define-key map "p" 'bookmark-bmenu-previous-line)
    (define-key map [remap previous-line] 'bookmark-bmenu-previous-line)
    (define-key map "\177" 'bookmark-bmenu-backup-unmark)
    (define-key map "u" 'bookmark-bmenu-unmark)
    (define-key map "m" 'bookmark-bmenu-mark)
    (define-key map "l" 'bookmark-bmenu-load)
    (define-key map "r" 'bookmark-bmenu-rename)
    (define-key map "R" 'bookmark-bmenu-relocate)
    (define-key map "t" 'bookmark-bmenu-toggle-filenames)
    (define-key map "a" 'bookmark-bmenu-show-annotation)
    (define-key map "A" 'bookmark-bmenu-show-all-annotations)
    (define-key map "e" 'bookmark-bmenu-edit-annotation)
    (define-key map "/" 'bookmark-bmenu-search)
    (define-key map [remap backward-char] 'bookmark-bmenu-backward-char)
    (define-key map [remap forward-char]  'bookmark-bmenu-forward-char)
    (define-key map [mouse-2] 'bookmark-bmenu-other-window-with-mouse)
    map))


(eval-after-load "bookmark"
  (progn
    (define-key bookmark-bmenu-mode-map
      [remap next-line] 'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      [remap previous-line] 'bookmark-bmenu-previous-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "n")   'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "SPC") 'bookmark-bmenu-next-line)
    (define-key bookmark-bmenu-mode-map
      (kbd "p")   'bookmark-bmenu-previous-line)
    (define-key bookmark-bmenu-mode-map
      [remap backward-char] 'bookmark-bmenu-backward-char)
    (define-key bookmark-bmenu-mode-map
      [remap forward-char]  'bookmark-bmenu-forward-char)
  ))
;-------------------------------------------------------------------


;-------------------------------------------------------------------
; Modification to function `bookmark-bmenu-show-annotation' to allow
; for toggling whether to autodisplay annotations as one navigates
; through the bookmark list.
;
; Do note that the documentation for function `called-interactively-p'
; discourages its use in favor of eg. '(not (or executing-kbd-macro
; noninteractive))'. See there for details.
;
(defvar bookmark-bmenu-toggle-auto-display-annotations nil
"When not `nil', function `bookmark-bmenu-show-annotation' (by
default, bound to `a`), toggles whether to automatically display
a bookmark's annotation as one navigates through the bookmark
list. Default is `nil'.")

(defun bookmark-bmenu-show-annotation ()
  "Show the annotation for the current bookmark in another window."
  (interactive)
  (when (and (called-interactively-p "any")
             bookmark-bmenu-toggle-auto-display-annotations)
    (if bookmark-bmenu-auto-display-annotations
      (setq bookmark-bmenu-auto-display-annotations nil)
     (setq bookmark-bmenu-auto-display-annotations t)))
  (let ((bookmark (bookmark-bmenu-bookmark)))
    (bookmark-show-annotation bookmark)))
;-------------------------------------------------------------------

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

             reply	other threads:[~2015-03-20 10:38 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-20 10:38 Boruch Baum [this message]
2015-03-20 14:31 ` bug#20152: 24.4: bookmarks display wrong annotation (FIX INCLUDED) Stefan Monnier
2015-03-20 16:29   ` Boruch Baum
2015-03-20 18:32   ` Boruch Baum
2015-03-20 18:46     ` Boruch Baum
2015-03-26  1:41       ` Stefan Monnier
2021-12-02 10:17         ` Lars Ingebrigtsen
2021-12-03  6:31           ` Boruch Baum
2021-12-05  0:55             ` Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=550BF8BE.5080105@gmx.com \
    --to=boruch_baum@gmx.com \
    --cc=20152@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).