|
|
|
|
@ -630,7 +630,7 @@ |
|
|
|
|
( mu4e-compose-signature . |
|
|
|
|
(concat |
|
|
|
|
"Jacopo De Simoi \n" |
|
|
|
|
"Assistant Professor — U Toronto\n")))))) |
|
|
|
|
"Associate Professor — U Toronto\n")))))) |
|
|
|
|
|
|
|
|
|
;; set `mu4e-context-policy` and `mu4e-compose-policy` to tweak when mu4e should |
|
|
|
|
;; guess or ask the correct context, e.g. |
|
|
|
|
@ -999,76 +999,78 @@ |
|
|
|
|
(tags-todo "5m") |
|
|
|
|
(tags-todo "20m"))))) |
|
|
|
|
#+end_src |
|
|
|
|
|
|
|
|
|
Custom agenda view |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
(defun org-agenda-prepare (&optional name) |
|
|
|
|
(let ((filter-alist (if org-agenda-persistent-filter |
|
|
|
|
(with-current-buffer |
|
|
|
|
(get-buffer-create org-agenda-buffer-name) |
|
|
|
|
(list `(tag . ,org-agenda-tag-filter) |
|
|
|
|
`(re . ,org-agenda-regexp-filter) |
|
|
|
|
`(effort . ,org-agenda-effort-filter) |
|
|
|
|
`(cat . ,org-agenda-category-filter)))))) |
|
|
|
|
(if (org-agenda-use-sticky-p) |
|
|
|
|
(progn |
|
|
|
|
(put 'org-agenda-tag-filter :preset-filter nil) |
|
|
|
|
(put 'org-agenda-category-filter :preset-filter nil) |
|
|
|
|
(put 'org-agenda-regexp-filter :preset-filter nil) |
|
|
|
|
;; Popup existing buffer |
|
|
|
|
(org-agenda-prepare-window (get-buffer org-agenda-buffer-name) |
|
|
|
|
filter-alist) |
|
|
|
|
(message "Sticky Agenda buffer, use `r' to refresh") |
|
|
|
|
(or org-agenda-multi (org-agenda-fit-window-to-buffer)) |
|
|
|
|
(throw 'exit "Sticky Agenda buffer, use `r' to refresh")) |
|
|
|
|
(setq org-todo-keywords-for-agenda nil) |
|
|
|
|
(put 'org-agenda-tag-filter :preset-filter |
|
|
|
|
org-agenda-tag-filter-preset) |
|
|
|
|
(put 'org-agenda-category-filter :preset-filter |
|
|
|
|
org-agenda-category-filter-preset) |
|
|
|
|
(put 'org-agenda-regexp-filter :preset-filter |
|
|
|
|
org-agenda-regexp-filter-preset) |
|
|
|
|
(put 'org-agenda-effort-filter :preset-filter |
|
|
|
|
org-agenda-effort-filter-preset) |
|
|
|
|
(if org-agenda-multi |
|
|
|
|
(progn |
|
|
|
|
(setq buffer-read-only nil) |
|
|
|
|
(goto-char (point-max)) |
|
|
|
|
(unless (or (bobp) org-agenda-compact-blocks |
|
|
|
|
(not org-agenda-block-separator)) |
|
|
|
|
(insert "\n" |
|
|
|
|
(if (stringp org-agenda-block-separator) |
|
|
|
|
org-agenda-block-separator |
|
|
|
|
(make-string (window-width) org-agenda-block-separator)) |
|
|
|
|
"\n\n")) |
|
|
|
|
(narrow-to-region (point) (point-max))) |
|
|
|
|
(setq org-done-keywords-for-agenda nil) |
|
|
|
|
;; Setting any org variables that are in org-agenda-local-vars |
|
|
|
|
;; list need to be done after the prepare call |
|
|
|
|
(org-agenda-prepare-window |
|
|
|
|
(get-buffer-create org-agenda-buffer-name) filter-alist) |
|
|
|
|
(setq buffer-read-only nil) |
|
|
|
|
(org-agenda-reset-markers) |
|
|
|
|
(let ((inhibit-read-only t)) (erase-buffer)) |
|
|
|
|
(org-agenda-mode) |
|
|
|
|
(setq org-refile-targets '((org-agenda-files :level . 1))) |
|
|
|
|
(setq org-refile-use-outline-path 'file) |
|
|
|
|
(setq org-agenda-buffer (current-buffer)) |
|
|
|
|
(setq org-agenda-contributing-files nil) |
|
|
|
|
(setq org-agenda-columns-active nil) |
|
|
|
|
(org-agenda-prepare-buffers (org-agenda-files nil 'ifmode)) |
|
|
|
|
(setq org-todo-keywords-for-agenda |
|
|
|
|
(org-uniquify org-todo-keywords-for-agenda)) |
|
|
|
|
(setq org-done-keywords-for-agenda |
|
|
|
|
(org-uniquify org-done-keywords-for-agenda)) |
|
|
|
|
(setq org-agenda-last-prefix-arg current-prefix-arg) |
|
|
|
|
(setq org-agenda-this-buffer-name org-agenda-buffer-name) |
|
|
|
|
(and name (not org-agenda-name) |
|
|
|
|
(setq-local org-agenda-name name))) |
|
|
|
|
(setq buffer-read-only nil)))) |
|
|
|
|
|
|
|
|
|
(add-hook 'org-agenda-mode-hook |
|
|
|
|
(lambda () (setq truncate-lines t |
|
|
|
|
show-trailing-whitespace nil))) |
|
|
|
|
- cleanup stuff (TODO, what is this doing, exactly? ) |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
(defun org-agenda-prepare (&optional name) |
|
|
|
|
(let ((filter-alist (if org-agenda-persistent-filter |
|
|
|
|
(with-current-buffer |
|
|
|
|
(get-buffer-create org-agenda-buffer-name) |
|
|
|
|
(list `(tag . ,org-agenda-tag-filter) |
|
|
|
|
`(re . ,org-agenda-regexp-filter) |
|
|
|
|
`(effort . ,org-agenda-effort-filter) |
|
|
|
|
`(cat . ,org-agenda-category-filter)))))) |
|
|
|
|
(if (org-agenda-use-sticky-p) |
|
|
|
|
(progn |
|
|
|
|
(put 'org-agenda-tag-filter :preset-filter nil) |
|
|
|
|
(put 'org-agenda-category-filter :preset-filter nil) |
|
|
|
|
(put 'org-agenda-regexp-filter :preset-filter nil) |
|
|
|
|
;; Popup existing buffer |
|
|
|
|
(org-agenda-prepare-window (get-buffer org-agenda-buffer-name) |
|
|
|
|
filter-alist) |
|
|
|
|
(message "Sticky Agenda buffer, use `r' to refresh") |
|
|
|
|
(or org-agenda-multi (org-agenda-fit-window-to-buffer)) |
|
|
|
|
(throw 'exit "Sticky Agenda buffer, use `r' to refresh")) |
|
|
|
|
(setq org-todo-keywords-for-agenda nil) |
|
|
|
|
(put 'org-agenda-tag-filter :preset-filter |
|
|
|
|
org-agenda-tag-filter-preset) |
|
|
|
|
(put 'org-agenda-category-filter :preset-filter |
|
|
|
|
org-agenda-category-filter-preset) |
|
|
|
|
(put 'org-agenda-regexp-filter :preset-filter |
|
|
|
|
org-agenda-regexp-filter-preset) |
|
|
|
|
(put 'org-agenda-effort-filter :preset-filter |
|
|
|
|
org-agenda-effort-filter-preset) |
|
|
|
|
(if org-agenda-multi |
|
|
|
|
(progn |
|
|
|
|
(setq buffer-read-only nil) |
|
|
|
|
(goto-char (point-max)) |
|
|
|
|
(unless (or (bobp) org-agenda-compact-blocks |
|
|
|
|
(not org-agenda-block-separator)) |
|
|
|
|
(insert "\n" |
|
|
|
|
(if (stringp org-agenda-block-separator) |
|
|
|
|
org-agenda-block-separator |
|
|
|
|
(make-string (window-width) org-agenda-block-separator)) |
|
|
|
|
"\n\n")) |
|
|
|
|
(narrow-to-region (point) (point-max))) |
|
|
|
|
(setq org-done-keywords-for-agenda nil) |
|
|
|
|
;; Setting any org variables that are in org-agenda-local-vars |
|
|
|
|
;; list need to be done after the prepare call |
|
|
|
|
(org-agenda-prepare-window |
|
|
|
|
(get-buffer-create org-agenda-buffer-name) filter-alist) |
|
|
|
|
(setq buffer-read-only nil) |
|
|
|
|
(org-agenda-reset-markers) |
|
|
|
|
(let ((inhibit-read-only t)) (erase-buffer)) |
|
|
|
|
(org-agenda-mode) |
|
|
|
|
(setq org-refile-targets '((org-agenda-files :level . 1))) |
|
|
|
|
(setq org-refile-use-outline-path 'file) |
|
|
|
|
(setq org-agenda-buffer (current-buffer)) |
|
|
|
|
(setq org-agenda-contributing-files nil) |
|
|
|
|
(setq org-agenda-columns-active nil) |
|
|
|
|
(org-agenda-prepare-buffers (org-agenda-files nil 'ifmode)) |
|
|
|
|
(setq org-todo-keywords-for-agenda |
|
|
|
|
(org-uniquify org-todo-keywords-for-agenda)) |
|
|
|
|
(setq org-done-keywords-for-agenda |
|
|
|
|
(org-uniquify org-done-keywords-for-agenda)) |
|
|
|
|
(setq org-agenda-last-prefix-arg current-prefix-arg) |
|
|
|
|
(setq org-agenda-this-buffer-name org-agenda-buffer-name) |
|
|
|
|
(and name (not org-agenda-name) |
|
|
|
|
(setq-local org-agenda-name name))) |
|
|
|
|
(setq buffer-read-only nil)))) |
|
|
|
|
|
|
|
|
|
(add-hook 'org-agenda-mode-hook |
|
|
|
|
(lambda () (setq truncate-lines t |
|
|
|
|
show-trailing-whitespace nil))) |
|
|
|
|
|
|
|
|
|
#+end_src |
|
|
|
|
*** Automate saving |
|
|
|
|
@ -1197,7 +1199,15 @@ |
|
|
|
|
(setq org-clock-clocktable-default-properties '(:maxlevel 2 :scope subtree)) |
|
|
|
|
(org-clock-persistence-insinuate) |
|
|
|
|
#+end_src |
|
|
|
|
*** Tangle to different files |
|
|
|
|
*** COMMENT Tangle to different files |
|
|
|
|
This has been broken by commit 3ebee033103ccd3c3e8c354bad01c15332b9d901 |
|
|
|
|
and a2cb9b853d30fc301f4553d1556dba4ee6bc1ead. |
|
|
|
|
Try some workarounds to pinpoint the issue: |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
(setq org-babel-tangle-use-relative-file-links nil) |
|
|
|
|
#+end_src |
|
|
|
|
---- |
|
|
|
|
|
|
|
|
|
This is some some super-clever stuff. See |
|
|
|
|
[https://emacs.stackexchange.com/questions/39032/tangle-the-same-src-block-to-different-files] |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
@ -1236,35 +1246,37 @@ |
|
|
|
|
"Can be used as :around advice for `org-babel-tangle-single-block'. |
|
|
|
|
If the :tangle header arg is a list of files. Handle all files" |
|
|
|
|
(let* ((info (org-babel-get-src-block-info)) |
|
|
|
|
(params (nth 2 info)) |
|
|
|
|
(tfiles (cdr (assoc :tangle params)))) |
|
|
|
|
(message nil) |
|
|
|
|
(if (null (and only-this-block (consp tfiles))) |
|
|
|
|
(funcall oldfun block-counter only-this-block) |
|
|
|
|
(cl-assert (listp tfiles) nil |
|
|
|
|
":tangle only allows a tangle file name or a list of tangle file names") |
|
|
|
|
(let ((ret (mapcar |
|
|
|
|
(lambda (tfile) |
|
|
|
|
(message tfile) |
|
|
|
|
(sleep-for 1) |
|
|
|
|
(let (old-get-info) |
|
|
|
|
(cl-letf* (((symbol-function 'old-get-info) (symbol-function 'org-babel-get-src-block-info)) |
|
|
|
|
((symbol-function 'org-babel-get-src-block-info) |
|
|
|
|
`(lambda (&rest get-info-args) |
|
|
|
|
(let* ((info (apply 'old-get-info get-info-args)) |
|
|
|
|
(params (nth 2 info)) |
|
|
|
|
(tfile-cons (assoc :tangle params))) |
|
|
|
|
(setcdr tfile-cons ,tfile) |
|
|
|
|
info)))) |
|
|
|
|
(funcall oldfun block-counter only-this-block)))) |
|
|
|
|
tfiles))) |
|
|
|
|
(if only-this-block |
|
|
|
|
(list (cons (cl-caaar ret) (mapcar #'cadar ret))) |
|
|
|
|
ret))))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(advice-add 'org-babel-tangle-collect-blocks :override #'org-babel-tangle-collect-blocks-handle-tangle-list) |
|
|
|
|
(advice-add 'org-babel-tangle-single-block :around #'org-babel-tangle-single-block-handle-tangle-list) |
|
|
|
|
(params (nth 2 info)) |
|
|
|
|
(tfiles (cdr (assoc :tangle params)))) |
|
|
|
|
(message nil) |
|
|
|
|
(if (null (and only-this-block (consp tfiles))) |
|
|
|
|
(funcall oldfun block-counter only-this-block) |
|
|
|
|
(cl-assert (listp tfiles) nil |
|
|
|
|
":tangle only allows a tangle file name or a list of tangle file names") |
|
|
|
|
(let ((ret (mapcar |
|
|
|
|
(lambda (tfile) |
|
|
|
|
(message tfile) |
|
|
|
|
(sleep-for 1) |
|
|
|
|
(let (old-get-info) |
|
|
|
|
(cl-letf* (((symbol-function 'old-get-info) (symbol-function 'org-babel-get-src-block-info)) |
|
|
|
|
((symbol-function 'org-babel-get-src-block-info) |
|
|
|
|
`(lambda (&rest get-info-args) |
|
|
|
|
(let* ((info (apply 'old-get-info get-info-args)) |
|
|
|
|
(params (nth 2 info)) |
|
|
|
|
(tfile-cons (assoc :tangle params))) |
|
|
|
|
(setcdr tfile-cons ,tfile) |
|
|
|
|
info)))) |
|
|
|
|
(funcall oldfun block-counter only-this-block)))) |
|
|
|
|
tfiles))) |
|
|
|
|
(if only-this-block |
|
|
|
|
(list (cons (cl-caaar ret) (mapcar #'cadar ret))) |
|
|
|
|
ret))))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(advice-add 'org-babel-tangle-collect-blocks :override |
|
|
|
|
#'org-babel-tangle-collect-blocks-handle-tangle-list) |
|
|
|
|
(advice-add 'org-babel-tangle-single-block :around |
|
|
|
|
#'org-babel-tangle-single-block-handle-tangle-list) |
|
|
|
|
#+end_src |
|
|
|
|
*** Append tangle |
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
@ -2205,6 +2217,7 @@ |
|
|
|
|
(set-face-bold 'bold nil) |
|
|
|
|
(wilder/fixup-faces) |
|
|
|
|
(with-eval-after-load "info" (wilder/fixup-faces) nil) |
|
|
|
|
(with-eval-after-load "mu4e" (wilder/fixup-faces) nil) |
|
|
|
|
(with-eval-after-load "vterm" (wilder/fixup-faces) nil) |
|
|
|
|
#+end_src |
|
|
|
|
|
|
|
|
|
|