看起来 Emacs 28 要发布了

看这里的邮件,预计几周后发布第一个 28的 pretest 版本,还有得等。 https://mail.gnu.org/archive/html/emacs-devel/2021-09/msg02290.html

1 个赞

回复 @mkvoya @wuyanzu 不至于吧,印象中 pgtk 基本上已经完工了,不至于弃坑吧。之前一直零零散散的有更新,Eli 向 pgtk 作者询问合并相关的问题后 pgtk 才开始停止更新,看当时邮件列表的回复应该是在为进入 master 做调整才对。

弃坑应该不至于,可能只是最近更新少

就是不知道pgtk能不能在28版本中发布了,因为按说一个版本cut了,就会进入bug-fix only的阶段,不会有新功能加进来了:

In mid September we’ll evaluate the situation again, and if things look OK, we’ll cut the emacs-28 branch (which will then be “bug fix only” after that), and then move “master” to 29.0.50.

关于pgtk,reddit上Eli的回复

It didn’t look ready, and we didn’t want to delay the branching any longer.

有点可惜呀!

基本上处于无欲无求状态

快是因为 Emacs 28 之于 Emacs 27 多了太多东西了,你看 NEWS.27NEWS.28 的行数

4570 NEWS.28
3256 NEWS.27

说几点可感受到的变化:

  1. emoji 的原生支持,可以用单个的 glyph 来显示了,原来则是通过多个 glyph 拼接起来的
  2. interactive 里可以写当前命令可应用的 mode, 这样搭配 (setq read-extended-command-predicate #'command-completion-default-include-p) 可以将那些不适用当前 mode 的函数在 M-x 时过滤掉.
  3. context-menu-mode,可以按 S-F10C-鼠标右击 对比一下
  4. dired-kill-when-opening-new-dired-buffer 终于 dired 在 RET 时不会产生新的 buffer 了
  5. tab-bar-show 终于可以隐藏 tab-bar 了
  6. C-x x 前缀被用起来了,现在里面包含 buffer 相关的操作
  7. redisplay-skip-fontification-on-input 缓解在快速移动时大量代码的语法高亮
  8. word-wrap-by-category 解决了 CJK 字符在 auto-fill-mode 时的问题。由 @casouri 贡献
  9. isearch 更现代化。isearch 的 C-s C-r 之后会继续搜索,而不是仅仅换了个搜索方向; isearch 里可以按 M-< 和 M-> 来回到搜索关键字的首次/末尾出现地方,最后而不是回到当前 buffer 的开头和末尾;
    1. isearch-motion-changes-direction
    2. isearch-allow-motion
  10. eshell 的 keymap 可以直接定义在 eshell-mode-map 里,以前必须要每次都在 eshell-first-time-mode-hook 里用 define-key 来定义一遍,非常奇怪
  11. 自带 icomplete-vertical-mode 了
  12. eldoc 支持多个后端函数
  13. cc-mode 支持注释中 doxygen 的高亮
  14. 内置的 project.el 进步很多
  15. xref 提升非常大
    1. 可以用 rg 了(xref-search-program),这样在调用 project-find-regexp (C-x p g) 时会比 grep 快许多
    2. xref-show-xrefs-functionxref-show-definitions-function 可以设置成 xref-show-definitions-completing-read 了,表示 xref 的选择定义时可以原生使用 minibuffer,以前 ivy 的话得用 ivy-xref, vertico/selectrum 的话得设置成 consult-xref.
  16. rcirc 提升非常大
    1. 支持 sasl 了
    2. 颜色支持好了
    3. 异步化
    4. IRCv3 协议支持
  17. erc 不熟悉,似乎是达到了单独在 ELPA 上发布的程度了。 PS: Emacs 开发者也是正在为 Emacs 的瘦身做准备中
  18. repeat-mode, C-x o C-x o 到 C-x o o. 没错正是在下提议的
  19. native-comp 合并了

其他的话可以自己看 NEWS.28 这个文件。

30 个赞

你好,请问内置的project这样是不是可以替代projectile了?

写得真详细,你字多信你 :smile:

3 个赞

谢谢,只能期待 29 的时候可以上了。

如果你依赖的只是在项目里切换文件,那么自带的 project.el 就足够了。但是如果涉及到编译项目,那么 project.el 目前只是单纯的调用 compile 命令而已。反观 projectile,其自带了许多项目管理工具的识别,如 cmake, meson 等等

1 个赞

对,主要还是生态。projectile和很多包都做了集成,project还差很多

多谢回复,我没有那么大需求,看来我可以研究下project.el.

emacs28有 undo-redo命令 吗,我查了一下有些说有,有些是说移到了undo-fu

有的,M-x 可以找到这个命令,不过我用了一段时间,redo 的时候会出问题(具体什么问题忘记了),后来就换回了 undo-tree,可以直接从 elpa 安装。

Emacs 28 一创建我就开始用了,以至于最近才发现在 27 及以降版本上的宏不能这样写:

(defmacro test (x)
  (let ((x-type (cond ((consp   x) 'cons)
                      ((stringp x) 'string)
                      ((symbolp x) 'symbol)
                      (t (error "Unknown type of ‘%S’" x)))))
    `(pcase ',x-type
       ('cons   (list ,@x))
       ('string (list ,x))
       ('symbol (list ',x)))))

(condition-case err
    (macroexpand '(test "foo"))
  (error err))

;; 27-
;; => (wrong-type-argument listp "foo")

;; 28+
;; => (cond ((eq 'string 'cons)   (let nil (list . "foo")))
;;          ((eq 'string 'string) (let nil (list "foo")))
;;          ((eq 'string 'symbol) (let nil (list '"foo"))))

pcase 看起来在对未使用分支的处理上存在问题。

Emacs 28.0.90 pretest 版本已经出来了

https://lists.gnu.org/archive/html/emacs-devel/2021-12/msg00217.html

Nix 社区的 emacs-overlay 也已经更新了 28.0.90

已经用上29了 :rofl:

其实我也是主要用 Emacs 29,主要是 Polu 大佬的像素滚动太好用了,不然真想回到 Emacs 28

再等几个月才会发布吧,谁记得 emacs 21 在 pretest 环节卡了一年

1 个赞