Config: fix my/org-journal-mark-old-todos-as-comment function , keybinding optimize , undo enhance , refactor some code.

This commit is contained in:
User
2026-03-27 07:54:40 +08:00
parent d7d81d8fbf
commit 922ac00f7c
4 changed files with 124 additions and 38 deletions

View File

@@ -16,15 +16,16 @@
(use-package org-journal
:config
(setq org-journal-file-format "%Y-%m-%d.org"
org-journal-file-header "#+title: Daily Journal\n#+category: journal\n\n"
org-journal-time-format "%m-%d %R \n:PROPERTIES:\n:Created: <%Y-%m-%d %a %H:%M:%S>\n:END:\n"
org-journal-file-header "#+title: Daily Journal\n#+category: journal\n#+STARTUP: content\n\n"
org-journal-time-format "%m-%d \n:PROPERTIES:\n:Created: <%Y-%m-%d %a %H:%M:%S>\n:END:\n"
org-journal-time-prefix "\n*** TODO "
org-journal-hide-entries-p t
org-journal-date-format (lambda (time)
(format "* %s %s\n:PROPERTIES:\n:Created: [%s]\n:END:"
(format-time-string "%Y-%m-%d" time)
(format-time-string "%a" time)
(format-time-string "%Y-%m-%d %a" time))))
(format-time-string "%Y-%m-%d %a" time)))
org-journal-carryover-items "TODO=\"TODO\"|TODO=\"STARTED\"|TODO=\"WAITING\"|TODO=\"SOMEDAY\"")
(when *is-windows*
(setq org-journal-dir "D:/emacs/my-org-daily/"))
@@ -53,30 +54,37 @@
(add-hook 'org-journal-after-entry-create-hook #'my/journal-position-cursor-after-time)
(defun org-journal-open-entry-for-editing (&optional event)
"Open journal entry for the date under cursor in calendar for editing."
(interactive
(list last-nonmenu-event))
(let* ((date (calendar-cursor-to-date t event))
(time (org-journal--calendar-date->time date))
(org-journal-file (org-journal--get-entry-path time)))
(if (file-exists-p org-journal-file)
(progn
(funcall org-journal-find-file org-journal-file)
(unless (org-journal--daily-p)
(org-journal--goto-entry date)))
(message "No journal entry for this date."))))
"Open journal entry for the date under cursor in calendar for editing."
(interactive
(list last-nonmenu-event))
(let* ((date (calendar-cursor-to-date t event))
(time (org-journal--calendar-date->time date))
(org-journal-file (org-journal--get-entry-path time)))
(if (file-exists-p org-journal-file)
(progn
(funcall org-journal-find-file org-journal-file)
(unless (org-journal--daily-p)
(org-journal--goto-entry date)))
(message "No journal entry for this date."))))
(defun my/org-journal-mark-old-todos-as-comment (entries)
"Change of TODO entry's TODO key word to COMMENT after carryover."
"Change TODO entry's TODO keyword to COMMENT after carryover."
(save-excursion
(mapc (lambda (entry)
(let ((start (car entry))
(end (cadr entry)))
(goto-char start)
(when (re-search-forward "^\\(\\*+ \\)TODO\\>" end t)
(replace-match "\\1COMMENT" t nil))))
(reverse entries)))
(save-buffer))
(let* ((todo-keywords (cl-remove-if
(lambda (kw) (member kw org-done-keywords))
org-todo-keywords-1))
(todo-pattern (when todo-keywords
(regexp-opt todo-keywords 'words))))
(when todo-pattern
(mapc (lambda (entry)
(let ((start (car entry))
(end (set-marker (make-marker) (cadr entry))))
(goto-char start)
(while (re-search-forward (concat "^\\(\\*+ \\)" todo-pattern) end t)
(replace-match "\\1COMMENT" t nil))
(set-marker end nil)))
(reverse entries))))
(save-buffer)))
(setq org-journal-handle-old-carryover-fn #'my/org-journal-mark-old-todos-as-comment))
@@ -89,8 +97,7 @@
(add-hook 'org-mode-hook
(lambda ()
(require 'org-tempo)
(org-indent-mode)
(local-set-key (kbd "C-c i") 'consult-org-heading)))
(org-indent-mode)))
;; 预加载防止windows的org-mode加载卡顿
(if *is-windows*
@@ -123,7 +130,7 @@
(when *is-windows*
(with-eval-after-load 'org
(setq org-agenda-files '("d:/emacs/org/learning-org-mode.org"
(setq org-agenda-files '("d:/emacs/org/learning-oprg-mode.org"
"d:/emacs/hugo/this-is-my-blog/all-blog.org"
"d:/emacs/my-org-daily/")))) ; agenda文件目录或文件
(when *is-mac*
@@ -134,9 +141,11 @@
(setq org-default-priority ?D)
(setq org-agenda-skip-function-global
'(org-agenda-skip-entry-if 'todo '("COMMENT")))
;; org-super-agenda 配置
(use-package org-super-agenda
:after org-agenda
:config
(org-super-agenda-mode))
@@ -150,16 +159,38 @@
("pb" "Priority >= B"
((tags-todo "+PRIORITY<=\"B\"")))
("pc" "Priority >= C"
((tags-todo "+PRIORITY<=\"C\"")))))
((tags-todo "+PRIORITY<=\"C\"")))
("qd" "TODO entries sort by closed time"
((org-ql-block '(closed)
((org-ql-block-header "Closed TODOs")
(org-ql-sort '(closed))
(org-super-agenda-groups
'((:auto-ts t)))))))
("qS" "SOMEDAYs"
((org-ql-block '(todo "SOMEDAY")
((org-ql-block-header "SOMEDAYs")
(org-ql-sort '(start-time))
(org-super-agenda-groups
'((:auto-ts t)))))))
("qs" "STARTEDs"
((org-ql-block '(todo "STARTED")
((org-ql-block-header "STARTEDs")
(org-ql-sort '(start-time))
(org-super-agenda-groups
'((:auto-ts t)))))))
("qt" "TODOs sort by start time"
((org-ql-block '(todo)
((org-ql-block-header "TODOs")
(org-ql-sort '(start-time))
(org-super-agenda-groups
'((:auto-ts t)))))))))
;; capture模板
(when *is-windows*
(setq org-capture-templates
'(("t" "Todo" entry (file+headline "d:/emacs/org/todos.org" "Workspace")
"* TODO [#B] %?\n %i\n %U"
:empty-lines 1)
("j" "Journal" entry (file+datetree "d:/emacs/org/journal.org")
"* %?\nEntered on %U\n %i\n"))))
:empty-lines 1))))
(when *is-mac*
(setq org-capture-templates