290 lines
8.0 KiB
EmacsLisp
290 lines
8.0 KiB
EmacsLisp
;;; init-package.el
|
||
;;; -*- lexical-binding: t -*-
|
||
|
||
(setopt use-package-enable-imenu-support t)
|
||
|
||
;; 安装gcmh用于管理内存回收
|
||
(use-package gcmh
|
||
:init
|
||
(setq gcmh-idle-delay 5 ; 空闲 5 秒后 GC
|
||
gcmh-high-cons-threshold (* 16 1024 1024)) ; 高阈值 16MB
|
||
:config
|
||
(gcmh-mode 1))
|
||
|
||
(use-package restart-emacs)
|
||
|
||
;; 安装multiple-cursors
|
||
(use-package multiple-cursors)
|
||
|
||
;; 安装crux,增强快捷键,快捷键配置在init-kbd.el中
|
||
(use-package crux)
|
||
|
||
;; 安装hungry-delete
|
||
(use-package hungry-delete)
|
||
|
||
;; 安装drag-stuff,拖动字符
|
||
(use-package drag-stuff)
|
||
|
||
;; 安装which-key,快捷键提示
|
||
(use-package which-key
|
||
:defer 0
|
||
:config
|
||
(which-key-mode))
|
||
|
||
;; 安装vertico
|
||
(use-package vertico
|
||
:init (vertico-mode t))
|
||
|
||
;; 安装orderless,用于模糊搜索
|
||
(use-package orderless
|
||
:custom (completion-styles '(orderless basic)))
|
||
|
||
;; 安装marginalia,用于命令注释
|
||
(use-package marginalia
|
||
:init (marginalia-mode))
|
||
|
||
;; 安装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
|
||
:config (setq prefix-help-command 'embark-prefix-help-command))
|
||
|
||
;; 安装embark-consult和wgrep
|
||
(use-package embark-consult)
|
||
(use-package wgrep)
|
||
|
||
(with-eval-after-load
|
||
'consult
|
||
'(with-eval-after-load
|
||
'embark
|
||
'(progn
|
||
(require 'embark-consult)
|
||
(add-hook
|
||
'embark-collect-mode-hook
|
||
#'consult-preview-at-point-mode))))
|
||
|
||
;; 启用savehist,保存命令顺序
|
||
(use-package savehist
|
||
:hook (after-init . savehist-mode)
|
||
:init (setq enable-recursive-minibuffers t
|
||
history-length 50
|
||
savehist-additional-variables '(mark-ring
|
||
global-mark-ring
|
||
search-ring
|
||
regexp-search-ring
|
||
extended-command-history)
|
||
savehist-autosave-interval 300))
|
||
|
||
;; saveplace,保存光标位置
|
||
(use-package saveplace
|
||
:hook (after-init . save-place-mode))
|
||
|
||
;; undo增强
|
||
(use-package undo-fu)
|
||
|
||
(use-package undo-fu-session
|
||
:init (undo-fu-session-global-mode))
|
||
|
||
;; vundop,撤回树
|
||
(use-package vundo
|
||
:init (setq undo-limit 800000
|
||
undo-strong-limit 1200000
|
||
undo-outer-limit 12000000))
|
||
|
||
;; expand-region,快速展开选中
|
||
(use-package expand-region)
|
||
|
||
;; ibuffer-projectile
|
||
(use-package ibuffer-projectile
|
||
:init (add-hook 'ibuffer-hook
|
||
(lambda ()
|
||
(ibuffer-projectile-set-filter-groups)
|
||
(unless (eq ibuffer-sorting-mode 'alphabetic)
|
||
(ibuffer-do-sort-by-alphabetic)))))
|
||
|
||
(use-package ace-pinyin
|
||
:init (ace-pinyin-global-mode +1))
|
||
|
||
;; 安装ox-hugo
|
||
(use-package ox-hugo
|
||
:custom
|
||
(empv-mpv-args '("--force-window=immediate"
|
||
"--keep-open=yes"
|
||
"--fs=no")))
|
||
|
||
;; 安装emms
|
||
(use-package emms
|
||
:init
|
||
;; 设置音乐文件默认目录
|
||
(when *is-windows*
|
||
(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))
|
||
|
||
;; vterm
|
||
(unless *is-windows*
|
||
(use-package vterm))
|
||
|
||
(provide 'init-package)
|