From 5d0dffd3273572b606a59cc4a275f00d9b1b8089 Mon Sep 17 00:00:00 2001 From: js0ny Date: Sun, 2 Feb 2025 07:08:14 +0000 Subject: [PATCH] feat(emacs-org): Add pomodoro and system notifications --- .gitignore | 2 + tools/bash/profile | 3 -- tools/browser/surfingkeys.js | 33 ++++++++++++++ tools/emacs.d/.gitignore | 3 ++ tools/emacs.d/lisp/init-appearance.el | 27 ++++++++++- tools/emacs.d/lisp/init-basic.el | 9 ++-- tools/emacs.d/lisp/init-edit.el | 17 +++++-- tools/emacs.d/lisp/init-file.el | 8 ++++ tools/emacs.d/lisp/init-keymaps.el | 7 +-- tools/emacs.d/lisp/init-org.el | 65 +++++++++++++++++++++++++-- tools/nvim/lazy-lock.json | 55 ----------------------- 11 files changed, 155 insertions(+), 74 deletions(-) delete mode 100644 tools/nvim/lazy-lock.json diff --git a/.gitignore b/.gitignore index cbaaf90..51abb34 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ common/fzfrc gitconfig spacemacs/ + +lazy-lock.json diff --git a/tools/bash/profile b/tools/bash/profile index 66b160c..e0513d6 100644 --- a/tools/bash/profile +++ b/tools/bash/profile @@ -23,9 +23,6 @@ pathadd() { fi } -pathadd "$HOME/.local/bin" -pathadd "$HOME/.local/sbin" - # Dynamically Add Path minimal_path=( diff --git a/tools/browser/surfingkeys.js b/tools/browser/surfingkeys.js index bf73458..5184163 100644 --- a/tools/browser/surfingkeys.js +++ b/tools/browser/surfingkeys.js @@ -1,6 +1,9 @@ // Paste this into surfingkeys advanced settings // or use: // Load settings from: https://raw.githubusercontent.com/js0ny/dotfiles/refs/heads/master/tools/browser/surfingkeys.js +// Browse to Extension > Surfingkeys > Allow access to file URLs to enable local file access +// Windows: file:///C:/Users/username/.dotfiles/tools/browser/surfingkeys.js +// *nix: file:///home/username/.dotfiles/tools/browser/surfingkeys.js // #region Example /** Examples @@ -244,6 +247,8 @@ api.unmap(""); // Leader Key forwardFactory.pull(mapLists); vForwardFactory.pull(vMapLists); + +api.map("gH", "g/"); // #endregion // #region Omnibar NOTE: Dosn't work @@ -490,6 +495,34 @@ mapkey(",r", "Change model to regenerate last output", function () { }, { domain: /perplexity.ai/ }); // #endregion +// #region pixiv.net +// Use site-specific paging method +unmap("[[", /pixiv.net/); +unmap("]]", /pixiv.net/); +mapkey("[[", "Previous Page", function () { + const url = new URL(window.location.href); + if (url.href === url.origin) { + return; + } + const page = url.searchParams.get("p"); + const newPage = page ? parseInt(page) - 1 : 1; + url.searchParams.set("p", newPage); + window.location.href = url.href; +}, { domain: /pixiv.net/ }); + +mapkey("]]", "Next Page", function () { + const url = new URL(window.location.href); + if (url.href === url.origin) { + return; + } + const page = url.searchParams.get("p"); + const newPage = page ? parseInt(page) + 1 : 2; + url.searchParams.set("p", newPage); + window.location.href = url.href; +}, { domain: /pixiv.net/ }); +// #endregion + + // #endregion // #region ACE Editor diff --git a/tools/emacs.d/.gitignore b/tools/emacs.d/.gitignore index c1f6a2c..b7b92e2 100644 --- a/tools/emacs.d/.gitignore +++ b/tools/emacs.d/.gitignore @@ -4,6 +4,7 @@ /eshell/ /server/ /url/ +transient/ # 临时文件 tutorial @@ -22,3 +23,5 @@ custom.el .org-id-locations bookmarks .cache +eln-cache +org-persist diff --git a/tools/emacs.d/lisp/init-appearance.el b/tools/emacs.d/lisp/init-appearance.el index a104bb4..958326b 100644 --- a/tools/emacs.d/lisp/init-appearance.el +++ b/tools/emacs.d/lisp/init-appearance.el @@ -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) diff --git a/tools/emacs.d/lisp/init-basic.el b/tools/emacs.d/lisp/init-basic.el index e6cdc2e..4b9d091 100644 --- a/tools/emacs.d/lisp/init-basic.el +++ b/tools/emacs.d/lisp/init-basic.el @@ -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) diff --git a/tools/emacs.d/lisp/init-edit.el b/tools/emacs.d/lisp/init-edit.el index c4b7fca..85b7d6c 100644 --- a/tools/emacs.d/lisp/init-edit.el +++ b/tools/emacs.d/lisp/init-edit.el @@ -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) diff --git a/tools/emacs.d/lisp/init-file.el b/tools/emacs.d/lisp/init-file.el index b1e5fd3..ff53a14 100644 --- a/tools/emacs.d/lisp/init-file.el +++ b/tools/emacs.d/lisp/init-file.el @@ -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) diff --git a/tools/emacs.d/lisp/init-keymaps.el b/tools/emacs.d/lisp/init-keymaps.el index 6ff989a..f0c2ebf 100644 --- a/tools/emacs.d/lisp/init-keymaps.el +++ b/tools/emacs.d/lisp/init-keymaps.el @@ -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) diff --git a/tools/emacs.d/lisp/init-org.el b/tools/emacs.d/lisp/init-org.el index d236994..4fb49ed 100644 --- a/tools/emacs.d/lisp/init-org.el +++ b/tools/emacs.d/lisp/init-org.el @@ -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) diff --git a/tools/nvim/lazy-lock.json b/tools/nvim/lazy-lock.json deleted file mode 100644 index cc24f68..0000000 --- a/tools/nvim/lazy-lock.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" }, - "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, - "auto-session": { "branch": "main", "commit": "16016db7f79d942a1538eaafb15a39f033f7a359" }, - "betterTerm.nvim": { "branch": "main", "commit": "5d3f41d9e8b3553d49764906a14e45a08dbe2308" }, - "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, - "catppuccin": { "branch": "main", "commit": "f67b886d65a029f12ffa298701fb8f1efd89295d" }, - "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, - "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" }, - "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, - "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "code_runner.nvim": { "branch": "main", "commit": "65218f8f646fe61e506090522df357539642ae83" }, - "conform.nvim": { "branch": "master", "commit": "363243c03102a531a8203311d4f2ae704c620d9b" }, - "copilot.vim": { "branch": "release", "commit": "87038123804796ca7af20d1b71c3428d858a9124" }, - "flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" }, - "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, - "gitsigns.nvim": { "branch": "main", "commit": "d8918f06624dd53b9a82bd0e29c31bcfd541b40d" }, - "grug-far.nvim": { "branch": "main", "commit": "82a81e0b5638667893d0d89f232dbb510cc5ab14" }, - "hover.nvim": { "branch": "main", "commit": "140c4d0ae9397b76baa46b87c574f5377de09309" }, - "kanagawa.nvim": { "branch": "master", "commit": "988082eb00b845e4afbcaa4fd8e903da8a3ab3b9" }, - "lazy.nvim": { "branch": "main", "commit": "d8f26efd456190241afd1b0f5235fe6fdba13d4a" }, - "lazydev.nvim": { "branch": "main", "commit": "a1b78b2ac6f978c72e76ea90ae92a94edf380cfc" }, - "lazygit.nvim": { "branch": "main", "commit": "77a0d42943d8265271e6e6beaed72da54eeb17e7" }, - "lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, - "luasnip-latex-snippets.nvim": { "branch": "main", "commit": "cab134611eb755abe9ba95f5d86969f5cece448d" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "e942edf5c85b6a2ab74059ea566cac5b3e1514a4" }, - "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, - "mini.pairs": { "branch": "main", "commit": "7e834c5937d95364cc1740e20d673afe2d034cdb" }, - "nvim-cmp": { "branch": "main", "commit": "12509903a5723a876abd65953109f926f4634c30" }, - "nvim-lspconfig": { "branch": "master", "commit": "1f941b3668151963fca3e1230922c433ea4b7b64" }, - "nvim-surround": { "branch": "main", "commit": "ae298105122c87bbe0a36b1ad20b06d417c0433e" }, - "nvim-tree.lua": { "branch": "master", "commit": "d529a99f88e0dff02e0aa275db2f595cd252a2c8" }, - "nvim-treesitter": { "branch": "master", "commit": "2206739829518c9ea59dbdb9003e0147fdaf2d1c" }, - "nvim-treesitter-context": { "branch": "master", "commit": "bece284c5322ddf6946fa4bdc383a2bc033269d7" }, - "nvim-web-devicons": { "branch": "master", "commit": "1c9136332840edee0c593f2f4f89598c8ed97f5f" }, - "obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" }, - "onedarkpro.nvim": { "branch": "main", "commit": "44775f8206ee43b692e7f3dc894ddc47996ee523" }, - "orgmode": { "branch": "master", "commit": "ac7821620462b69c32f237736996e67ab291058b" }, - "plenary.nvim": { "branch": "master", "commit": "3707cdb1e43f5cea73afb6037e6494e7ce847a66" }, - "project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" }, - "render-markdown.nvim": { "branch": "main", "commit": "ad055861d17afe058bd835e82292e14a64b51b1d" }, - "telescope.nvim": { "branch": "master", "commit": "415af52339215926d705cccc08145f3782c4d132" }, - "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, - "trouble.nvim": { "branch": "main", "commit": "50481f414bd3c1a40122c1d759d7e424d5fafe84" }, - "vim-floaterm": { "branch": "master", "commit": "4e28c8dd0271e10a5f55142fb6fe9b1599ee6160" }, - "vim-illuminate": { "branch": "master", "commit": "5eeb7951fc630682c322e88a9bbdae5c224ff0aa" }, - "vim-just": { "branch": "main", "commit": "0f7d26de0c48e2620b733e51f4159aae13dc3bee" }, - "vim-visual-multi-colemak-hnei": { "branch": "master", "commit": "2cc37d77590d6569d991ebd8d96ab5867eb5a47a" }, - "vim-wakatime": { "branch": "master", "commit": "e46d7c4f98ee0f40782008dd60cb2a79c377fb1d" }, - "vimtex": { "branch": "master", "commit": "83e331dcad5ce28012e656eea3906b5b897db2ba" }, - "which-key.nvim": { "branch": "main", "commit": "6cebd86917df559a88de0f806b2989799c6e6423" }, - "winbar.nvim": { "branch": "main", "commit": "13739fdb31be51a1000486189662596f07a59a31" }, - "yanky.nvim": { "branch": "main", "commit": "d2696b30e389dced94d5acab728f524a25f308d2" } -}