mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
Fix two bugs in removing bookmark fringe marks
This fixes bug#70019 and a separate fringe-mark removal bug that also affected bookmarks in certain Info nodes. * lisp/bookmark.el (bookmark--remove-fringe-mark): Fix bug#70019 by temporarily widening in order to ensure we fetch the right overlays. Also, normalize both filenames before comparing, to avoid spurious failure to match. Thanks to Dani Moncayo for the bug report and for testing.
This commit is contained in:
parent
e442161f11
commit
63765a74f1
1 changed files with 37 additions and 10 deletions
|
|
@ -515,18 +515,45 @@ See user option `bookmark-fringe-mark'."
|
|||
(non-essential t)
|
||||
overlays found temp)
|
||||
(when (and pos filename)
|
||||
(setq filename (abbreviate-file-name (expand-file-name filename)))
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(when (equal filename
|
||||
(ignore-errors (bookmark-buffer-file-name)))
|
||||
(setq overlays
|
||||
(save-excursion
|
||||
(goto-char pos)
|
||||
(overlays-in (pos-bol) (1+ (pos-bol)))))
|
||||
(while (and (not found) (setq temp (pop overlays)))
|
||||
(when (eq 'bookmark (overlay-get temp 'category))
|
||||
(delete-overlay (setq found temp))))))))))
|
||||
(let ((bkmk-fname (ignore-errors (bookmark-buffer-file-name))))
|
||||
(when bkmk-fname
|
||||
;; Normalize both filenames before comparing, because the
|
||||
;; filename we receive from the bookmark wasn't
|
||||
;; necessarily generated by `bookmark-buffer-file-name'.
|
||||
;; For example, bookmarks set in Info nodes get a filename
|
||||
;; based on `Info-current-file', and under certain
|
||||
;; circumstances that can be an unexpanded path (e.g.,
|
||||
;; when the Info page was under your home directory).
|
||||
(let ((this-fname-normalized (expand-file-name filename))
|
||||
(bkmk-fname-normalized (expand-file-name bkmk-fname)))
|
||||
(when (equal this-fname-normalized bkmk-fname-normalized)
|
||||
(setq overlays
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
;; Suppose bookmark "foo" was earlier set at
|
||||
;; location X in a file, but now the file is
|
||||
;; narrowed such that X is outside the
|
||||
;; restriction. Then the `goto-char' below
|
||||
;; would go to the wrong place and thus the
|
||||
;; wrong overlays would be fetched. This is
|
||||
;; why we temporarily `widen' before
|
||||
;; fetching.
|
||||
;;
|
||||
;; (This circumstance can easily arise when
|
||||
;; a bookmark was set on Info node X but now
|
||||
;; the "*info*" buffer is showing some other
|
||||
;; node Y, with X and Y physically located
|
||||
;; in the same file, as is often the case
|
||||
;; with Info nodes. See bug #70019, for
|
||||
;; example.)
|
||||
(widen)
|
||||
(goto-char pos)
|
||||
(overlays-in (pos-bol) (1+ (pos-bol))))))
|
||||
(while (and (not found) (setq temp (pop overlays)))
|
||||
(when (eq 'bookmark (overlay-get temp 'category))
|
||||
(delete-overlay (setq found temp)))))))))))))
|
||||
|
||||
(defun bookmark-maybe-sort-alist ()
|
||||
"Return `bookmark-alist' for display.
|
||||
|
|
|
|||
Loading…
Reference in a new issue