]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/bookmark.el (bookmark-bmenu-any-marks): New function
authorKarl Fogel <kfogel@red-bean.com>
Sat, 2 Jan 2010 07:08:02 +0000 (02:08 -0500)
committerKarl Fogel <kfogel@red-bean.com>
Sat, 2 Jan 2010 07:08:02 +0000 (02:08 -0500)
  (bookmark-bmenu-save): Clear buffer modification if no marks.

lisp/ChangeLog
lisp/bookmark.el

index 4a23bf13396ccd53d1d82a81722bbfb1c372a712..c6635b4d3d9503a8cc808307aa61ae227dd37a96 100644 (file)
@@ -1,6 +1,11 @@
 2010-01-02  Karl Fogel  <kfogel@red-bean.com>
 
-       * 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  <kfogel@red-bean.com>
+
+       * 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:
index 190ce58689f3762ad4fb83a23ddc8239068727fc..eb841921b3e41c507485ef386aa71729a17b0e71 100644 (file)
@@ -1836,13 +1836,40 @@ You can mark bookmarks with the \\<bookmark-bmenu-mode-map>\\[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 ()