EmacsTalk

Emacs 30 新特性预览

  tags: release

文章目录

今天逛 Emacs For Mac OS X 发现 pretest 里面已经有 30 的下载链接,想着最近用的几个包对 transient 都有高版本要求,29 版本用了也差不多一年多了,是时候更新了,于是就有了这篇文章,本文就是用 GNU Emacs 30.0.92 编写完成。

升级还是一如既往的丝滑,除了多了几个 deprecation 的警告没有其他错误,下面列举一些我觉得有用的新特性,当然完整的版本建议大家 去阅读 NEWS.30 即可。 M-x view-emacs-news 开始吧!

内置 which-key 包

之前也是必装的包,现在直接内置了,好评 💯

use-package 支持 :vc 关键字

直接把社区的 slotThe/vc-use-package 包给扶正了,一个示例

(package-vc-install
  '(bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git"
         :lisp-dir "lisp"
         :doc "doc/bbdb.texi"))

;; 或
(use-package bbdb
  :vc (bbdb :url "https://git.savannah.nongnu.org/git/bbdb.git"
            :lisp-dir "lisp"
            :doc "doc/bbdb.texi"))

不过我目前用的是 git 的 submodule 来下载包,所以暂时还用不到这个 (已经叛变,太好用了!参见这里)。

理论上来说 ,下载和安装就应该是两个步骤:

  • 下载,放外部的好处是可控,防止 Emacs 因网络不好而卡住,这一点对于国内用户来说尤为重要
  • 安装,主要是指加载 load-path,生成 autoloads.el 文件,用户完全可以自己去做,只要比较麻烦,当为了下载可控也就认了, 也没多少代码,不熟悉的读者可以参考:Emacs 包管理指南

Modus 主题增强

modus-operandimodus-vivendi 是自Emacs 28版本以来一直存在的主要主题。其中, modus-operandi 是亮色主题, modus-vivendi 是暗主题。 30 版本引入了 modus-operandi-tintedmodus-vivendi-tinted 以提高可读性。另外还有针对色盲用户设计的选项:

  • modus-operandi-deuteranopia, modus-vivendi-deuteranopia 红绿色盲版
  • modus-operandi-tritanopia, modus-vivendi-tritanopia 蓝黄色盲版

这些设计旨在满足具有红色绿色或蓝色黄色颜色缺陷用户的需要。

支持 org-protocol 协议

这以为这我们可以在命令行直接用下面方式向 org 里面存东西:

emacsclient "org-protocol://store-link?url=URL&title=TITLE"

后续会单独写一篇文章来介绍这个,等不及的读者可先参考官网:17.16 Protocols for External Access

增强 flymake

flymake 现在支持直接在行末显示错误信息:

(setq flymake-show-diagnostics-at-end-of-line 'short)

新增配置项 project-mode-line

用于在 modeline 中显示项目名

增强 recover-file

在恢复时,按 = 可查看保存文件与当前文件的 diff

内置 editorconfig 包

提供对 EditorConfig 标准的支持,通过使用此包,能够以不依赖特定编辑器的格式在项目的特定文件夹中定义配置选项。这种标准化方法使得团队成员无论使用何种编辑器或IDE时,都能够一致地处理代码风格、间距和自动完成等功能。配置文件是 .editorconfig ,一个示例

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[**.js]
indent_style = space
indent_size = 3

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

内置更多基于 tree-sitter 的模式

内置 PEG(Parsing Expression Grammars)

这是一个用于编写解析表达式语法(PEG),这是一种文本解析的方法,其结构比正则表达式更严密,但复杂度又低于上下文无关文法。 关于此的文档和示例可以在Info手册中的`(elisp) Parsing Expression Grammars`部分找到。

内置 Compat 库

现在,Emacs自带了一个GNU ELPA的向前兼容Compat包的简化实现。这使得内置的包能够更有效地利用该库,并有助于在不必要的情况下防止安装Compat。

Native compilation 默认开启

当系统已经安装好 libgccjit 时,原生编译会默认开启,可以用下面方式关闭:

./configure --with-native-compilation=no

不过我一直没用过这个,目前在 macOS 上使用 Emacs 卡吨的情况还比较少。

原生的 JSON 解析

不再需要 libjansson 这个 C 库,Emacs 自己实现了 json.c

新增 customize-dirlocals

用于编辑当前目录下的 .dirlocal.el

新配置项 warning-display-at-bottom

warning-display-at-bottom 默认是 t,表示会在底部 buffer 中展示警告信息,这样其实很烦人,可以通过调整日志级别减少 弹出的概率:

(setq warning-minimum-level :error)

收听方式

反馈