Emacs 29快到了!我们能期待什么

2022-12-14 18:33:21 浏览数 (1)

几个小时前宣布,Emacs 29 的分支现在从 master 分支中切掉了!这意味着该emacs-29分支从现在起将不再接收任何新功能,而只会接收错误修复。

那么,这个新的主要版本有什么新内容?我浏览了NEWS文件,这里有一些我觉得有趣甚至令人兴奋的变化。

文章于 11 月 30 日 13:15 UTC 更新

主要特点

很可能会出现一些重大改进,以下是对我来说最突出的改进。

Eglot 现在是 Emacs 核心的一部分

在过去几年中,LSP 为文本编辑器提供了难以置信的功能,相对容易地为它们提供类似 IDE 的功能。除了 Elisp 开发,我编写的大部分代码现在都是在 LSP 服务器的帮助下完成的,它与 Emacs 一起运行并分析我的代码,为我建议和执行更改和操作。

Emacs 存在多个 LSP 集成,例如LSP Mode、Eglot和lsp-bridge。在这三者中,Eglot 现在是 Emacs 核心的一部分!您不再需要安装包,只需注册一个 LSP 服务器,自动完成、文档、错误检测和其他功能将立即可用!

我必须承认我并不真正了解 Eglot,我个人使用 LSP 模式,但是随着 Emacs 核心的添加,我可能会尝试切换。

Tree-Sitter 也是 Emacs 核心的一部分

如果您不知道,Emacs 当前的语法突出显示目前是基于正则表达式系统。虽然这不是_最糟糕_的使用方式,但也不是最好的,而且在处理较大的文件时会变得相当慢。

Tree-Sitter 将编程语言解析为具体的语法树。从那里,不仅可以高速完成语法高亮显示,而且可以对代码进行更深入的分析,并且还可以实现语法操作等操作,因为语法树本身可以作为可以操作的对象使用!

如果您想了解有关 Tree-Sitter 本身的更多信息,可以查看官方 Tree-Sitter 网站,或者您甚至可以查看 Tree-Sitter 的创建者 Max Brunsfeld 发表的演讲。

好吧,这现在是 Emacs 中的原生解决方案!目前,Emacs 的 Tree-Sitter 支持目前主要的模式:

  • bash-ts-mode
  • c-ts-mode
  • c -ts-mode
  • csharp-ts-mode
  • css-ts-mode
  • java-ts-mode
  • js-ts-mode
  • json-ts-mode
  • python-ts-mode
  • typescript-ts-mode

Tree-Sitter 目前在新分支中也拥有特殊地位,emacs-29因为新功能仍然可以添加到它,因为它与 master 分支的合并仍然是最近的。所以我们可能会看到 Emacs 的主要模式列表变得更长一些,特别是考虑到 Tree-Sitter 试图使添加新语言相对容易。

如果您迫不及待地想测试 Tree-Sitter,现在已经有另一个适用于 Emacs 的软件包可供您使用。请注意,这与集成到 Emacs 中的包不同。

从源安装包package.el

如果您使用Straight,您可能熟悉直接从他们的 Git 存储库安装包。嗯,好消息,现在可以使用 Emacs 的内置打包系统从 Git 安装包了package.el!可以使用 new 函数来完成package-vc-install,并且可以使用package-vc-update或更新以这种方式安装的包package-vc-update-all

关于 的主题package.el,还有一个新功能package-report-bug,允许 Emacs 用户直接从 Emacs 向包的开发人员报告错误!但请注意,它仅适用于通过package.el. 由于我是use-packageandstraight.el用户,因此在我调用该命令时没有列出包。

Org 9.6

正如 org-mode 维护者之一Bastien Guerry在法语 Emacs 邮件列表中确认的那样,Org 9.6 将成为 Emacs 29 的一部分!我也可能会尝试写一篇关于这个新版本的文章,它已经在 GNU ELPA 上可用!

Emacs 核心中的使用包

在Emacs 开发邮件列表上也已确认,use-package一个很棒的包管理器将成为 Emacs 29 的一部分,尽管它最初并未包含在该emacs-29分支中。

纯 GTK Emacs 为 Wayland 而来!

Emacs 在 Linux 上的主要问题之一是它在 GUI 模式下运行时对 Xorg 的依赖。运行 Xorg 时,这不是真正的问题,但 Wayland 在过去几年变得越来越普遍,即使有 XWayland 的存在,这也成为一个烦恼。

好吧,不要害怕,因为纯 GTK Emacs 就在这里!它现在可以在无 Xorg 的情况下构建并在 Wayland 中本地运行!

请注意,Wayland 基本上是纯 GTK Emacs 的唯一用例。如果您不使用 Wayland,Emacs 将显示一条警告消息,因为如果您运行的是 Xorg,它很可能会导致问题。在我的例子中,当缓冲区的内容更新时,我有时会看到一些幻影文本(尽管我仍然需要纯 GTK,因为我在 Xorg 和 Wayland 之间交替)。

提前编译 EmacsLisp 文件

如果您的 Emacs 是使用 GCC 的 Just In Time 库构建的,那么 Emacs 28 可以原生编译 EmacsLisp。这导致了令人印象深刻的性能提升,这使得 Emacs 比以前更加敏捷。我遇到的唯一问题是 Emacs 只会在第一次加载 EmacsLisp 文件时编译它们。

这已不再是这种情况!如果您现在使用 编译 Emacs --with-native-compilation=aot,Emacs 的本机 EmacsLisp 文件将与 Emacs 本身一起本机编译!但请注意,它在大多数机器上可能会很慢,因此您在第一次启动 Emacs 时不编译这些文件而节省的时间基本上会转移到编译 Emacs 本身时。值得你花时间吗?就我而言,我会说是,因为当我编译 Emacs 时,我通常并不着急。但在你的情况下?好吧,自己测试一下看看。

本地访问 SQLite 数据库

现在可以使用对 SQLite 和 sqlite3 库的本机支持来构建 Emacs。事实上,这是现在的默认行为,因为您需要传递--without-sqlite3给 Emacs 的构建配置脚本以防止它发生。

这是一个新sqlite-mode功能,它允许您在 Emacs 中探索 SQLite 数据库并与它们交互。看看sqlite-mode-open-file功能吧!

HaikuOS 支持

对于所有三个 HaikuOS 用户来说,好消息是,您现在可以使用 Emacs 了!(说真的,我应该有一天去看看 HaikuOS)

此外,它还支持一个可选的窗口系统端口到 Haiku,带有--with-be-app. 请注意,您将需要 Haiku Application Kit 开发头文件和 C 编译器。否则,Emacs 只会在终端中运行。如果您还想将 Cairo 添加到组合中,您可以添加--with-be-cairo.

C# 的新主要模式

csharp-mode现在是 Emacs 的原生主要模式,并且基于cc-mode.

次要特征

在脚本中使用 Emacs 更容易!

如果您喜欢编写脚本,尤其是编写 Lisp 脚本,Emacs 现在支持该选项-x以执行用 EmacsLisp 编写的脚本。当使用 as shebang 执行这样的脚本时#!/usr/bin/emacs -x,Emacs 不会读取它的 init 文件(如 with -Q),而是会立即执行 Elisp 代码并将最后一个值返回给脚本的调用者(很可能是您调用脚本的 shell从)。

TRAMP 原生支持 Docker、Podman 和 Kubernetes

三个新连接现在可用于 TRAMP:

  • docker
  • podman
  • kubernetes

您现在可以直接从 Emacs 访问您的容器化环境,而无需编写自定义代码。

自定义用户目录

现在可以更轻松地启动自定义 Emacs 配置文件,而无需使用chemacs2等工具并添加 flag --init-directory。这可以设置为 Emacs 的任何目录,user-emacs-directory其中包括init.el随附的目录。.emacs我不使用文件,而是使用文件的另一个原因init.el

支持 Webp 图片

很长一段时间以来,Emacs 已经能够显示图像,但 webp 还不行。好吧,现在已经解决了!事实上,对 webp 图像的支持已成为默认行为,因为您需要传递--without-webp给 Emacs 的配置脚本以禁用 webp 支持。

C 模式现在支持 C 20 标准

是的。没什么好说的,真的。编码愉快!

更好地处理.pdmp文件

Emacs 有几个版本能够将其状态转储到pdmp文件中以加快启动时间。那么现在,当创建这样一个文件时,它会在其名称中包含其当前状态的指纹,尽管它仍然会优先考虑一个emacs.pdmp文件(如果存在)。

更好的鼠标和触摸板支持

Emacs 现在使用 XInput 2,它使 Emacs 能够支持更多的输入事件,例如触摸板事件。例如,默认情况下,触摸板上的捏合手势会增大或减小当前缓冲区的文本大小。这要归功于pinch伴随touch-end.

Unicode 15.0 和表情符号

Emacs 现在支持Unicode 15.0,这是目前最新的 Unicode 版本。虽然这没有直接关系,但已经引入了很多与表情符号相关的新功能。新前缀C-x 8 e现在会导致一些与表情符号相关的新命令:

C-x 8 e e或者C-x 8 e i

插入表情符号 ( emoji-insert)

C-x 8 e s

搜索表情符号 ( emoji-search)

C-x 8 e l

列出新缓冲区中的所有表情符号 ( emoji-list)

C-x 8 e r

插入最近插入的表情符号 ( emoji-recent)

C-x 8 e d

描述一个表情符号 ( emoji-describe)

C-x 8 e C-x 8 e -

增加和减少任何字符的大小,尤其是表情符号(emoji-zoom-increaseemoji-zoom-decrease分别)

还有新的输入法emoji,允许您输入例如:⁣grin:以获得表情符号

0 人点赞