[问题已明确] emacs26最新版,undo-tree界面里移动上下方向键延迟巨大

按键后延迟500毫秒才生效,感觉很明显,按住方向键不松,emacs没反应,一直到松开的时候,直接跳到头,没有中间过程。

看cpu占用率也不高。同样系统同样配置,emacs25没问题,响应很灵敏。

---------------------------问题结果-----------------------

Linux GUI版本的emacs有个bug, 具体见 http://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00826.html.

不单影响到undo-tree, helm的启动速度原来也受它影响, 一直以为是helm性能问题, 原来不是. emacs26上解决办法:

(setq x-wait-for-event-timeout nil)

设置之后, helm启动速度媲美ivy, 完美.

另外,最近还遇到几次company-mode的补全窗口出现在非预期的位置,childframe和overlay两种都遇到过。

25的时候也没遇到这么多问题,本来准备用26了,却这么多问题。

你是什么系统,版本多少?你说的问题我都没有遇到过。macOS 10.13.3/Windows 10 1079/Ubuntu 16.04 LTS + Emacs 26.0.91.

centos7,emacs26官方git库最新版

也许跟你用的桌面系统有关?

编译一份无 GTK 的试试

同样的桌面环境和配置文件, emacs25没问题

没有重新编译, 直接再终端里运行没问题(emacs -nw)

有用 GTK 的话,七成可能是 GTK 的问題

重新编译了emacs25, 还是没有问题, 应该不是gtk的问题了, 应该是26的问题

跟踪调试了一下, 发现是switch-to-buffer-other-window这个函数的问题, 每次调用竟然需要0.1秒, 而undo-tree每次undo会调用两次.

emacs -Q启动时, 一个文件都不打开, 该函数依然耗时0.1秒. 已经向上游反馈了.

有可能是Centos 7上自带的gtk2的问题, 但是emacs25就没有问题.

用其他选项重新编译Emacs吧,或者直接用25

果然是有bug. http://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00826.html

临时解决办法:

(setq x-wait-for-event-timeout nil)

1 个赞