# HG changeset patch # User Karl Fogel # Date 1262416082 18000 # Node ID d4fd57e5eafd9d3581328b5ca9ccad0d27e1ac78 # Parent a3eff1130b76b68aa87b9e093b0d599b84c23d92 * lisp/bookmark.el (bookmark-bmenu-any-marks): New function (bookmark-bmenu-save): Clear buffer modification if no marks. diff -r a3eff1130b76 -r d4fd57e5eafd lisp/ChangeLog --- a/lisp/ChangeLog Sat Jan 02 00:00:55 2010 -0500 +++ b/lisp/ChangeLog Sat Jan 02 02:08:02 2010 -0500 @@ -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 -r a3eff1130b76 -r d4fd57e5eafd lisp/bookmark.el --- a/lisp/bookmark.el Sat Jan 02 00:00:55 2010 -0500 +++ b/lisp/bookmark.el Sat Jan 02 02:08:02 2010 -0500 @@ -1836,13 +1836,40 @@ (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 ()