New command `org-agenda-bulk-mark-all' bound to `*'. Other minor enhancements.

* org-agenda.el (org-agenda-mode-map): New keybinding ̀*' to
mark all entries for bulk action.
(org-agenda-menu): New menu item for marking all entries.
(org-agenda-bulk-mark-all): New function to mark all entries.
(org-agenda-bulk-mark-regexp): Minor docstring fix.
(org-agenda-bulk-unmark): With a prefix argument, unmark all.
Also send a better message.
(org-agenda-bulk-remove-all-marks): Rename to
`org-agenda-bulk-unmark-all'.  Check against
`org-agenda-bulk-marked-entries' before trying to unmark
entries.  Minor docstring fix.
(org-agenda-bulk-unmark-all): Renamed from
̀org-agenda-bulk-remove-all-marks'.
This commit is contained in:
Bastien Guerry 2012-05-05 09:21:22 +02:00
parent a16814a475
commit 39204efe9a
1 changed files with 33 additions and 21 deletions

View File

@ -1988,9 +1988,10 @@ The following commands are available:
(org-defkey org-agenda-mode-map "\C-k" 'org-agenda-kill)
(org-defkey org-agenda-mode-map "\C-c\C-w" 'org-agenda-refile)
(org-defkey org-agenda-mode-map "m" 'org-agenda-bulk-mark)
(org-defkey org-agenda-mode-map "*" 'org-agenda-bulk-mark-all)
(org-defkey org-agenda-mode-map "%" 'org-agenda-bulk-mark-regexp)
(org-defkey org-agenda-mode-map "u" 'org-agenda-bulk-unmark)
(org-defkey org-agenda-mode-map "U" 'org-agenda-bulk-remove-all-marks)
(org-defkey org-agenda-mode-map "U" 'org-agenda-bulk-unmark-all)
(org-defkey org-agenda-mode-map "A" 'org-agenda-append-agenda)
(org-defkey org-agenda-mode-map "B" 'org-agenda-bulk-action)
(org-defkey org-agenda-mode-map "\C-c\C-x!" 'org-reload)
@ -2197,9 +2198,10 @@ The following commands are available:
["Delete subtree" org-agenda-kill t])
("Bulk action"
["Mark entry" org-agenda-bulk-mark t]
["Mark all" org-agenda-bulk-mark-all t]
["Mark matching regexp" org-agenda-bulk-mark-regexp t]
["Unmark entry" org-agenda-bulk-unmark t]
["Unmark all entries" org-agenda-bulk-remove-all-marks :active t :keys "C-u s"])
["Unmark all entries" org-agenda-bulk-unmark-all :active t :keys "C-u s"])
["Act on all marked" org-agenda-bulk-action t]
"--"
("Tags and Properties"
@ -8639,8 +8641,13 @@ This is a command that has to be installed in `calendar-mode-map'."
(message "%d entries marked for bulk action"
(length org-agenda-bulk-marked-entries))))))
(defun org-agenda-bulk-mark-all ()
"Mark all entries for future agenda bulk action."
(interactive)
(org-agenda-bulk-mark-regexp "."))
(defun org-agenda-bulk-mark-regexp (regexp)
"Mark entries match REGEXP."
"Mark entries matching REGEXP for future agenda bulk action."
(interactive "sMark entries matching regexp: ")
(let ((entries-marked 0))
(save-excursion
@ -8653,20 +8660,23 @@ This is a command that has to be installed in `calendar-mode-map'."
(if (not entries-marked)
(message "No entry matching this regexp."))))
(defun org-agenda-bulk-unmark ()
(defun org-agenda-bulk-unmark (&optional arg)
"Unmark the entry at point for future bulk action."
(interactive)
(when (org-agenda-bulk-marked-p)
(org-agenda-bulk-remove-overlays
(point-at-bol) (+ 2 (point-at-bol)))
(setq org-agenda-bulk-marked-entries
(delete (org-get-at-bol 'org-hd-marker)
org-agenda-bulk-marked-entries)))
(beginning-of-line 2)
(while (and (get-char-property (point) 'invisible) (not (eobp)))
(beginning-of-line 2))
(message "%d entries marked for bulk action"
(length org-agenda-bulk-marked-entries)))
(interactive "P")
(if arg
(org-agenda-bulk-unmark-all)
(cond ((org-agenda-bulk-marked-p)
(org-agenda-bulk-remove-overlays
(point-at-bol) (+ 2 (point-at-bol)))
(setq org-agenda-bulk-marked-entries
(delete (org-get-at-bol 'org-hd-marker)
org-agenda-bulk-marked-entries))
(beginning-of-line 2)
(while (and (get-char-property (point) 'invisible) (not (eobp)))
(beginning-of-line 2))
(message "%d entries left marked for bulk action"
(length org-agenda-bulk-marked-entries)))
(t (message "No entry to unmark here")))))
(defun org-agenda-bulk-toggle ()
"Toggle marking the entry at point for bulk action."
@ -8687,13 +8697,15 @@ from the list in `org-agenda-bulk-marked-entries'."
(delete-overlay ov)))
(overlays-in (or beg (point-min)) (or end (point-max)))))
(defun org-agenda-bulk-remove-all-marks ()
(defun org-agenda-bulk-unmark-all ()
"Remove all marks in the agenda buffer.
This will remove the markers, and the overlays."
This will remove the markers and the overlays."
(interactive)
(mapc (lambda (m) (move-marker m nil)) org-agenda-bulk-marked-entries)
(setq org-agenda-bulk-marked-entries nil)
(org-agenda-bulk-remove-overlays (point-min) (point-max)))
(if (null org-agenda-bulk-marked-entries)
(message "No entry to unmark")
(mapc (lambda (m) (move-marker m nil)) org-agenda-bulk-marked-entries)
(setq org-agenda-bulk-marked-entries nil)
(org-agenda-bulk-remove-overlays (point-min) (point-max))))
(defcustom org-agenda-persistent-marks nil
"Non-nil means marked items will stay marked after a bulk action.