#+title: Cytrogen's Emacs Configuration #+author: Cytrogen #+language: zh-CN 模块化的 Emacs 配置,面向中文写作、博客发布、阅读和日常开发。 Emacs 28.1+ | [[file:themes/darcula-theme.el][Darcula 主题]] * 模块概览 | 模块 | 说明 | |---------------------+-------------------------------------------| | =core-settings.el= | 编码、包管理、补全框架、内置功能增强 | | =ui-theme-fonts.el= | 字体(中英文/Emoji/Nerd Icons)、主题、视觉 | | =keybindings.el= | 全局快捷键(70+ 绑定) | | =utils.el= | Dashboard、文件工具函数 | | =pkg-org.el= | Org-mode:动态 Capture/Refile、Agenda | | =pkg-blog.el= | 博客工作流:月刊、Hexo/Gemini 导出 | | =pkg-writing.el= | 写作工具:Hugo 导出、自定义链接类型 | | =pkg-dev.el= | 开发:LSP、Tree-sitter、终端、代码工具 | | =pkg-git.el= | Git:Magit、diff-hl、timemachine | | =pkg-email.el= | 邮件:mu4e 多账户、OAuth2 | | =pkg-reading.el= | 阅读:RSS、OPDS 电子书、PDF/EPUB | | =pkg-social.el= | 社交:Mastodon、GPG 加密 | | =pkg-calendar.el= | 日历:Google Calendar 双向同步 | | =pkg-dictionary.el= | 词典:sdcv 离线查词、GoldenDict | * 核心功能 ** 补全框架 使用现代补全栈: - =vertico= — 垂直补全界面 - =orderless= — 模糊/乱序匹配 - =consult= — 增强搜索:buffer 切换、ripgrep、大纲跳转 - =embark= — 对补全候选执行上下文操作 - =marginalia= — 补全候选旁显示元信息 - =corfu= — 行内补全弹窗 + 文档预览 ** 中文字体支持 精细控制中英文字体分离,确保代码和写作场景各有最佳字体: | 场景 | 英文 | 中文 | |--------------+-------------------+-------------------| | 代码/默认 | JetBrains Mono | 思源黑体 | | 写作(变宽) | Source Serif 4 | 思源宋体 | | 标题 | Open Sans | Noto Sans SC | | 图标 | Symbols Nerd Font | — | | Emoji | Noto Color Emoji | — | Org-mode 中代码块、表格、属性强制等宽,正文使用衬线体。 ** 视觉增强 - =dimmer= — 非活动窗口变暗(30%) - =page-break-lines= — =^L= 显示为水平分隔线 - =centered-cursor-mode= — 光标始终居中 - =default-text-scale= — =C-M-== / =C-M--= 全局缩放字号 * 博客工作流 完整的 Capture → Refile → Export 博客发布流程。 ** 月刊系统 - =C-c b c= 创建当月月刊文件,使用中国传统历法命名(天干地支 + 月份) - =C-c b o= 打开当月月刊 - =C-c b r= 将 inbox 条目转入月刊 - =C-c b i= 批量转入所有 inbox 条目 ** 多格式导出 - =C-c b e= 导出月刊为 Hexo Markdown(含目录生成) - =C-c b p= 导出单篇文章 - =C-c b g= 导出为 Gemini 协议格式(=.gmi=) - =C-c b G= 生成 Gemini Capsule 首页索引 支持 Hexo 块标签(={% note %}=、={% em %}=)和自定义链接类型: - =[[em:着重内容]]= → 着重号(导出为 ={% em %}=) - =[[ruby:注音|文字]]= → Ruby 注音标记 ** Webmention 发布文章后通知被引用的站点([[https://www.w3.org/TR/webmention/][W3C 标准]]): - =C-c b w= 发现目标并打开 staging buffer - =C-c b W= 直接发送(指定 source 和 target) - =C-c b h= 查看发送历史 独立包:[[https://git.cytrogen.icu/~cytrogen/webmention.el][webmention.el]] * Org-mode 增强 ** 动态 Capture/Refile 系统 Capture 模板和 Refile 目标由 =org-structure.org= 数据驱动,无需修改 elisp 代码即可增减分类: - 一级标题定义分类(=FILE= + =KEY= 属性) - 二级标题定义子项(=HEADLINE= + =TEMPLATE= + =KEY=) - 支持 datetree 目标和自定义模板 =C-c w= 提供两步快速 Refile:先选分类,再选目标。 ** 自定义 Agenda 视图 - =r= 前缀:阅读列表(想读 / 在读 / 已读) - =i= 前缀:收件箱条目 - Agenda 操作:=S= 开始阅读、=F= 完成阅读 ** 中文支持 启用 CJK 内联标记(着重号、粗体等无需前后空格)。 * 开发工具 ** LSP + Tree-sitter - =eglot=(内置):自动检测已安装的 LSP 服务器 - JavaScript/TypeScript: =typescript-language-server= - Python: =pylsp= - CSS/HTML: =vscode-css/html-language-server= - =tree-sitter=(内置):语法树精确高亮(level 4),自动 remap 到 =-ts-mode= ** 终端 =eat= 终端模拟器,适配 Darcula 主题 ANSI 调色板(16 色)。=C-c t= 启动。 ** 代码编辑 - =symbol-overlay= — =M-i= 高亮当前符号所有出现 - =multiple-cursors= — =C-c n= 前缀多光标编辑 - =move-dup= — =M-S-↑/↓= 移动行,=C-c p d/u= 复制行 - =origami= — =C-c z/Z= 代码折叠 - =avy= — =M-j= 快速跳转到任意字符 ** Git - =magit= — =C-x p m= 打开项目 Git 状态 - =diff-hl= — 边栏显示增删改标记 - =git-timemachine= — 逐版本浏览文件历史 - =ibuffer-vc= — =C-x C-b= 按 VC 项目分组 buffer * 阅读与信息获取 ** RSS =elfeed= + =elfeed-protocol= 连接 FreshRSS(Fever API)。=C-c f= 启动。 ** OPDS 电子书浏览器 内置 OPDS 客户端,浏览 Calibre Content Server 书库: - =C-c l= 打开 OPDS 浏览器 - 支持搜索、下载、直接在 Emacs 中打开 EPUB/PDF ** PDF / EPUB - =pdf-tools= — PDF 阅读(支持页码偏移) - =nov= — EPUB 阅读(olivetti 居中 + 变宽字体) ** URL 阅读模式 =url-handler-mode= 启用后可直接 =C-x C-f= 打开 URL,自动进入阅读模式(olivetti 居中 + 变宽字体)。 * 通信 ** 邮件 =mu4e= 多账户配置,支持 OAuth2(Google): - =C-c e= 启动邮件客户端 - 账户配置从外部文件 =email-accounts.el= 加载 - OAuth token 使用 GPG 加密存储 ** 社交 =mastodon.el= 客户端: - =C-c m= 启动 Mastodon - GPG 加密凭据存储 - Nerd Icons 美化界面 ** 日历 =org-gcal= + =calfw= 实现 Google Calendar 双向同步: - =C-c g= 打开可视化日历 - =C-c G= 强制同步 - OAuth 凭据从外部文件 =calendar-secrets.el= 加载 * 工具 ** 离线词典 - =sdcv=(StarDict)— =C-c k= 快速查词(浮窗)、=C-c K= 详细查词(buffer) - GoldenDict — =C-c d= 光标处查词、=C-c D= 手动输入查词 - 自动扫描 =~/.stardict/dic/= 下的词典文件 ** 学习模式 禁用方向键、Delete 键和鼠标,强制使用 Emacs 原生快捷键: - 方向键 → 提示使用 =C-p/C-n/C-b/C-f= - Delete → 提示使用 =C-d/M-d/C-k= - =C-c h m= 显示移动快捷键速查表 * 快捷键速查 ** Org | 按键 | 功能 | |-----------+------------------------| | =C-c c= | org-capture | | =C-c a= | org-agenda | | =C-c w= | 快速 Refile | | =C-c o= | 打开 Org 文件 | ** 应用 | 按键 | 功能 | |-----------+------------------------| | =C-c m= | Mastodon | | =C-c f= | Elfeed (RSS) | | =C-c e= | mu4e (邮件) | | =C-c E= | Elpher (Gemini/Gopher) | | =C-c l= | OPDS 电子书浏览器 | | =C-c t= | Eat 终端 | | =C-c g= | 日历 | ** 搜索与导航 | 按键 | 功能 | |-------------+------------------------| | =C-c s s= | consult-line | | =C-c s g= | consult-ripgrep | | =C-c s f= | consult-find | | =C-c s o= | consult-outline | | =C-.= | embark-act | | =M-j= | avy-goto-char-timer | ** 编辑 | 按键 | 功能 | |---------------+------------------------| | =M-i= | 高亮当前符号 | | =C-c n n/p/a= | 多光标 next/prev/all | | =M-S-↑/↓= | 移动行 | | =C-c z/Z= | 折叠/展开 | | =M-/= | hippie-expand 补全 | | =M-Q= | 反填充段落 | | =M-Y= | 浏览 kill ring | ** 博客 | 按键 | 功能 | |-----------+------------------------| | =C-c b c= | 创建月刊 | | =C-c b o= | 打开当月月刊 | | =C-c b e= | 导出月刊 Markdown | | =C-c b p= | 导出单篇文章 | | =C-c b g= | 导出 Gemini | | =C-c b w= | Webmention 发现 | | =C-c b I= | 插入博客图片 | ** 词典 | 按键 | 功能 | |-------------+------------------------| | =C-c k= | sdcv 快速查词 | | =C-c K= | sdcv 详细查词 | | =C-c d= | GoldenDict 光标查词 | | =C-c D= | GoldenDict 手动输入 | ** 配置 | 按键 | 功能 | |-----------+------------------------| | =C-c i= | 打开 init.el | | =C-c r= | 重新加载配置 | * 安装 #+begin_src shell git clone ~/.emacs.d #+end_src 首次启动时会提示设置: 1. Org 文件目录路径 2. 博客源文件/导出目录 3. 邮件、日历等凭据(如需使用) 外部依赖: - 字体:JetBrains Mono、Source Serif 4、思源黑体/宋体、Noto Color Emoji、Symbols Nerd Font - 工具:=ripgrep=(搜索)、=mu=(邮件索引)、=msmtp=(邮件发送)、=aspell=(拼写检查) - LSP 服务器(可选):=typescript-language-server=、=pylsp=、=vscode-css-language-server= * 致谢 许多包选择和配置参考了 [[https://github.com/purcell/emacs.d][Steve Purcell 的 emacs.d]]。 * 许可证 个人配置,自由使用。