前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Emacs 29.1 版本发布了

Emacs 29.1 版本发布了

作者头像
飞驰的西瓜
发布2023-09-06 12:54:23
4420
发布2023-09-06 12:54:23
举报
文章被收录于专栏:EmacsTalkEmacsTalk

29.1 已经在 2023-07-30[1] 发布了💥

作为日常使用 Emacs 进行开发的重度用户,困扰笔者的一个问题时,同时打开多个项目时, xref 会错乱,这十分烦人,忍受一段时间后,最终去 SO 提问[2]了一下,Emacs 又一次没令我失望,29 里面已经有了解法:

代码语言:javascript
复制
(setq xref-history-storage 'xref-window-local-history)

于是花了一点点时间,从 28 升级到了 29,只能说太香了,还在 28 踌躇的读者可以着手升级了。这里列举一些笔者认为 29 中一些比较实用的更新,完整列表可以去看 NEWS.29[3]

新包

  • eglot: Emacs Client for the Language Server Protocol.
  • use-package: Declarative package configuration. 上面这两个包一直都在使用,这下不用再额外安装了。
  • wallpaper: 设置桌面壁纸
  • js-json-mode: 轻量级的 js-mode,打开 json 时用。轻量使用的话,joshwnj/json-mode[4] 可以不用再安装。
  • 使用 tree-sitter 重写的 major mode: 当编译时开启 tree-sitter 选项时启用。
  • sqlite-mode: 内置对 sqlite 的支持 😎。需要在编译机器上安装 sqlite 库。 sqlite-mode-open-file 可以直接以 sqlite-mode 打开 sqlite 数据库文件,并且可以直接浏览、修改表数据!笔者计划后续会单独写一篇文章来介绍。
  • multisession: 这个包提供了在不同会话间持久化变量的功能。现阶段只有 emoji-recent 使用到了,用户也可以通过 define-multisession-variable 来添加新变量。另外值得一提的是,该包除了使用文件作为存储介质外,还支持 sqlite,可通过 multisession-storage 配置。
  • pixel-scroll-precision-mode: 像素级滚动,Emacs 默认只能按行滚动,开启它后就可以按像素滚动了,不过对于写代码来说体验区别不大。
  • vtable.el: 展示表格数据,这个包运行使用 variable-pitch 字体来格式化数据
  • leuven-dark: leuven 的暗黑主题

新函数

rename-visited-file: Emacs 终于支持同时重命名 buffer 和文件名了。👍

delete-process: 变成了交互式命令

restart-emacs:save-buffers-kill-emacs 类似,只是在关闭 emacs 后,会重新用同样的启动参数再次启动

scratch-buffer: 交互式命令,切换到 *scratch* buffer,可以解决误删的问题

project-list-buffers: 用于展示当前项目的 buffer

xref-find-references-and-replace: 重命名变量

xref-go-forward:xref-go-back 对应,默认快捷键 C-M-,

duplicate-lineduplicate-dwim: 复制当前行,当有 active region 时 dwim 会复制当前 region,否则就是当前行

ensure-empty-lines : 确保当前行上面是空行

find-sibling-file: 寻找“兄弟”文件,兄弟文件是由 find-sibling-rules 这个变量定义的。比如可以定义如下规则来打开 .c 对应的 .h 文件:

代码语言:javascript
复制
("\\\\([^/]+\\\\)\\\\.c\\\\\\='" "\\\\1.h")

emoji-insert, emoji-list, emoji-search, emoji-recent: 方便快捷的在 Emacs 中输入 emoji 💯 😎

package-update, package-update-all: 更新包,无需再使用 list-packages

package-vc-install: 从制定仓库安装包

split-root-window-below split-root-window-right: 把 root 窗口分成 2 个,窗口相关的命令可以在 C-x w 内找到

elisp-eval-region-or-buffer: 如果有 region,执行 region 内的 elisp 代码,否则就是整个 buffer

recentf-open: 打开最新的文件

新选项

  • eww-url-transformers: 用于在访问 URL 前进行改写,默认它会移除 utm_ 这个用于追踪的参数。 之前写的 [URL 重定向](file:///post/018/ "URL 重定向")就可以利用它来实现。
  • eww-auto-rename-buffer: 自动给 eww buffer 命名,默认为 nil,可以设置为 'title'url
  • browse-url-default-scheme: 当使用 browse-url 等函数时,默认的 URl scheme,默认是 http
  • xref-history-storage : 如何保存 xref 的历史 marker,一个有用的选项是 xref-window-local-history ,这样在用 Emacs 同时打开多个项目时, xref 就不会错乱了。
  • show-paren-context-when-offscreen: 当光标在右括号时,如果左括号不在屏幕时,会在 echo area 中展示相关信息,在 GUI 中,可以设置成 overlaychild-frame
  • package-install-upgrade-built-in: 是否允许升级内置包,比如 eglot。默认 nil
  • tramp-use-scp-direct-remote-copying: 当设置为 true 时,使用 scp 来复制文件
  • python-shell-dedicated: 是否为每个项目、buffer 开启特定的 Python shell,默认为 nil

新快捷键

  • M-SPC 现在绑定 cycle-spacing ,之前是 just-one-space 。循环的操作可以通过 cycle-spacing-actions 配置。

优化

  • 长行优化。主要是下面两个 commit。这样按说就不再需要在使用 so-long-mode 了, long-line-threshold 控制长行的阈值,超过即进行优化展示。
    1. [Actually fix the long lines display bug](https://github.com/emacs-mirror/emacs/commit/1792cbaddc33772c344e45fb9478bee85fee66e7\ "Actually fix the long lines display bug")
    2. Improvements to long lines handling.[5]
  • kill-buffer 如果没有保存会给出 save then kill 的提示
  • tramp 支持了 docker podman kubernetes
  • Org 升级到 v9.6
  • C++ mode 支持 C++20 中的新语法

Deprecated

  • linum.el 正式作废,推荐使用 display-line-numbers-mode 来替代。
  • EIEIO 相关 compat 函数默认已经不再加载,最主要的就是 defmethod defgeneric 函数,如果之前配置中有用到,可以直接加上前缀 cl- 即可,比如下面这个 PR:Fix defmethod by sarg · Pull Request #3 · ukaszg/aria2[6]

除此之外,在升级过程中还有可能遇到下面的 warning,根据提示来修复即可。

代码语言:javascript
复制
twittering-mode.el: Warning: ‘block’ is an obsolete alias (as of 27.1); use ‘cl-block’ instead.
twittering-mode.el: Warning: ‘return-from’ is an obsolete alias (as of 27.1); use ‘cl-return-from’ instead.
twittering-mode.el: Warning: ‘decf’ is an obsolete alias (as of 27.1); use ‘cl-decf’ instead.
twittering-mode.el: Warning: ‘incf’ is an obsolete alias (as of 27.1); use ‘cl-incf’ instead.

Emacsclient

  • 新选项 -r: 复用现有的 GUI frame,如果没有的话,则新创建一个
  • 新选项 -w: 超时时间,如果 Emacs 没有在规定时间内响应,那么 client 就会自动退出。

启动项

  • --batch --script 现在会调整 GC 参数, gc-cons-percentage 会设置成 1(默认是 0.1)。
  • Emacs 可以更方便的用于脚本中。 #!/usr/bin/emacs -x 会跳过 init.el 文件,直接执行文件后面的内容,最后一个表达式为脚本的退出码。
  • 可以通过 --init-directory 设置 user-emacs-directory 变量
  • .eld 结尾的文件默认用 lisp-data-mode 打开。

参考

  • What's New in Emacs 29.1?[7]
  • Marcin Borkowski: 2022-12-19 A few new things in Emacs 29[8]

参考资料

[1]

2023-07-30: https://lists.gnu.org/archive/html/emacs-devel/2023-07/msg00879.html

[2]

SO 提问: https://stackoverflow.com/questions/75791497/

[3]

NEWS.29: https://github.com/emacs-mirror/emacs/blob/master/etc/NEWS.29

[4]

joshwnj/json-mode: https://github.com/joshwnj/json-mode

[5]

Improvements to long lines handling.: https://github.com/emacs-mirror/emacs/commit/e7b5912b235936b304701ba6b1e808d9b197fd4f

[6]

Fix defmethod by sarg · Pull Request #3 · ukaszg/aria2: https://github.com/ukaszg/aria2/pull/3

[7]

What's New in Emacs 29.1?: https://www.masteringemacs.org/article/whats-new-in-emacs-29-1

[8]

Marcin Borkowski: 2022-12-19 A few new things in Emacs 29: https://mbork.pl/2022-12-19_A_few_new_things_in_Emacs_29

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新包
  • 新函数
  • 新选项
  • 新快捷键
  • 优化
  • Deprecated
  • Emacsclient
  • 启动项
  • 参考
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档