config: update org-mode, UI settings, and add EMMS media player

- Add EMMS music player configuration with mpv support
- Refine org-mode with preload, new capture templates, and agenda setup
- Update keybindings for windows, ibuffer, and org-store-link
- Improve line number display settings
This commit is contained in:
trogloxene
2026-03-21 02:23:35 +08:00
parent 279a050165
commit d6f0dae461
6 changed files with 259 additions and 40 deletions

View File

@@ -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 "<mouse-5>") 'mc/mark-pop)
;; 快速复制当前行
(defun duplicate-and-move-to-next-line()
@@ -89,6 +90,9 @@
(global-set-key (kbd "<mouse-5>") '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 <delete>切换到scrath buffer
(global-set-key (kbd "C-c <delete>") 'scratch-buffer)
;; 使用M-<方向键>调整window
(global-set-key (kbd "M-<left>") 'shrink-window-horizontally)
(global-set-key (kbd "M-<right>") 'enlarge-window-horizontally)
(global-set-key (kbd "M-<up>") 'enlarge-window)
(global-set-key (kbd "M-<down>") 'shrink-window)
;; 调整window
(global-set-key (kbd "<f5>") 'shrink-window-horizontally)
(global-set-key (kbd "<f6>") 'enlarge-window-horizontally)
(global-set-key (kbd "<f7>") 'enlarge-window)
(global-set-key (kbd "<f8>") 'shrink-window)
;; crux相关
(global-set-key (kbd "C-<backspace>") '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-<tab>") '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 "<mouse-2>"))
(local-set-key (kbd "<mouse-2>") '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 "<prior>"))
(local-unset-key (kbd "<next>"))
(local-set-key (kbd "<prior>") 'emms-previous)
(local-set-key (kbd "<next>") '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)

View File

@@ -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))

View File

@@ -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)