refactor: restructure Emacs config and add org journal features
- Add .gitignore for config management - Fix early-init compatibility for tool-bar-mode - Add org-journal, org-super-agenda, and org-ql support - Improve consult with cross-platform file search - Add embark-export keybinding
This commit is contained in:
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# 忽略所有文件
|
||||
*
|
||||
|
||||
# 保留特定配置文件
|
||||
!init.el
|
||||
!early-init.el
|
||||
!custom.el
|
||||
!lisp/
|
||||
!lisp/**/
|
||||
!lisp/**/*.el
|
||||
|
||||
# 保留 .gitignore 本身
|
||||
!.gitignore
|
||||
@@ -1,9 +1,10 @@
|
||||
(setq package-enable-at-startup nil)
|
||||
|
||||
(setq inhibit-startup-screen t) ; 禁用开始菜单
|
||||
(when (fboundp 'tool-bar-mode)
|
||||
(tool-bar-mode -1) ; 禁用工具栏
|
||||
(scroll-bar-mode -1)) ; 禁用滚动条
|
||||
(menu-bar-mode -1) ; 禁用菜单栏
|
||||
(scroll-bar-mode -1) ; 禁用滚动条
|
||||
(setq display-line-numbers-type '2)
|
||||
(global-display-line-numbers-mode t) ; 启用行号
|
||||
(setq display-line-numbers-grow-only t) ; 行号栏只增不减
|
||||
|
||||
1
init.el
1
init.el
@@ -18,4 +18,3 @@
|
||||
(require 'init-kbd)
|
||||
(require 'init-ui)
|
||||
(require 'init-segmentation)
|
||||
(put 'scroll-left 'disabled nil)
|
||||
|
||||
@@ -128,10 +128,16 @@
|
||||
(global-set-key (kbd "C-c i") 'consult-imenu) ;; imenu
|
||||
(global-set-key (kbd "C-c f r") 'consult-recent-file) ;; 最近打开
|
||||
(global-set-key (kbd "C-c f f") 'consult-fd) ;; 调用fd进行目录内搜索
|
||||
(global-set-key (kbd "C-c f l") 'consult-locate) ;; consult-locate
|
||||
(global-set-key (kbd "C-c f g") 'consult-ripgrep) ;; consult-ripgrep
|
||||
(global-set-key (kbd "C-c y") 'consult-yank-from-kill-ring) ;; 从kill ring中粘贴
|
||||
(global-set-key (kbd "C-x r b") 'consult-bookmark) ;; 书签菜单,embark中有更多操作
|
||||
(define-key minibuffer-local-map (kbd "C-c C-e") 'embark-export) ;; 把minibuffer结果在一个菜单中显示
|
||||
(if *is-mac*
|
||||
(progn
|
||||
(global-set-key (kbd "C-c f l") 'consult-fd-global)
|
||||
(global-set-key (kbd "C-c f m") 'consult-locate))
|
||||
(global-set-key (kbd "C-c f l") 'consult-locate)
|
||||
(global-set-key (kbd "C-c f m") 'consult-fd-global))
|
||||
|
||||
;; hungry-delete
|
||||
(global-set-key (kbd "C-c DEL") 'hungry-delete-backward) ;; 向后删除到第一个非空字符
|
||||
|
||||
256
lisp/init-org.el
256
lisp/init-org.el
@@ -3,6 +3,95 @@
|
||||
|
||||
(use-package org)
|
||||
|
||||
;; org-contrib 和 org-checklist
|
||||
(use-package org-contrib
|
||||
:straight (org-contrib :type git :host github :repo "emacsmirror/org-contrib"
|
||||
:depth 1))
|
||||
|
||||
(add-hook 'org-mode-hook
|
||||
(lambda ()
|
||||
(require 'org-checklist nil t)))
|
||||
|
||||
;; org-journal
|
||||
(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-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))))
|
||||
|
||||
(when *is-windows*
|
||||
(setq org-journal-dir "D:/emacs/my-org-daily/"))
|
||||
|
||||
(when *is-mac*
|
||||
(setq org-journal-dir "~/org/my-org-daily/"))
|
||||
|
||||
(add-hook 'org-journal-mode-hook 'font-lock-update)
|
||||
|
||||
(defun my/journal-setup-new-day ()
|
||||
(save-excursion
|
||||
(org-back-to-heading)
|
||||
(let ((day-end (save-excursion (org-end-of-subtree) (point))))
|
||||
(unless (search-forward "** daily" day-end t)
|
||||
(goto-char day-end)
|
||||
(insert "\n\n** daily\n\n\n")
|
||||
(insert "** tasks\n")))))
|
||||
|
||||
(add-hook 'org-journal-after-header-create-hook #'my/journal-setup-new-day)
|
||||
|
||||
(defun my/journal-position-cursor-after-time ()
|
||||
(when (derived-mode-p 'org-journal-mode)
|
||||
(org-back-to-heading)
|
||||
(end-of-line)))
|
||||
|
||||
(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."))))
|
||||
|
||||
(defun my/org-journal-mark-old-todos-as-comment (entries)
|
||||
"Change of TODO entry's TODO key word 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))
|
||||
|
||||
(setq org-journal-handle-old-carryover-fn #'my/org-journal-mark-old-todos-as-comment))
|
||||
|
||||
;; 在org-journal加载cns-mode
|
||||
(add-hook 'org-journal-mode-hook
|
||||
(lambda ()
|
||||
(global-cns-mode-enable-in-buffer)))
|
||||
|
||||
;; 一些随org-mode加载的基础配置
|
||||
(add-hook 'org-mode-hook
|
||||
(lambda ()
|
||||
(require 'org-tempo)
|
||||
(org-indent-mode)
|
||||
(local-set-key (kbd "C-c i") 'consult-org-heading)))
|
||||
|
||||
;; 预加载,防止windows的org-mode加载卡顿
|
||||
(if *is-windows*
|
||||
(progn (run-with-idle-timer
|
||||
@@ -13,18 +102,6 @@
|
||||
(org-mode))
|
||||
(message "Org preloaded")))))
|
||||
|
||||
;; 一些随org-mode加载的基础配置
|
||||
(add-hook 'org-mode-hook
|
||||
(lambda ()
|
||||
(require 'org-tempo)
|
||||
(org-indent-mode)
|
||||
(local-set-key (kbd "C-c i") 'consult-org-heading)))
|
||||
|
||||
;; 设置todo关键字
|
||||
(setq org-todo-keywords
|
||||
(quote ((sequence "TODO(t)" "STARTED(s)" "|" "DONE(d!/!)")
|
||||
(sequence "WAITING(w@/!)" "SOMEDAY(S)" "|" "CANCELLED(c@/!)" "MEETING(m)" "PHONE(p)"))))
|
||||
|
||||
;; 设置标题字体大小
|
||||
;; (dolist (face org-level-faces)
|
||||
;; (set-face-attribute face nil :height 1))
|
||||
@@ -36,6 +113,45 @@
|
||||
;; 将系统时间(星期)设为英文,防止中文乱码
|
||||
(setq system-time-locale "C")
|
||||
|
||||
;; 设置todo关键字
|
||||
(setq org-todo-keywords
|
||||
(quote ((sequence "TODO(t)" "STARTED(s)" "|" "DONE(d!/!)")
|
||||
(sequence "WAITING(w@/!)" "SOMEDAY(S)" "|" "CANCELLED(c@/!)" "MEETING(m)" "PHONE(p)"))))
|
||||
|
||||
;; agenda相关
|
||||
(global-set-key (kbd "C-c a") 'org-agenda)
|
||||
|
||||
(when *is-windows*
|
||||
(with-eval-after-load 'org
|
||||
(setq org-agenda-files '("d:/emacs/org/learning-org-mode.org"
|
||||
"d:/emacs/hugo/this-is-my-blog/all-blog.org"
|
||||
"d:/emacs/my-org-daily/")))) ; agenda文件,目录或文件
|
||||
(when *is-mac*
|
||||
(with-eval-after-load 'org
|
||||
(setq org-agenda-files '("~/org/my-org-daily"))))
|
||||
|
||||
(setq org-agenda-span 'day)
|
||||
|
||||
(setq org-default-priority ?D)
|
||||
|
||||
;; org-super-agenda 配置
|
||||
(use-package org-super-agenda
|
||||
:after org-agenda
|
||||
:config
|
||||
(org-super-agenda-mode))
|
||||
|
||||
;; org-ql
|
||||
(use-package org-ql)
|
||||
|
||||
;; 自定义已完成任务视图
|
||||
(setq org-agenda-custom-commands
|
||||
'(("pa" "Priority >= A"
|
||||
((tags-todo "+PRIORITY=\"A\"")))
|
||||
("pb" "Priority >= B"
|
||||
((tags-todo "+PRIORITY<=\"B\"")))
|
||||
("pc" "Priority >= C"
|
||||
((tags-todo "+PRIORITY<=\"C\"")))))
|
||||
|
||||
;; capture模板
|
||||
(when *is-windows*
|
||||
(setq org-capture-templates
|
||||
@@ -53,34 +169,13 @@
|
||||
|
||||
(global-set-key (kbd "C-c o c") 'org-capture)
|
||||
|
||||
(setq org-agenda-custom-commands
|
||||
'(("c" "important stuff"
|
||||
((tags-todo "+PRIORITY=\"A\"")))
|
||||
;; ...other commands here
|
||||
))
|
||||
|
||||
;; org-contrib 和 org-checklist
|
||||
(use-package org-contrib
|
||||
:straight (org-contrib :type git :host github :repo "emacsmirror/org-contrib"
|
||||
:depth 1))
|
||||
|
||||
(add-hook 'org-mode-hook
|
||||
(lambda ()
|
||||
(require 'org-checklist nil t)))
|
||||
|
||||
;; agenda相关
|
||||
(global-set-key (kbd "C-c a") 'org-agenda)
|
||||
|
||||
(when *is-windows*
|
||||
(with-eval-after-load 'org
|
||||
(setq org-agenda-files '("d:/emacs/org/learning-org-mode.org"
|
||||
"d:/emacs/hugo/this-is-my-blog/all-blog.org"
|
||||
"d:/emacs/my-org-daily/")))) ; agenda文件,目录或文件
|
||||
(when *is-mac*
|
||||
(with-eval-after-load 'org
|
||||
(setq org-agenda-files '("~/org/my-org-daily"))))
|
||||
|
||||
(setq org-agenda-span 'day)
|
||||
;; 批量调整表格
|
||||
(defun org-table-align-all ()
|
||||
"Ajust all table in current buffer."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(org-table-map-tables 'org-table-align t)))
|
||||
|
||||
;; hugo
|
||||
(with-eval-after-load 'org-capture
|
||||
@@ -151,85 +246,4 @@ See `org-capture-templates' for more information."
|
||||
|
||||
(global-set-key (kbd "C-c o v") 'my-blog-preview)
|
||||
|
||||
;; 批量调整表格
|
||||
(defun org-table-align-all ()
|
||||
"Ajust all table in current buffer."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(org-table-map-tables 'org-table-align t)))
|
||||
|
||||
;; org-journal
|
||||
(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 "%R \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))))
|
||||
|
||||
(when *is-windows*
|
||||
(setq org-journal-dir "D:/emacs/my-org-daily/"))
|
||||
|
||||
(when *is-mac*
|
||||
(setq org-journal-dir "~/org/my-org-daily/"))
|
||||
|
||||
(add-hook 'org-journal-mode-hook 'font-lock-update)
|
||||
|
||||
(defun my/journal-setup-new-day ()
|
||||
(save-excursion
|
||||
(org-back-to-heading)
|
||||
(let ((day-end (save-excursion (org-end-of-subtree) (point))))
|
||||
(unless (search-forward "** daily" day-end t)
|
||||
(goto-char day-end)
|
||||
(insert "\n\n** daily\n\n\n")
|
||||
(insert "** tasks\n")))))
|
||||
|
||||
(add-hook 'org-journal-after-header-create-hook #'my/journal-setup-new-day)
|
||||
|
||||
(defun my/journal-position-cursor-after-time ()
|
||||
(when (derived-mode-p 'org-journal-mode)
|
||||
(org-back-to-heading)
|
||||
(end-of-line)))
|
||||
|
||||
(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."))))
|
||||
|
||||
(defun my/org-journal-mark-old-todos-as-comment (entries)
|
||||
"Change of TODO entry's TODO key word 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))
|
||||
|
||||
(setq org-journal-handle-old-carryover-fn #'my/org-journal-mark-old-todos-as-comment))
|
||||
|
||||
;; 在org-journal加载cns-mode
|
||||
(add-hook 'org-journal-mode-hook
|
||||
(lambda ()
|
||||
(global-cns-mode-enable-in-buffer)))
|
||||
|
||||
(provide 'init-org)
|
||||
|
||||
@@ -45,7 +45,23 @@
|
||||
:init (marginalia-mode))
|
||||
|
||||
;; 安装consult,增强搜索和其他菜单
|
||||
(use-package consult)
|
||||
(use-package consult
|
||||
:config
|
||||
|
||||
(defun consult-fd-global ()
|
||||
"Search for all files use fd"
|
||||
(interactive)
|
||||
(let ((consult-fd-args "fd -H -I -i -c never --full-path")
|
||||
(default-directory "~/"))
|
||||
(consult-fd)))
|
||||
|
||||
(if *is-windows*
|
||||
(progn
|
||||
(setq consult-locate-args (encode-coding-string "es.exe -i -p -r" 'gbk))
|
||||
(add-to-list 'process-coding-system-alist '("es" gbk . gbk))))
|
||||
|
||||
(when *is-mac*
|
||||
(setopt consult-locate-args "mdfind -name")))
|
||||
|
||||
;; 安装embark,一个菜单,用用就明白了
|
||||
(use-package embark
|
||||
@@ -65,17 +81,6 @@
|
||||
'embark-collect-mode-hook
|
||||
#'consult-preview-at-point-mode))))
|
||||
|
||||
(define-key minibuffer-local-map (kbd "C-c C-e") 'embark-export)
|
||||
|
||||
(if *is-windows*
|
||||
(progn
|
||||
(setq consult-locate-args (encode-coding-string "es.exe -i -p -r" 'gbk))
|
||||
(add-to-list 'process-coding-system-alist '("es" gbk . gbk))))
|
||||
|
||||
(when *is-mac*
|
||||
(setopt consult-locate-args "mdfind -name"))
|
||||
|
||||
|
||||
;; 启用savehist,保存命令顺序
|
||||
(use-package savehist
|
||||
:hook (after-init . savehist-mode)
|
||||
|
||||
Reference in New Issue
Block a user