aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-03-13 21:56:44 +0800
committerGuangxiong Lin <[email protected]>2022-03-13 21:56:44 +0800
commitcb5409866f2127dc6a3138a433ac918b51721ab5 (patch)
tree2d6e8e479d930055b902a1547406c2d641eed648
parente0ab9b83e8ccaf7cc4858d72f4ae7ab2724b92c6 (diff)
downloaddotfiles-cb5409866f2127dc6a3138a433ac918b51721ab5.tar.gz
dotfiles-cb5409866f2127dc6a3138a433ac918b51721ab5.tar.bz2
dotfiles-cb5409866f2127dc6a3138a433ac918b51721ab5.zip
Refactor org config (emacs)
- org-agenda config is now in a dedicated file - Add a new agenda view "Weekly Log" - Add display settings for agenda view
-rw-r--r--.emacs.d/lisp/init-org-agenda.el166
-rw-r--r--.emacs.d/lisp/init-org.el158
2 files changed, 168 insertions, 156 deletions
diff --git a/.emacs.d/lisp/init-org-agenda.el b/.emacs.d/lisp/init-org-agenda.el
new file mode 100644
index 0000000..b583b96
--- /dev/null
+++ b/.emacs.d/lisp/init-org-agenda.el
@@ -0,0 +1,166 @@
+(gx/maybe-require-package 'org-ql)
+
+(defvar gx/org-agenda-block--today-schedule
+ '(agenda "" ((org-agenda-span 1)
+ (org-agenda-overriding-header "Today's Schedule")))
+ "A block showing today's schedule.")
+
+(defvar gx/org-agenda-block--weekly-log
+ '(agenda "" ((org-agenda-overriding-header "Weekly Log")
+ (org-agenda-span 7)
+ (org-agenda-show-log t)
+ (org-agenda-log-mode-items '(state clock closed))))
+ "A block showing my schedule and logged tasks for this week.")
+
+(defvar gx/org-agenda-block--stuck-projects
+ '(org-ql-block '(and (or (tags "PROJECT")
+ (not (ancestors (todo))))
+ (todo)
+ (not (done))
+ (not (todo "SOMEDAY"))
+ (not (todo "NEXT"))
+ (not (scheduled))
+ (not (descendants (todo "NEXT")))
+ (not (descendants (scheduled))))
+ ((org-ql-block-header "Stuck Projects")))
+ "A block showing stuck projects.")
+
+(defvar gx/org-agenda-block--unwilling-to-do
+ '(tags-todo "UNWILLING"
+ ((org-agenda-overriding-header "Unwilling to do")))
+ "A block showing tasks I am not willing to do ...")
+
+(defvar gx/org-agenda-block--week-at-a-glance
+ '(agenda ""
+ ((org-agenda-span 7)
+ (org-agenda-repeating-timestamp-show-all t)
+ (org-agenda-entry-types '(:deadline :scheduled))
+ (org-agenda-overriding-header "Week at a Glance")))
+ "A block showing the tasks scheduled or due this week.")
+
+(defvar gx/org-agenda-block--attention
+ '(org-ql-block '(and (not (todo "WAITING"))
+ (or (tags "URGENT" "FLAGGED")
+ (priority "A")))
+ ((org-ql-block-header "ATTENTION")))
+ "A block showing tasks require attention.")
+
+(defvar gx/org-agenda-block--waiting-not-scheduled
+ '(org-ql-block '(and (todo "WAITING")
+ (not (scheduled)))
+ ((org-ql-block-header "Waiting unscheduled tasks")))
+ "A block showing waiting and not scheduled tasks.")
+
+(defvar gx/org-agenda-block--next-not-scheduled
+ '(org-ql-block '(and (todo "NEXT")
+ (not (scheduled)))
+ ((org-ql-block-header "Next unscheduled tasks")))
+ "A block showing next unscheduled tasks.")
+
+(defvar gx/org-agenda-block--display-settings
+ '((org-agenda-todo-ignore-deadlines 'near)
+ (org-agenda-todo-ignore-scheduled t))
+ "Display settings for all agenda views.")
+
+(defun gx/org-agenda-quit (fn)
+ (org-save-all-org-buffers)
+ (funcall fn))
+(advice-add 'org-agenda-quit :around 'gx/org-agenda-quit)
+
+(with-eval-after-load 'evil
+ (evil-set-initial-state 'org-agenda-mode 'motion)
+ (evil-define-key 'motion org-agenda-mode-map
+
+ ;; motion
+ (kbd "j") 'org-agenda-next-line
+ (kbd "k") 'org-agenda-previous-line
+ (kbd "gg") 'evil-goto-first-line
+ (kbd "G") 'evil-goto-line
+ (kbd "C-n") 'org-agenda-next-item
+ (kbd "C-p") 'org-agenda-previous-item
+ (kbd "[[") 'org-agenda-earlier
+ (kbd "]]") 'org-agenda-later
+
+ ;; actions
+ (kbd "RET") 'org-agenda-switch-to
+ (kbd "TAB") 'org-agenda-goto
+ (kbd "t") 'org-agenda-todo
+ (kbd "r") 'org-agenda-refile
+ (kbd "+") 'org-agenda-priority-up
+ (kbd "-") 'org-agenda-priority-down
+ (kbd "H") 'org-agenda-do-date-earlier
+ (kbd "L") 'org-agenda-do-date-later
+ (kbd "o") 'org-agenda-add-note
+ (kbd "A") 'org-agenda-append-agenda
+ (kbd "C") 'org-agenda-capture
+ (kbd "R") 'org-agenda-redo
+
+ (kbd "dd") 'org-agenda-kill
+
+ ;; bulk
+ (kbd "m") 'org-agenda-bulk-toggle
+ (kbd "x") 'org-agenda-bulk-action
+
+ ;; set
+ (kbd "ss") 'org-agenda-schedule
+ (kbd "sd") 'org-agenda-deadline
+ (kbd "st") 'org-agenda-set-tags
+ (kbd "sT") 'org-timer-set-timer
+ (kbd "se") 'org-agenda-set-effort
+
+ ;; filter
+ (kbd "fc") 'org-agenda-filter-by-category
+ (kbd "fr") 'org-agenda-filter-by-regexp
+ (kbd "fe") 'org-agenda-filter-by-effort
+ (kbd "ft") 'org-agenda-filter-by-tag
+ (kbd "F") 'org-agenda-filter-remove-all
+
+ ;; clock
+ (kbd "ci") 'org-agenda-clock-in
+ (kbd "co") 'org-agenda-clock-out
+ (kbd "cc") 'org-agenda-clock-cancel
+ (kbd "cg") 'org-agenda-clock-goto
+ (kbd "cr") 'org-agenda-clockreport-mode
+
+ ;; goto
+ (kbd "gc") 'org-agenda-goto-calendar
+
+ (kbd "u") 'org-agenda-undo))
+
+(setq org-agenda-dim-blocked-tasks nil)
+(setq org-agenda-skip-deadline-prewarning-if-scheduled t)
+(setq org-deadline-warning-days 30)
+(setq org-agenda-window-setup 'current-window)
+;; (setq org-agenda-prefix-format
+;; '((agenda . "%i %-12:c%?-12t% s %b")
+;; (timeline . " % s")
+;; (todo . "%i %-12:c %b")
+;; (tags . "%i %-12:c")
+;; (search . " %i %-12:c")))
+(setq org-agenda-custom-commands
+ `((" " "Daily agenda and all important TODOs"
+ (,gx/org-agenda-block--today-schedule
+ ,gx/org-agenda-block--attention
+ ,gx/org-agenda-block--unwilling-to-do
+ ;; (tags-todo "computer|@office|phone")
+ ;; (tags "PROJECT+CATEGORY=\"elephants\"")
+ ,gx/org-agenda-block--stuck-projects
+ ,gx/org-agenda-block--next-not-scheduled
+ ,gx/org-agenda-block--waiting-not-scheduled
+ ,gx/org-agenda-block--week-at-a-glance)
+ ,gx/org-agenda-block--display-settings)
+ ("l" "Weekly Log"
+ (,gx/org-agenda-block--weekly-log)
+ ,gx/org-agenda-block--display-settings)
+ ("d" "Upcoming deadlines" agenda ""
+ ((org-agenda-time-grid nil)
+ (org-deadline-warning-days 365)
+ (org-agenda-entry-types '(:deadline))))
+ ("g" . "GTD contexts")
+ ("gh" "Home" tags-todo "home")
+ ("p" . "Priorities")
+ ("pa" "A items" tags-todo "+PRIORITIES=\"A\"")
+ ("pb" "B items" tags-todo "+PRIORITIES=\"B\"")
+ ("pc" "C items" tags-todo "+PRIORITIES=\"C\"")))
+
+(provide 'init-org-agenda)
diff --git a/.emacs.d/lisp/init-org.el b/.emacs.d/lisp/init-org.el
index 0ba9cb2..0102460 100644
--- a/.emacs.d/lisp/init-org.el
+++ b/.emacs.d/lisp/init-org.el
@@ -1,65 +1,3 @@
-(gx/maybe-require-package 'org-ql)
-
-(defvar gx/org-agenda-block--today-schedule
- '(agenda "" ((org-agenda-span 1)
- (org-agenda-overriding-header "Today's Schedule")))
- "A block showing today's schedule.")
-
-(defvar gx/org-agenda-block--weekly-schedule
- '(agenda "" ((org-agenda-overriding-header "Weekly Schedule")
- (org-agenda-ndays-to-span 7)))
- "A block showing weekly schedule.")
-
-(defvar gx/org-agenda-block--stuck-projects
- '(org-ql-block '(and (or (tags "PROJECT")
- (not (ancestors (todo))))
- (todo)
- (not (done))
- (not (todo "SOMEDAY"))
- (not (todo "NEXT"))
- (not (scheduled))
- (not (descendants (todo "NEXT")))
- (not (descendants (scheduled))))
- ((org-ql-block-header "Stuck Projects")))
- "A block showing stuck projects.")
-
-(defvar gx/org-agenda-block--unwilling-to-do
- '(tags-todo "UNWILLING"
- ((org-agenda-overriding-header "Unwilling to do")))
- "A block showing tasks I am not willing to do ...")
-
-(defvar gx/org-agenda-block--week-at-a-glance
- '(agenda ""
- ((org-agenda-span 7)
- (org-agenda-repeating-timestamp-show-all t)
- (org-agenda-entry-types '(:deadline :scheduled))
- (org-agenda-overriding-header "Week at a Glance")))
- "A block showing the tasks scheduled or due this week.")
-
-(defvar gx/org-agenda-block--attention
- '(org-ql-block '(and (not (todo "WAITING"))
- (or (tags "URGENT" "FLAGGED")
- (priority "A")))
- ((org-ql-block-header "ATTENTION")))
- "A block showing tasks require attention.")
-
-(defvar gx/org-agenda-block--waiting-not-scheduled
- '(org-ql-block '(and (todo "WAITING")
- (not (scheduled)))
- ((org-ql-block-header "Waiting unscheduled tasks")))
- "A block showing waiting and not scheduled tasks.")
-
-(defvar gx/org-agenda-block--next-not-scheduled
- '(org-ql-block '(and (todo "NEXT")
- (not (scheduled)))
- ((org-ql-block-header "Next unscheduled tasks")))
- "A block showing next unscheduled tasks.")
-
-(defun gx/org-agenda-quit (fn)
- (org-save-all-org-buffers)
- (funcall fn))
-(advice-add 'org-agenda-quit :around 'gx/org-agenda-quit)
-
(defun gx/org-refile (fn &optional arg default-buffer rfloc msg)
(funcall-interactively fn arg default-buffer rfloc msg)
(org-save-all-org-buffers))
@@ -102,66 +40,7 @@
;; priority
(kbd "+") 'org-priority-up
- (kbd "-") 'org-priority-down)
-
- (evil-set-initial-state 'org-agenda-mode 'motion)
- (evil-define-key 'motion org-agenda-mode-map
-
- ;; motion
- (kbd "j") 'org-agenda-next-line
- (kbd "k") 'org-agenda-previous-line
- (kbd "gg") 'evil-goto-first-line
- (kbd "G") 'evil-goto-line
- (kbd "C-n") 'org-agenda-next-item
- (kbd "C-p") 'org-agenda-previous-item
- (kbd "[[") 'org-agenda-earlier
- (kbd "]]") 'org-agenda-later
-
- ;; actions
- (kbd "RET") 'org-agenda-switch-to
- (kbd "TAB") 'org-agenda-goto
- (kbd "t") 'org-agenda-todo
- (kbd "r") 'org-agenda-refile
- (kbd "+") 'org-agenda-priority-up
- (kbd "-") 'org-agenda-priority-down
- (kbd "H") 'org-agenda-do-date-earlier
- (kbd "L") 'org-agenda-do-date-later
- (kbd "o") 'org-agenda-add-note
- (kbd "A") 'org-agenda-append-agenda
- (kbd "C") 'org-agenda-capture
- (kbd "R") 'org-agenda-redo
-
- (kbd "dd") 'org-agenda-kill
-
- ;; bulk
- (kbd "m") 'org-agenda-bulk-toggle
- (kbd "x") 'org-agenda-bulk-action
-
- ;; set
- (kbd "ss") 'org-agenda-schedule
- (kbd "sd") 'org-agenda-deadline
- (kbd "st") 'org-agenda-set-tags
- (kbd "sT") 'org-timer-set-timer
- (kbd "se") 'org-agenda-set-effort
-
- ;; filter
- (kbd "fc") 'org-agenda-filter-by-category
- (kbd "fr") 'org-agenda-filter-by-regexp
- (kbd "fe") 'org-agenda-filter-by-effort
- (kbd "ft") 'org-agenda-filter-by-tag
- (kbd "F") 'org-agenda-filter-remove-all
-
- ;; clock
- (kbd "ci") 'org-agenda-clock-in
- (kbd "co") 'org-agenda-clock-out
- (kbd "cc") 'org-agenda-clock-cancel
- (kbd "cg") 'org-agenda-clock-goto
- (kbd "cr") 'org-agenda-clockreport-mode
-
- ;; goto
- (kbd "gc") 'org-agenda-goto-calendar
-
- (kbd "u") 'org-agenda-undo))
+ (kbd "-") 'org-priority-down))
(add-hook 'org-mode-hook
(lambda ()
@@ -235,44 +114,10 @@
'((shell . t)
(plantuml . t))))
-;; agenda
-(setq org-agenda-dim-blocked-tasks nil)
-(setq org-agenda-skip-deadline-prewarning-if-scheduled t)
-(setq org-deadline-warning-days 30)
-(setq org-agenda-window-setup 'current-window)
-;; (setq org-agenda-prefix-format
-;; '((agenda . "%i %-12:c%?-12t% s %b")
-;; (timeline . " % s")
-;; (todo . "%i %-12:c %b")
-;; (tags . "%i %-12:c")
-;; (search . " %i %-12:c")))
-(setq org-agenda-custom-commands
- `((" " "Daily agenda and all important TODOs"
- (,gx/org-agenda-block--today-schedule
- ,gx/org-agenda-block--attention
- ,gx/org-agenda-block--unwilling-to-do
- ;; (tags-todo "computer|@office|phone")
- ;; (tags "PROJECT+CATEGORY=\"elephants\"")
- ,gx/org-agenda-block--stuck-projects
- ,gx/org-agenda-block--next-not-scheduled
- ,gx/org-agenda-block--waiting-not-scheduled
- ,gx/org-agenda-block--week-at-a-glance))
- ("d" "Upcoming deadlines" agenda ""
- ((org-agenda-time-grid nil)
- (org-deadline-warning-days 365)
- (org-agenda-entry-types '(:deadline))))
- ("g" . "GTD contexts")
- ("gh" "Home" tags-todo "home")
- ("p" . "Priorities")
- ("pa" "A items" tags-todo "+PRIORITIES=\"A\"")
- ("pb" "B items" tags-todo "+PRIORITIES=\"B\"")
- ("pc" "C items" tags-todo "+PRIORITIES=\"C\"")))
-
;; evil
(when (gx/maybe-require-package 'evil-org)
(add-hook 'org-mode-hook 'evil-org-mode)
(add-hook 'org-agenda-mode-hook 'evil-org-mode))
-(autoload 'evil-org-agenda-set-keys "evil-org-agenda")
;; (add-hook 'evil-org-mode-hook
;; (lambda ()
;; (setq evil-want-C-i-jump nil)))
@@ -322,4 +167,5 @@
(setq alert-default-style 'osx-notifier))
(setq org-alert-interval 60)
+(require 'init-org-agenda)
(provide 'init-org)