summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Wahl <marcowahlsoft@gmail.com>2019-10-23 00:54:53 +0200
committerMarco Wahl <marcowahlsoft@gmail.com>2019-10-23 00:54:53 +0200
commit80b29acba3847c1756fa3c143d6991964f7273ca (patch)
tree3c56f45e6dcb2d3f66c2620bfd935b66cb175874
parent42b8db0d349df6416fdc406b05015a2cef2aaaa8 (diff)
downloadorg-mode-80b29acba3847c1756fa3c143d6991964f7273ca.tar.gz
agenda: Enable navigation for the agenda dispatch buffer
* lisp/org-agenda.el (org-agenda-get-restriction-and-command): Use keys C-n, C-p, SPC, DEL analogue to export dispatcher. See function org-export--dispatch-action. Reported by Nathan Neff https://lists.gnu.org/archive/html/emacs-orgmode/2019-10/msg00179.html.
-rw-r--r--lisp/org-agenda.el44
1 files changed, 35 insertions, 9 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 97ee648..abd9d53 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -3109,16 +3109,42 @@ s Search for keywords M Like m, but only TODO entries
(setq second-time t)
(org-fit-window-to-buffer))
+ ;; Hint to navigation if window too small for all information
+ (setq header-line-format
+ (when (not (pos-visible-in-window-p (point-max)))
+ "Use SPC, DEL, C-n or C-p to navigate."))
+
;; Ask for selection
- (message "Press key for agenda command%s:"
- (if (or restrict-ok org-agenda-overriding-restriction)
- (if org-agenda-overriding-restriction
- " (restriction lock active)"
- (if restriction
- (format " (restricted to %s)" restriction)
- " (unrestricted)"))
- ""))
- (setq c (read-char-exclusive))
+ (cl-loop
+ do (progn
+ (message "Press key for agenda command%s:"
+ (if (or restrict-ok org-agenda-overriding-restriction)
+ (if org-agenda-overriding-restriction
+ " (restriction lock active)"
+ (if restriction
+ (format " (restricted to %s)" restriction)
+ " (unrestricted)"))
+ ""))
+ (setq c (read-char-exclusive)))
+ until (not (memq c '(14 16 ?\s ?\d)))
+ do (cl-case c
+ (14 (if (not (pos-visible-in-window-p (point-max)))
+ (ignore-errors (scroll-up 1))
+ (message "End of buffer")
+ (sit-for 1)))
+ (16 (if (not (pos-visible-in-window-p (point-min)))
+ (ignore-errors (scroll-down 1))
+ (message "Beginning of buffer")
+ (sit-for 1)))
+ (?\s (if (not (pos-visible-in-window-p (point-max)))
+ (scroll-up nil)
+ (message "End of buffer")
+ (sit-for 1)))
+ (?\d (if (not (pos-visible-in-window-p (point-min)))
+ (scroll-down nil)
+ (message "Beginning of buffer")
+ (sit-for 1)))))
+
(message "")
(cond
((assoc (char-to-string c) custom)