feat(emacs-org): Add pomodoro and system notifications

This commit is contained in:
js0ny 2025-02-02 07:08:14 +00:00
parent 87c237684b
commit 5d0dffd327
11 changed files with 155 additions and 74 deletions

View file

@ -20,10 +20,31 @@
(use-package catppuccin-theme
:config
(setq catppuccin-flavor 'mocha) ; This looks like shit in terminal mode
(load-theme 'catppuccin t))
;; (load-theme 'catppuccin t)
)
(use-package doom-themes
:ensure t
:config
;; Global settings (defaults)
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled
doom-themes-enable-italic t) ; if nil, italics is universally disabled
(load-theme 'doom-nord-aurora t)
;; Enable flashing mode-line on errors
(doom-themes-visual-bell-config)
;; Enable custom neotree theme (nerd-icons must be installed!)
;; (doom-themes-neotree-config)
;; or for treemacs users
(setq doom-themes-treemacs-theme "doom-nord-aurora") ; use "doom-colors" for less minimal icon theme
(doom-themes-treemacs-config)
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
;; Better mode line, see (L7) Icon install
;; Better mode line, see (L11) for Icon install
;; M-x nerd-icons-install-fonts
(use-package doom-modeline
:ensure t
@ -31,4 +52,6 @@
(global-tab-line-mode) ; bufferline
(provide 'init-appearance)

View file

@ -15,8 +15,6 @@
(prog-mode . display-line-numbers-mode))
;; Auto input pairred brackets
(electric-pair-mode 1)
;; https://book.emacs-china.org/#orgcfd105e Open with Emacs
(server-mode 1)
@ -25,10 +23,15 @@
(require 'recentf)
(recentf-mode 1)
;; Disable toobar and scrollbar
;; Disable topbars
(tool-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-mode -1)
(use-package alert
:commands (alert)
:config
(setq alert-default-style 'toast))
;; Export module
(provide 'init-basic)

View file

@ -3,6 +3,9 @@
;; Use UTF-8 & LF
(setq-default buffer-file-coding-system 'utf-8-unix)
;; Auto input pairred brackets
(electric-pair-mode 1)
;; Company - Complete Anything
(use-package company
:ensure t
@ -25,12 +28,13 @@
(marginalia-mode))
;; (set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8)
;; (prefer-coding-system 'utf-8)
;;; 设置语言环境为 UTF-8
;(set-language-environment "UTF-8")
;
;;; 强制使用 UTF-8
;(prefer-coding-system 'utf-8)
;(set-default-coding-systems 'utf-8)
;(set-terminal-coding-system 'utf-8)
;(set-keyboard-coding-system 'utf-8)
;
@ -54,4 +58,11 @@
(setq-default buffer-file-coding-system 'utf-8-unix)
;; Avy - act like Vim Easymotion
(use-package avy
:config
(evil-define-key '(normal) 'global (kbd "T") 'avy-goto-char)
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2)
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2-above))
(provide 'init-edit)

View file

@ -53,5 +53,13 @@
;; Treemacs mode specific binding
(evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action))
;; magit - Git Client
(use-package magit
:ensure t
:after (evil-leader)
:config
(evil-leader/set-key
"g" 'magit-status)
)
(provide 'init-file)

View file

@ -1,11 +1,8 @@
;;; init-keymaps.el
;; Once this is defined, `M-x open-init-file` will open this file
(defun open-init-file()
(defun open-org-config()
(interactive) ;; Mark function as `interactive` that allows user to access by M-x open-init-file RET
(find-file "~/.emacs.d/init.el"))
(defun reload-init()
(interactive)
(load-file "~/.emacs.d/init.el"))
(find-file "~/.emacs.d/lisp/init-org.el"))
(provide 'init-keymaps)

View file

@ -39,10 +39,8 @@
("~" (org-code verbatim :background "deep sky blue" :foreground "MidnightBlue"))
("+" (:strike-through t))))
(use-package org-bullets
:after org
:hook (org-mode . org-bullets-mode))
;; Better LaTeX preview
(use-package org-fragtog
:after org
:hook (org-mode . org-fragtog-mode))
@ -104,5 +102,66 @@
(global-set-key (kbd "C-c b") (lambda () (interactive) (my/insert-emphasis-with-zws ?*)))
(global-set-key (kbd "C-c i") (lambda () (interactive) (my/insert-emphasis-with-zws ?/)))
;; Pomodoro for org clock
(use-package org-pomodoro)
;; Org Styles Integration
(use-package org-modern
:ensure t
:after (org)
:config
(with-eval-after-load 'org (global-org-modern-mode))
;; https://github.com/minad/org-modern/issues/232
(setq org-modern-fold-stars
'(("" . "")
("" . "")
;; ("⯈" . "⯆")
("" . "")
("" . "")
("" . ""))
)
)
(use-package mixed-pitch
:hook
(text-mode . org-mode))
;; Integrate Emacs Timer with System Notifications
;; 定义通知函数
(defun my/org-clock-notification (title message &optional icon)
"发送一个系统通知"
(alert message
:title title
:icon icon
:category 'org-clock))
;; 添加定时器检查函数
(defun my/org-clock-check-timer ()
"检查当前正在运行的 clock 是否到期"
(when (org-clocking-p)
(let* ((clocked-time (org-clock-get-clocked-time))
(effort (org-duration-to-minutes
(or (org-entry-get (org-clock-is-active) "Effort")
"0")))
(remaining (- effort clocked-time)))
(when (and (> effort 0) (<= remaining 0))
(my/org-clock-notification
"Org Clock 提醒"
(format "任务 '%s' 的预计时间已到!"
(org-clock-get-clock-string)))))))
;; 设置定时器,每分钟检查一次
(run-with-timer 0 60 #'my/org-clock-check-timer)
;; 在 org-clock-in-hook 中添加检查
(add-hook 'org-clock-in-hook
(lambda ()
(let ((effort (org-entry-get (point) "Effort")))
(when effort
(my/org-clock-notification
"开始计时"
(format "开始计时任务: %s\n预计用时: %s"
(org-get-heading t t t t)
effort))))))
(provide 'init-org)