diff --git a/custom.el b/custom.el index 8219b7c..0f14e01 100644 --- a/custom.el +++ b/custom.el @@ -9,6 +9,9 @@ "7fea145741b3ca719ae45e6533ad1f49b2a43bf199d9afaee5b6135fd9e6f9b8" "2b0fcc7cc9be4c09ec5c75405260a85e41691abb1ee28d29fcd5521e4fca575b" default)) + '(org-agenda-files + '("d:/emacs/org/learning-org-mode.org" + "d:/emacs/hugo/this-is-my-blog/all-blog.org")) '(package-selected-packages '(ace-window benchmark-init cape cnfonts corfu crux drag-stuff eglot embark-consult everything exec-path-form-shell gcmh diff --git a/early-init.el b/early-init.el index e67bf43..b0e34a1 100644 --- a/early-init.el +++ b/early-init.el @@ -1,11 +1,13 @@ (setq package-enable-at-startup nil) -(setq inhibit-startup-screen t) ;; 禁用开始菜单 -(tool-bar-mode -1) ;; 禁用工具栏 -(menu-bar-mode -1) ;; 禁用菜单栏 -(scroll-bar-mode -1) ;; 禁用滚动条 +(setq inhibit-startup-screen t) ; 禁用开始菜单 +(tool-bar-mode -1) ; 禁用工具栏 +(menu-bar-mode -1) ; 禁用菜单栏 +(scroll-bar-mode -1) ; 禁用滚动条 (setq display-line-numbers-type '2) -(global-display-line-numbers-mode t) ;; 启用行号 +(global-display-line-numbers-mode t) ; 启用行号 +(setq display-line-numbers-grow-only t) ; 行号栏只增不减 +(setq display-line-numbers-width-start 4) ; 预设4位宽度 ;; 启动时初始窗口最大化 (add-to-list 'initial-frame-alist '(fullscreen . maximized)) diff --git a/init.el b/init.el index c8acafa..9210c17 100644 --- a/init.el +++ b/init.el @@ -18,3 +18,4 @@ (require 'init-kbd) (require 'init-ui) (require 'init-segmentation) +(put 'scroll-left 'disabled nil) diff --git a/lisp/init-kbd.el b/lisp/init-kbd.el index 6d8f80b..4320f3a 100644 --- a/lisp/init-kbd.el +++ b/lisp/init-kbd.el @@ -36,6 +36,7 @@ (global-set-key (kbd "C-c c a") 'mc/mark-all-in-region) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C->") 'mc/mark-next-like-this) +(global-set-key (kbd "") 'mc/mark-pop) ;; 快速复制当前行 (defun duplicate-and-move-to-next-line() @@ -89,6 +90,9 @@ (global-set-key (kbd "") 'next-buffer) (global-set-key (kbd "M-]") 'next-buffer) +;; 打开ibuffer +(global-set-key (kbd "C-x B") 'ibuffer) + ;; 段落导航 (global-set-key (kbd "M-p") 'backward-paragraph) (global-set-key (kbd "M-n") 'forward-paragraph) @@ -103,11 +107,11 @@ ;; 使用C-c 切换到scrath buffer (global-set-key (kbd "C-c ") 'scratch-buffer) -;; 使用M-<方向键>调整window -(global-set-key (kbd "M-") 'shrink-window-horizontally) -(global-set-key (kbd "M-") 'enlarge-window-horizontally) -(global-set-key (kbd "M-") 'enlarge-window) -(global-set-key (kbd "M-") 'shrink-window) +;; 调整window +(global-set-key (kbd "") 'shrink-window-horizontally) +(global-set-key (kbd "") 'enlarge-window-horizontally) +(global-set-key (kbd "") 'enlarge-window) +(global-set-key (kbd "") 'shrink-window) ;; crux相关 (global-set-key (kbd "C-") 'crux-kill-line-backwards) ;; C-DEL kill line backwards @@ -167,7 +171,8 @@ (global-set-key (kbd "C-c f d") 'my-open-current-directory) -;; org-mode +;; org-mode相关 +;; cycle当前subtree (defun org-cycle-current-subtree() "Cycle current org-mode subtree." (interactive) @@ -175,4 +180,39 @@ (org-cycle)) (global-set-key (kbd "C-") 'org-cycle-current-subtree) +;; 存储一个链接 +(global-set-key (kbd "C-c l") 'org-store-link) + + +;; emms + +(global-set-key (kbd "C-c m n") 'emms-next) +(global-set-key (kbd "C-c m p") 'emms-previous) +(global-set-key (kbd "C-c m b") 'emms-browser) +(global-set-key (kbd "C-c m q") 'emms-stop) +(global-set-key (kbd "C-c m S") 'emms-toggle-single-track) ;自动连播开关 + +(with-eval-after-load 'embark + (define-key embark-file-map (kbd "p") 'emms-play-dired)) + +(add-hook 'dired-mode-hook + (lambda () + (local-unset-key (kbd "")) + (local-set-key (kbd "") 'emms-play-dired) + (local-set-key (kbd "C-c m a") 'emms-add-dired))) + +(add-hook 'emms-playlist-mode-hook + (lambda () + (local-unset-key (kbd "")) + (local-unset-key (kbd "")) + (local-set-key (kbd "") 'emms-previous) + (local-set-key (kbd "") 'emms-next))) + + +(defun switch-to-emms-playlist() + (interactive) + (switch-to-buffer "*EMMS Playlist*")) +(global-set-key (kbd "C-c m l") 'switch-to-emms-playlist) + + (provide 'init-kbd) diff --git a/lisp/init-org.el b/lisp/init-org.el index ae6bf02..f0891a0 100644 --- a/lisp/init-org.el +++ b/lisp/init-org.el @@ -3,21 +3,55 @@ (use-package org) -;; (if *is-windows* -;; (progn (run-with-idle-timer -;; 0.5 nil -;; (lambda () -;; (with-temp-buffer -;; (org-mode) -;; (org-mode)) -;; (message "Org preloaded"))))) +;; 预加载,防止windows的org-mode加载卡顿 +(if *is-windows* + (progn (run-with-idle-timer + 0.5 nil + (lambda () + (with-temp-buffer + (org-mode) + (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)) + +;; log默认放入drawer中 +(setq org-log-done t) +(setq org-log-into-drawer t) + +;; 将系统时间(星期)设为英文,防止中文乱码 (setq system-time-locale "C") +;; capture模板 +(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"))) + +(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" @@ -27,25 +61,11 @@ (lambda () (require 'org-checklist nil t))) -(setq org-log-done t) -(setq org-log-into-drawer t) - +;; agenda相关 (global-set-key (kbd "C-c a") 'org-agenda) -(setq org-agenda-files '("d:/emacs/org/learning-org-mode.org")) +(setq org-agenda-files '("d:/emacs/org/learning-org-mode.org")) ; agenda文件,目录或单个文件 (setq org-agenda-span 'day) -(setq org-capture-templates - '(("t" "Todo" entry (file+headline "d:/emacs/org/learning-org-mode.org" "Workspace") - "* TODO [#B] %?\n %i\n %U" - :empty-lines 1))) - -(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 - )) ;; hugo (with-eval-after-load 'org-capture @@ -116,12 +136,9 @@ See `org-capture-templates' for more information." (global-set-key (kbd "C-c o v") 'my-blog-preview) -;; org tempo -;; (require 'org-tempo) - ;; 批量调整表格 (defun org-table-align-all () - "Ajust all org table in current buffer." + "Ajust all table in current buffer." (interactive) (save-excursion (goto-char (point-min)) diff --git a/lisp/init-package.el b/lisp/init-package.el index c529987..67c2b97 100644 --- a/lisp/init-package.el +++ b/lisp/init-package.el @@ -89,6 +89,162 @@ :hook (after-init . save-place-mode)) ;; 安装ox-hugo -(use-package ox-hugo) +(use-package ox-hugo + :custom + (empv-mpv-args '("--force-window=immediate" + "--keep-open=yes" + "--fs=no"))) + +;; 安装emms +(use-package emms + :init + ;; 设置音乐文件默认目录 + (setq emms-source-file-default-directory "F:/luping26-1-11/") + + :config + ;; --- 基础设置 --- + (require 'emms-setup) + (emms-all) ; 加载所有稳定功能 + + ;; 使用简单模式的 mpv 播放器 + ;; 移除默认的 emms-player-mpv + (require 'emms-player-simple) + + ;; 定义简单的 mpv 播放器 + (define-emms-simple-player mpv-simple '(file url streamlist playlist) + (concat "\\.\\(" + (mapconcat 'identity + '("mp3" "mp4" "avi" "mkv" "flv" "mov" "wmv" "webm" + "ogg" "ogv" "oga" "ogx" + "flac" "wav" "aac" "m4a" "wma" + "mpg" "mpeg" "mpe" "mpv" + "3gp" "3g2" + "m3u" "pls") + "\\|") + "\\)\\'\\|http[s]?://") + "mpv" + "--force-window=immediate" + "--keep-open=yes" + "--fs=no" + "--quiet") + + ;; 设置播放器列表 + (setq emms-player-list '(emms-player-mpv-simple + emms-player-vlc + emms-player-mplayer)) + + (setq emms-playlist-default-playlist-name "*EMMS Playlist*") + (setq emms-playlist-buffer-name "*EMMS Playlist*") + + ;; 使用更快的文件查找方法(windows上需要使用internal) + ;; (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find) + (setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-internal) + + ;; 使用原生 Elisp 元数据读取器 + (setq emms-info-functions '(emms-info-native)) + + ;; 异步读取元数据 + (setq emms-info-asynchronously t) + + ;; 使用更详细的曲目描述 + (setq emms-track-description-function #'emms-info-track-description) + + ;; 模式行设置 + (require 'emms-mode-line) + (emms-mode-line-mode 1) + (emms-mode-line-blank) ; 初始为空 + + ;; 自定义模式行格式 + (setq emms-mode-line-format " [%s] ") + (setq emms-mode-line-length-limit 60) + + ;; 播放时间显示 + (require 'emms-playing-time) + (emms-playing-time-mode 1) + + ;; 歌词设置 + (require 'emms-lyrics) + (setq emms-lyrics-display-on-modeline t) ; 在模式行显示歌词 + (setq emms-lyrics-display-on-minibuffer nil) ; 不在 minibuffer 显示 + (setq emms-lyrics-display-buffer nil) ; 不使用专用缓冲区 + (setq emms-lyrics-scroll-p t) ; 启用歌词滚动 + (setq emms-lyrics-scroll-timer-interval 0.4) ; 滚动间隔 + (setq emms-lyrics-dir "~/Music/lyrics") ; 歌词文件目录 + (setq emms-lyrics-display-format " %s ") ; 歌词显示格式 + (emms-lyrics 1) ; 启用歌词显示 + + ;; 浏览器设置 + (require 'emms-browser) + (setq emms-browser-default-browse-type 'artist) + (setq emms-browser-covers nil) ; 禁用封面 + + ;; 浏览器显示格式 + (setq emms-browser-info-title-format "%i%n") + (setq emms-browser-playlist-info-title-format "%i%n") + + ;; 添加浏览器快捷键 + (define-key emms-browser-mode-map (kbd "SPC") 'emms-browser-add-tracks-and-play) + + ;; 缓存设置 + (require 'emms-cache) + (emms-cache 1) ; 启用缓存 + + ;; 历史记录 + (require 'emms-history) + (add-hook 'emms-player-started-hook #'emms-last-played-update-current) + + ;; 音量控制 + (require 'emms-volume) + ;; 在播放列表中使用 +/- 控制音量 + (define-key emms-playlist-mode-map (kbd "+") #'emms-volume-raise) + (define-key emms-playlist-mode-map (kbd "-") #'emms-volume-lower) + + ;; 添加(playlist中的)快捷键 + (define-key emms-playlist-mode-map (kbd "SPC") 'emms-pause) + (define-key emms-playlist-mode-map (kbd "N") 'emms-next) + (define-key emms-playlist-mode-map (kbd "P") 'emms-previous) + (define-key emms-playlist-mode-map (kbd "R") 'emms-random) + (define-key emms-playlist-mode-map (kbd "/") 'emms-playlist-limit) + + ;; 启用标记功能 + (require 'emms-mark) + + ;; 启用播放列表排序 + (require 'emms-playlist-sort) + (define-key emms-playlist-mode-map (kbd "S s") 'emms-playlist-sort-map) + + ;; 启用播放列表限制/过滤 + (require 'emms-playlist-limit) + + ;; 启用标签编辑器 + (require 'emms-tag-editor) + + ;; 启用评分系统 + (require 'emms-score) + (emms-score 1) + + ;; 启动后自动恢复播放列表 + ;; (add-hook 'after-init-hook 'emms-history-load) + + ;; 显示加载完成消息 + (message "EMMS loaded") + + ;; 关闭自动连播 + (add-hook 'emms-playlist-mode-hook + (lambda () + (setq emms-single-track t)))) + +;; 提供 EMMS 快捷启动函数 +(defun my-emms-start-browser () + "Open emms browser." + (interactive) + (emms-browser) + (message "EMMS browser loaded")) + +(defun my-emms-play-directory (dir) + "Play all files in directory.." + (interactive "Dchoose a directory: ") + (emms-play-directory-tree dir) + (message "playing: %s" dir)) (provide 'init-package)