这是个 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
取消,就是一大片黑。副作用相当大呀!
看邮件列表, 感觉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))))))
是因为26.2中,把macos后端的渲染方式大改了一下,必须设置为t,否则会剧烈闪烁。
改这个渲染方式是因为macos10.14的底层变化,不改会导致emacs显示不正常。
想起之前偶尔在windows上用emacs,中文输入的时候,只有汉字候选,没有拼音提示,现在不知道怎么样了。
你用的这个版本不是官方版, 是一个日本人维护的一个版本, 专门针对macOS的, 照理说在mac上应该很好用, 不过我试用过几次, 每次都感觉不好用, 所以一直都在用官方版.
此bug经过进一步反馈和讨论, 官方已彻底修复, master分支.