Files
.emacs.d/lisp/init-org.el

280 lines
10 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;; init-org.el --- org-mode config -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
(use-package org
:hook
(org-mode . org-indent-mode)
(org-mode . visual-line-mode)
(org-mode . jinx-mode)
(org-mode . my-org-electric-pair-fix)
(org-mode . electric-pair-local-mode)
:config
(require 'org-tempo)
(defun my-org-electric-pair-fix ()
(setq-local electric-pair-inhibit-predicate
(lambda (char)
(or (eq char ?<)
(electric-pair-default-inhibit char)))))
;; log默认放入drawer中
(setq org-log-done t
org-log-into-drawer t)
;; 不要在capture时设置bookmark
(setq org-bookmark-names-plist nil)
;; 设置todo关键字
(setq org-todo-keywords
(quote ((sequence "TODO(t)" "STARTED(S)" "|" "DONE(d!/!)")
(sequence "WAITING(w@/!)" "SOMEDAY(s)" "|" "CANCELLED(c@/!)"))))
;; agenda相关
(cond
(*is-windows*
(setq org-agenda-files '("h:/emacs/hugo/this-is-my-blog/all-blog.org"
"h:/emacs/my-org-note/20260509T232442==agenda--all-my-todos__org.org")))
(*is-mac*
(setq org-agenda-files '("~/org/my-org-note/20260509T232442==agenda--all-my-todos__org.org")))
(*is-linux*
(setq org-agenda-files '("~/org/my-org-note/20260509T232442==agenda--all-my-todos__org.org")))
(*is-android*
(setq org-agenda-files '("~/storage/shared/my-org-note/20260509T232442==agenda--all-my-todos__org.org"))))
(setq org-agenda-span 'day)
(setq org-agenda-skip-function-global
'(org-agenda-skip-entry-if 'todo '("COMMENT"))))
;; phscroll优化表格换行
(use-package phscroll
:hook
(org-mode . org-phscroll-activate)
:init
(setq org-startup-truncated nil))
;; org-babel scheme
(use-package ob-scheme
:demand t
:after org
:straight nil
:config
(add-to-list 'org-babel-load-languages '(scheme . t))
(org-babel-do-load-languages
'org-babel-load-languages
org-babel-load-languages))
;; denote
(use-package denote
:hook
(after-init . denote-rename-buffer-mode)
(dired-mode . denote-dired-mode)
:config
(if *is-android*
(setq denote-directory "~/storage/shared/my-org-note/")
(setq denote-directory "~/org/my-org-note/"))
(setq denote-prompts '(title signature keywords))
(setq denote-title-history nil)
(setq denote-signature-history
'("note" "project" "fun" "wisdom" "article" "data" "metanote" "agenda"))
(setq denote-known-keywords
'("emacs" "org" "elisp" "scheme" "programming" "philosophy" "film" "linux" "computerstuff" "game" "masterpiece")))
;; denote-org
(use-package denote-org)
;; denote-journal
(use-package denote-journal
:hook
(calendar-mode . denote-journal-calendar-mode)
:config
(setq denote-journal-directory (expand-file-name "journal" denote-directory))
(setq denote-journal-keyword nil)
(setq denote-journal-signature "journal")
(setq denote-journal-keyword "daily"))
;; denote-explore
(use-package denote-explore)
;; consult-notes
(use-package consult-notes
:straight
'(consult-notes :fork (:host github :repo "Andsy10/consult-notes"))
:hook
(after-init . consult-notes-denote-mode)
:config
(setq consult-notes-denote-display-keywords-indicator "_")
(setq consult-notes-denote-display-id-format 'date)
(setq consult-notes-denote-display-signature t))
;; org-download
(use-package org-download
:after org
:demand t
:hook
(org-mode . org-display-inline-images)
:config
(setq-default org-download-image-dir "./images/"
org-download-heading-lvl nil)
(setq org-download-dragndrop t
org-download-method 'directory
org-image-actual-width nil
org-download-image-html-width 600
org-return-follows-link t))
;; org-ql
(use-package org-ql)
;; org-super-agenda 配置
(use-package org-super-agenda
:config
(org-super-agenda-mode))
;; agenda
(use-package org-agenda
:straight nil
:config
(setq org-agenda-custom-commands
'(("pa" "priority >= A"
((org-ql-block '(and (priority "A") (todo))
((org-ql-block-header "priority = A")))))
("pb" "priority >= B"
((org-ql-block '(and (priority >= "B") (todo))
((org-ql-block-header "priority >= B")
(org-super-agenda-groups
'((:name "priority = A" :priority "A")
(:name "priority = B" :priority "B")))))))
("pc" "priority >= C"
((org-ql-block '(and (priority >= "C") (todo))
((org-ql-block-header "priority >= C")
(org-super-agenda-groups
'((:name "priority = A" :priority "A")
(:name "priority = B" :priority "B")
(:name "priority = C" :priority "C")))))))
("qd" "TODO entries sort by closed time"
((org-ql-block '(closed)
((org-ql-block-header "Closed TODOs")
(org-super-agenda-groups
'((:auto-ts t)))))))
("qs" "SOMEDAYs"
((org-ql-block '(todo "SOMEDAY")
((org-ql-block-header "SOMEDAYs")
(org-super-agenda-groups
'((:auto-ts t)))))))
("qS" "STARTEDs"
((org-ql-block '(todo "STARTED")
((org-ql-block-header "STARTEDs")
(org-super-agenda-groups
'((:auto-ts t)))))))
("qt" "TODOs sort by start time"
((org-ql-block '(todo)
((org-ql-block-header "TODOs")
(org-super-agenda-groups
'((:auto-ts t)))))))
("qa" "all TODO entries"
((org-ql-block '(and (not (done)) (todo))
((org-ql-block-header "all TODOs")
(org-super-agenda-groups
'((:name "started" :todo "STARTED")
(:name "priority = A" :priority "A")
(:name "priority = B" :priority "B")
(:name "other priority" :priority< "B")
(:name "someday" :todo "SOMEDAY"))))))))))
;; capture
(use-package org-capture
:straight nil
:config
(setq org-capture-templates
(cond
((or *is-linux* *is-mac*)
'(("t" "TODO" entry
(file+headline "~/org/my-org-note/20260509T232442==agenda--all-my-todos__org.org" "Something to do")
"* TODO %<%m-%d> %?\n%T"
:empty-lines 1)
("s" "SOMEDAY" entry
(file+headline "~/org/my-org-note/20260509T232442==agenda--all-my-todos__org.org" "Something to do")
"* SOMEDAY %<%m-%d> %?\n%T"
:empty-lines 1)))
(*is-android*
'(("t" "TODO" entry
(file+headline "~/storage/shared/my-org-note/20260509T232442==agenda--all-my-todos__org.org" "Something to do")
"* TODO %<%m-%d> %?\n%T"
:empty-lines 1)
("s" "SOMEDAY" entry
(file+headline "~/storage/shared/my-org-note/20260509T232442==agenda--all-my-todos__org.org" "Something to do")
"* SOMEDAY %<%m-%d> %?\n%T"
:empty-lines 1)))
(t nil))))
;; hugo
(use-package ox-hugo
:config
(with-eval-after-load 'org-capture
(defun org-hugo-new-subtree-post-capture-template ()
"Returns `org-capture' template string for new Hugo post.
See `org-capture-templates' for more information."
(let* ((title (read-from-minibuffer "Post Title: ")) ;Prompt to enter the post title
(fname (org-hugo-slug title)))
(mapconcat #'identity
`(
,(concat "* TODO " title)
":PROPERTIES:"
,(concat ":EXPORT_FILE_NAME: " fname)
":END:"
"\n\n") ;Place the cursor here finally
"\n")))
(if *is-windows*
(add-to-list 'org-capture-templates
'("h" ;`org-capture' binding + h
"Hugo post"
entry
;; It is assumed that below file is present in `org-directory'
;; and that it has a "Blog Ideas" heading. It can even be a
;; symlink pointing to the actual location of all-posts.org!
(file+headline "h:/emacs/hugo/this-is-my-blog/all-blog.org" "Blog Ideas")
(function org-hugo-new-subtree-post-capture-template)))
(add-to-list 'org-capture-templates
'("h" ;`org-capture' binding + h
"Hugo post"
entry
;; It is assumed that below file is present in `org-directory'
;; and that it has a "Blog Ideas" heading. It can even be a
;; symlink pointing to the actual location of all-posts.org!
(file+headline "~/org/hugo/this-is-my-blog/all-blog.org" "Blog Ideas")
(function org-hugo-new-subtree-post-capture-template))))))
;; 农历日历
(use-package cal-china-x
:after calendar
:autoload cal-china-x-setup
:init
(cal-china-x-setup)
:config
(setq calendar-mark-holidays-flag t
cal-china-x-important-holidays cal-china-x-chinese-holidays
cal-china-x-general-holidays '((holiday-lunar 1 15 "元宵节")
(holiday-lunar 7 7 "七夕节")
(holiday-fixed 3 8 "妇女节")
(holiday-fixed 3 12 "植树节")
(holiday-fixed 5 4 "青年节")
(holiday-fixed 6 1 "儿童节")
(holiday-fixed 9 10 "教师节"))
holiday-other-holidays '((holiday-fixed 2 14 "情人节")
(holiday-fixed 4 1 "愚人节")
(holiday-fixed 12 25 "圣诞节")
(holiday-fixed 6 7 "高考")
(holiday-float 5 0 2 "母亲节")
(holiday-float 6 0 3 "父亲节")
(holiday-float 11 4 4 "感恩节"))
calendar-holidays (append cal-china-x-important-holidays
cal-china-x-general-holidays
holiday-other-holidays)))
(provide 'init-org)
;;; init-org.el ends here