美化 Org mode
在过去的几个月里,我收集了一些软件包和设置来美化 Org 缓冲区,其中大部分是通过 Unicode 技巧来实现的。 我觉得这个结果挺不错的,想要分享出来,因为它可能对别人也有用。以下是我设置及其相关解释。与我的其他 Emacs 配置一样,它使用 use-package
。
默认的字体设置确保可以显示所有 unicode 及类似的符号。这也是后面这些浮夸之物的基础。
首先,我检查 Symbola 字体是否存在。
(when (member "Symbola" (font-family-list))
(set-fontset-font "fontset-default" nil
(font-spec :size 20 :name "Symbola")))
我还指定 Symbola 作为所有 unicode 字符的字体
(when (member "Symbola" (font-family-list))
(set-fontset-font t 'unicode "Symbola" nil 'prepend))
我在所有地方都使用 utf8 编码,并显式地设置它,而不依赖于 Emacs 默认值
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
现在转到 Org 模式的设置。
我要缩进
(setq org-startup-indented t
org-src-tab-acts-natively t)
I like visual-pitch-mode
and visual-line-mode
for org files
我喜欢为 org 文件开启 visual-pitch-mode
和 visual-line-mode
(add-hook 'org-mode-hook
(lambda ()
(variable-pitch-mode 1)
visual-line-mode))
开始设置 Org 模式缓冲区的外观,首先让我们做一些一般设置:
- 不要显示强调标记
- 如果标题被标记为 DONE,则更改标题的外观
- 隐藏标题前的星星
- 使用 UTF8 字符显示实体。
- 只使用奇数级别
我觉得这样会使缓冲区看起来更整洁。
(setq org-hide-emphasis-markers t
org-fontify-done-headline t
org-hide-leading-stars t
org-pretty-entities t
org-odd-levels-only t)
下一步是设置自动更改列表项。我经常使用项目符号列表,我认为它能更好地突出结构。
(setq org-list-demote-modify-bullet
(quote (("+" . "-")
("-" . "+")
("*" . "-")
("1." . "-")
("1)" . "-")
("A)" . "-")
("B)" . "-")
("a)" . "-")
("b)" . "-")
("A." . "-")
("B." . "-")
("a." . "-")
("b." . "-"))))
这是第一个将标题前的星星转换成漂亮符号的程序包。因为我只使用奇数级别,所以我为所有偶数级别设置了同一个特定的符号。
(use-package org-bullets
:custom
(org-bullets-bullet-list '("◉" "☯" "○" "☯" "✸" "☯" "✿" "☯" "✜" "☯" "◆" "☯" "▶"))
(org-ellipsis "⤵")
:hook (org-mode . org-bullets-mode))
从 https://zzamboni.org/post/beautifying-org-mode-in-emacs/ 中我收集了这些设置来让符号列表显示这些漂亮符号而不是一个破折号。
(font-lock-add-keywords 'org-mode
'(("^ *\([-]\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
(font-lock-add-keywords 'org-mode
'(("^ *\([+]\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "◦"))))))
下一步是美化 src 块。受 i use markdown rather than org-mode for my notes : emacs 这篇文章的启发,我发现了内置的 prettify-symbols-mode
.
其配置遵循 New in Emacs 25.1: Have prettify-symbols-mode reveal the symbol at point · En... 中的示例。
这种方法也可以用来提供某种程度的美化
(setq-default prettify-symbols-alist '(("```" . "†")
("```" . "†")
("```" . "†")
("```" . "†")
(">=" . "≥")
("=>" . "⇨")))
(setq prettify-symbols-unprettify-at-point 'right-edge)
(add-hook 'org-mode-hook 'prettify-symbols-mode)
尽管我更喜欢 可变间距
的子, 但对于代码块,我更倾向 固定间距
的字体。
(custom-theme-set-faces
'user
'(variable-pitch ((t (:family "Source Sans Pro" :height 120 :weight light))))
'(fixed-pitch ((t ( :family "Consolas" :slant normal :weight normal :height 0.9 :width normal)))))
(custom-theme-set-faces
'user
'(org-block ((t (:inherit fixed-pitch))))
'(org-document-info-keyword ((t (:inherit (shadow fixed-pitch)))))
'(org-property-value ((t (:inherit fixed-pitch))) t)
'(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold))))
'(org-verbatim ((t (:inherit (shadow fixed-pitch))))))
pretty-tags
是一个用 unicode 符号替换标签的包。标签的名称必须与缓冲区中的名称完全相同才行。
(use-package org-pretty-tags
:demand t
:config
(setq org-pretty-tags-surrogate-strings
(quote
(("TOPIC" . "")
("PROJEKT" . "")
("SERVICE" . "")
("Blog" . "")
("music" . "")
("security" . ""))))
(org-pretty-tags-global-mode))
还有一个程序包可以显示特别的优先级,而不是标准的优先级。
(use-package org-fancy-priorities
:diminish
:demand t
:defines org-fancy-priorities-list
:hook (org-mode . org-fancy-priorities-mode)
:config
(unless (char-displayable-p?)
(setq org-fancy-priorities-list '("HIGH" "MID" "LOW" "OPTIONAL"))))
我喜欢在 Org 模式标题上显示大纲编号。编号与导出 Org 文件时的显示方式相匹配。这个文件在 Org mode 所属的 git 仓库中,但是不是官方 Org mode 的一部分
(use-package org-num
:load-path "lisp/"
:after org
:hook (org-mode . org-num-mode))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 聊一聊 Emacs 的字节编译
下一篇: 抛弃宗教因素对比 Vim 和 Emacs
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论