应该有个权威
你的两个版本代码我都试了, 没有解决我的问题。
原因还是, 我不会在 eaf-monitor-key-event 里面读取用户输入, 只会转发事件, 而且你的代码当用户按回车的时候那行匹配没用, 因为问题出在直接按 Ctrl + G了
结论还是我上面说的, 问题真的不是出在 read-string 上面了, 而是 pre-command-hook 遇到 recursive edit 导致错误了 (原因未知)
你没有理解我的问题, 但是还是非常感谢你花了这么多时间帮助我。
你没有看到我图片上的 No recursive edit is in progress
你加个condition-case在read-string看看
我看了, 但是你要在Linux下运行起来, 才能重现我说的 recusive edit 问题。
因为你没有运行起来 eaf , 所以你没有重现我最开始说的问题, 你直接把 eaf-monitor-key-event 里面的 eaf-call 都换成 message 以后, 就丢失了测试环境。
导致你的代码确实没有解决我的问题。
你转发事件 python分析事件 通过dbus通知emacs 我想要一个页码
页码于是就调用 read-string 这个时候quit出现了 至于接下来会发生什么我也不知道
欺负我没有GUI
是的, 但是 read-string 是在 eaf-monitor-key-event 读取的, 不是在 eaf-monitor-key-event 里面, eaf-monitor-key-event 外面调用 read-string 会把 pre-command-hook 搞挂是我没有想清楚的。
而且 eaf-monitor-key-event 里面如果发现有 RET 按键也是会转发给 python 进程的。
我明白你的解决方案, 如果在 eaf-monitor-key-event 里面 read-string , 很容易解决的。
算了吧, 主要是你没有重现我的问题, 但是还是非常感谢你。
我先用我的猥琐方法先用着, 被 pre-command-hook 删除以后强制再加上, 等我以后想到根本原因再用优雅的方案。
你不会是把ret真的发过去了吧
服了你
我是把所有能发的事件都转发给 pyqt , 要不你在 google 里面搜索的时候, 关键字打完, pyqt 那端不能按回车多尴尬啊?
你怎么不知道关键之所在
(defun eaf-input-message (buffer_id interactive_string callback_type)
(let ((input-message))
(setq input-message (condition-case nil (read-string interactive_string) (quit nil)))
(when input-message
(eaf-call "handle_input_message" buffer_id callback_type input-message)
)))
如果我赢了 你就在贡献者中加上我的名字
这行代码只是容错性的,但是这行代码不是问题的关键。
这样写了还是会报错
没问题,但是我估计你要先装个archlibux
你试过了吗?
我git里面有arch docker的配置,如果你可以跑docker,应该很快可以测试
你这段代码确实解决了我的问题, 看来我的想法是错的, condition-case 包裹 read-string 确实有用, 但是我尝试的时候没有加 (quit nil) 这个 handler , 导致我试了 condition-case 方案没用后就放弃了。
你的这段代码已经被标记为为解决方案了。
我要 贡献者