前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Emacs 29快到了!我们能期待什么

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

作者头像
飞驰的西瓜
发布2022-12-14 18:33:21
2.5K0
发布2022-12-14 18:33:21
举报
文章被收录于专栏:EmacsTalkEmacsTalk

几个小时前宣布,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:以获得表情符号😁。

真正的背景透明度

直到最近,如果您想使用 Emacs 实现透明度,您别无选择,只能使整个框架透明,包括文本和图像。

由于 frame 参数alpha-background及其相关的alphaBackgroundX 资源,现在可以只为框架的背景设置透明度,而不会影响屏幕上的任何其他元素。

Emacs 的 WebKit 小部件浏览器中的 WebKit 检查器

在 Emacs 中使用 WebKit 小部件浏览器时,您现在可以访问 WebKit 检查器,前提是您使用的 Emacs 版本是用它编译的。我希望它有一个键绑定或至少一个功能,但显然你只能通过右键单击打开它并选择_Inspect Element_。还是很高兴拥有。

Windows 的一些新闻

尽管从 Emacs 26.1 开始,Linux 用户就可以使用它,但 Windows 终于可以使用双缓冲来减少显示闪烁。如果你想禁用它,你可以将 frame 参数设置inhibit-double-bufferingnil

Emacs 在 Windows 10(版本 1809)及更高版本中也遵循 Windows 的暗模式。

Emacs 现在还使用 Windows 的本机 API 来呈现图像。这包括 BMP、GIF、JPEG、PNG 和 TIFF 图像。然而,其他格式仍然依赖其他依赖项和库才能正常工作,例如 Webp 图像。

下一步是什么?

随着 Emacs 29 分支被创建出来,master 分支上的开发现在将转向 Emacs 30。有什么我们可以期待的吗?

现在说还为时过早,大多数合并到 master 中的稳定功能都去了 Emacs 29,而且只有feature/pkgfeature/improved-lock-narrowing分支似乎在写这篇文章的前一周不到收到提交,我不知道其他分支的状态在过去几周内收到了提交,例如feature/package+vcor feature/eglot2emacs(我假设两者都已合并)。

然而,目前有关于包含use-package到 Emacs 中的讨论!我有点失望它不会进入 Emacs 29,但正在取得进展scratch/use-package,您可以随时查看邮件列表以检查其状态,例如此处。更新:高兴!如上所述,use-package实际上是设置在 Emacs 29 中登陆!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 EmacsTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要特点
    • Eglot 现在是 Emacs 核心的一部分
      • Tree-Sitter 也是 Emacs 核心的一部分
        • 从源安装包package.el
          • Org 9.6
            • Emacs 核心中的使用包
              • 纯 GTK Emacs 为 Wayland 而来!
                • 提前编译 EmacsLisp 文件
                  • 本地访问 SQLite 数据库
                    • HaikuOS 支持
                      • C# 的新主要模式
                      • 次要特征
                        • 在脚本中使用 Emacs 更容易!
                          • TRAMP 原生支持 Docker、Podman 和 Kubernetes
                            • 自定义用户目录
                              • 支持 Webp 图片
                                • C++ 模式现在支持 C++20 标准
                                  • 更好地处理.pdmp文件
                                    • 更好的鼠标和触摸板支持
                                      • Unicode 15.0 和表情符号
                                        • 真正的背景透明度
                                          • Emacs 的 WebKit 小部件浏览器中的 WebKit 检查器
                                            • Windows 的一些新闻
                                            • 下一步是什么?
                                            相关产品与服务
                                            容器服务
                                            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                            领券
                                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档