From: Karl Fogel Date: Sat, 2 Jan 2010 07:08:02 +0000 (-0500) Subject: * lisp/bookmark.el (bookmark-bmenu-any-marks): New function X-Git-Tag: emacs-pretest-23.1.92~106 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=479899451b22eae5db2109c97862652309128a81;p=emacs.git * lisp/bookmark.el (bookmark-bmenu-any-marks): New function (bookmark-bmenu-save): Clear buffer modification if no marks. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4a23bf13396..c6635b4d3d9 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,11 @@ 2010-01-02 Karl Fogel - * lisp/bookmark.el (bookmark-bmenu-marks-width): Define to 1, not 2. + * bookmark.el (bookmark-bmenu-any-marks): New function + (bookmark-bmenu-save): Clear buffer modification if no marks. + +2010-01-02 Karl Fogel + + * bookmark.el (bookmark-bmenu-marks-width): Define to 1, not 2. (bookmark-bmenu-list, bookmark-bmenu-bookmark): Calculate property positions by using `bookmark-bmenu-marks-width', instead of hardcoding. This fixes the `bookmark-bmenu-execute-deletions' bug reported here: diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 190ce58689f..eb841921b3e 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -1836,13 +1836,40 @@ You can mark bookmarks with the \\\\[bookmark-bmenu-mar (other-window 1)))) +(defun bookmark-bmenu-any-marks () + "Return non-nil if any bookmarks are marked in the marks column." + (save-excursion + (goto-char (point-min)) + (bookmark-bmenu-ensure-position) + (catch 'found-mark + (while (not (eobp)) + (beginning-of-line) + (if (looking-at "^\\S-") + (throw 'found-mark t) + (forward-line 1))) + nil))) + + (defun bookmark-bmenu-save (parg) "Save the current list into a bookmark file. With a prefix arg, prompts for a file to save them in." (interactive "P") (save-excursion (save-window-excursion - (bookmark-save parg)))) + (bookmark-save parg))) + ;; Show the buffer as unmodified after saving, but only if there are + ;; no marks: marks are not saved with the bookmarks, therefore from + ;; the user's point of view they are a "modification" in the buffer + ;; + ;; FIXME: Ideally, if the buffer were unmodified when there are no + ;; marks, and then some marks are made and removed without being + ;; executed, then the buffer would be restored to unmodified state. + ;; But that would require bookmark-specific logic to track buffer + ;; modification. It might be worth it, but it's fine not to have it + ;; too -- the worst outcome is that the user might be tempted to + ;; save the bookmark list when it technically doesn't need saving. + (if (not (bookmark-bmenu-any-marks)) + (set-buffer-modified-p nil))) (defun bookmark-bmenu-load ()