在 Mac 下的 GUI Emacs 中,用输入法输入的时候,会不会一直在抖动 ?

这是个 Workaround,我不会把它当作解决方案。一来如果这是 Bug 的话,得要上游修复。其次修改 redisplay-dont-pause 可能有副作用。

我试过系统和搜狗 都有这个问题 rime没有

这个变量理论上只在emacs内部生效, 不可能影响其他app. 我没遇到过

这个变量是正常的用户可修改变量(文档里没有警告和注意), 应该谈不上副作用.

修复挺难, 因为上游开发者他们不用输入法, 所以根本体会不到, 也不太关注这问题. 想彻底修复只能靠国人或者日本人了.

谢谢~ 在原生态的emacs 25.3.1上使用这个方法成功了。

之前使用spacemacs,按照提示,安装的是emacs-plus(好像是v27)。 在这个版本上,使用(setq redisplay-dont-pause nil)会对evil用户造成一些不适(:w 时emacs显示会在正中间有点空白条状物出现,继续编辑后会消失,但是会不爽)。

看代码好像是因为多了一次刷新,而这个刷新是没必要的。

大致流程:

两个按键或事件一起过来,redisplay-dont-pause为t时,第一个事件刷新一次,第二个事件也刷新一次,第一次刷新是没必要的,它让光标回去了,而第二次刷新又让光标回来了。 当redisplay-dont-pause为nil时候,会跳过第一次刷新。

问题在于第一次刷新。

个人觉得这个只能算workaround,并不能真正解决问题。 (setq redisplay-dont-pause nil)

今天测试了下,输入法闪烁问题没有了,但出现了更多闪烁或者不刷新,重新编辑或者拖动窗口又正常。比如使用了minibuffer或者popwin,弹出窗口后C-g取消,就是一大片黑。副作用相当大呀!

emacs

看邮件列表, 感觉mac版问题很多, 甚至架构都有点问题, 等完善估计要到版本28以后

确实如此,(setq redisplay-dont-pause nil)26.1版本能正常使用, 在26.3版本中就出现是截图中的问题,而且还更严重。

下午调试了一下, 找到了原因: 中文输入的时候, 每输入一个字符, emacs会先清空当前显示的(跟输入法有关)内容(就是拼音字母串), 然后再替换上新的拼音字母串. 这两步导致了闪烁.

同时找到了一个解决办法, 重写了一个ns-win.el里的一个函数, 测试ok. 有兴趣的可以试试, 把下面代码eval一下, 或者写在emacs配置文件里:


(defun ns-unput-working-text ()
  (interactive)
  (cond
   ((and (overlayp ns-working-overlay)
         ;; Still alive?
         (overlay-buffer ns-working-overlay))
	(with-current-buffer (overlay-buffer ns-working-overlay)
	  (let ((text (buffer-substring-no-properties
				   (overlay-start ns-working-overlay)
				   (overlay-end ns-working-overlay))))
		(when (equal text ns-working-text)
		  (delete-region (overlay-start ns-working-overlay)
						 (overlay-end ns-working-overlay))
		  (delete-overlay ns-working-overlay)
		  (setq ns-working-overlay nil)))))
   ((integerp ns-working-overlay)
    (let* ((msg (current-message))
		   (text (substring msg (- (length msg) ns-working-overlay)))
		   message-log-max)
	  (when (equal text ns-working-text)
		(setq msg (substring msg 0 (- (length msg) ns-working-overlay)))
		(message "%s" msg)
		(setq ns-working-overlay nil))))))
2 个赞

是因为26.2中,把macos后端的渲染方式大改了一下,必须设置为t,否则会剧烈闪烁。

改这个渲染方式是因为macos10.14的底层变化,不改会导致emacs显示不正常。

想起之前偶尔在windows上用emacs,中文输入的时候,只有汉字候选,没有拼音提示,现在不知道怎么样了。

谢谢你了。我用了 brew cask install emacs-mac,终于正常了。详见 twlz0ne大佬的上面回复。

你用的这个版本不是官方版, 是一个日本人维护的一个版本, 专门针对macOS的, 照理说在mac上应该很好用, 不过我试用过几次, 每次都感觉不好用, 所以一直都在用官方版.

此bug经过进一步反馈和讨论, 官方已彻底修复, master分支.