|
@@ -2318,6 +2318,10 @@ The following commands are available:
|
|
|
|
|
|
(org-defkey org-agenda-mode-map [mouse-2] 'org-agenda-goto-mouse)
|
|
|
(org-defkey org-agenda-mode-map [mouse-3] 'org-agenda-show-mouse)
|
|
|
+
|
|
|
+(define-key org-agenda-mode-map [remap forward-paragraph] 'org-agenda-forward-block)
|
|
|
+(define-key org-agenda-mode-map [remap backward-paragraph] 'org-agenda-backward-block)
|
|
|
+
|
|
|
(when org-agenda-mouse-1-follows-link
|
|
|
(org-defkey org-agenda-mode-map [follow-link] 'mouse-face))
|
|
|
(easy-menu-define org-agenda-menu org-agenda-mode-map "Agenda menu"
|
|
@@ -7808,27 +7812,40 @@ Negative selection means regexp must not match for selection of an entry."
|
|
|
(text-property-any (point-min) (point-max) 'org-today t)
|
|
|
(text-property-any (point-min) (point-max) 'org-agenda-type 'agenda)
|
|
|
(and (get-text-property (min (1- (point-max)) (point)) 'org-series)
|
|
|
- (org-agenda-goto-block-beginning))
|
|
|
+ (org-agenda-backward-block))
|
|
|
(point-min))))
|
|
|
|
|
|
-(defun org-agenda-goto-block-beginning ()
|
|
|
- "Go the agenda block beginning."
|
|
|
+(defun org-agenda-backward-block ()
|
|
|
+ "Move backward by one agenda block."
|
|
|
(interactive)
|
|
|
- (if (not (derived-mode-p 'org-agenda-mode))
|
|
|
- (error "Cannot execute this command outside of org-agenda-mode buffers")
|
|
|
- (let (dest)
|
|
|
- (save-excursion
|
|
|
- (unless (looking-at "\\'")
|
|
|
- (forward-char))
|
|
|
- (let* ((prop 'org-agenda-structural-header)
|
|
|
- (p (previous-single-property-change (point) prop))
|
|
|
- (n (next-single-property-change (or (and (looking-at "\\`") 1)
|
|
|
- (1- (point))) prop)))
|
|
|
- (setq dest (cond ((eq n (point-at-eol)) (1- n)) (p (1- p))))))
|
|
|
- (if (not dest)
|
|
|
- (error "Cannot find the beginning of the blog")
|
|
|
- (goto-char dest)
|
|
|
- (move-beginning-of-line 1)))))
|
|
|
+ (org-agenda-forward-block 'backward))
|
|
|
+
|
|
|
+(defun org-agenda-forward-block (&optional backward)
|
|
|
+ "Move forward by one agenda block.
|
|
|
+When optional argument BACKWARD is set, go backward"
|
|
|
+ (interactive)
|
|
|
+ (cond ((not (derived-mode-p 'org-agenda-mode))
|
|
|
+ (user-error
|
|
|
+ "Cannot execute this command outside of org-agenda-mode buffers"))
|
|
|
+ ((looking-at (if backward "\\`" "\\'"))
|
|
|
+ (message "Already at the %s block" (if backward "first" "last")))
|
|
|
+ (t (let ((pos (prog1 (point)
|
|
|
+ (ignore-errors (if backward (backward-char 1)
|
|
|
+ (move-end-of-line 1)))))
|
|
|
+ (f (if backward
|
|
|
+ 'previous-single-property-change
|
|
|
+ 'next-single-property-change))
|
|
|
+ moved dest)
|
|
|
+ (while (and (setq dest (funcall
|
|
|
+ f (point) 'org-agenda-structural-header))
|
|
|
+ (not (get-text-property
|
|
|
+ (point) 'org-agenda-structural-header)))
|
|
|
+ (setq moved t)
|
|
|
+ (goto-char dest))
|
|
|
+ (if moved (move-beginning-of-line 1)
|
|
|
+ (goto-char (if backward (point-min) (point-max)))
|
|
|
+ (move-beginning-of-line 1)
|
|
|
+ (message "No %s block" (if backward "previous" "further")))))))
|
|
|
|
|
|
(defun org-agenda-later (arg)
|
|
|
"Go forward in time by the current span.
|