想要在 pyim 输入法下配合 key-chord
比如,当我在 pyim 下,快速按下 jk 键,它会执行某个函数,如果单单按个 j 键,pyim 将会弹出 候选词,不影响使用
因为我注意到,无论 pyim 选的是半角还是全角符号,key-chord 无效
想要在 pyim 输入法下配合 key-chord
比如,当我在 pyim 下,快速按下 jk 键,它会执行某个函数,如果单单按个 j 键,pyim 将会弹出 候选词,不影响使用
因为我注意到,无论 pyim 选的是半角还是全角符号,key-chord 无效
你搜索一下 pyim 的 issue 吧,好像有同学以前提到过这个问题,还提出了一个解决方案
他的问题大概怎么描写的??有点难找
How to us evil-escape when I am input Chinese using pyim? · Issue #260 · tumashu/pyim · GitHub like this.
我研究研究,似乎还跟 pyim 的配置有关,我直接拿过来无法使用
非常感谢
也可以用这个
虽然在emacs28里面有些函数名字要修改一下才能用,作者好像也是论坛中的道友。
输入法不用的/
键(或其他不用的按键)可用来关闭输入法,关闭后可以执行其他函数。`
这是我最近的设置。
感谢,不过没有我想要的那么方便
似乎无效,太久没维护了
其实略加改动,在28里是可以用的
(require 'key-chord)
(defun rime--enable-key-chord-fun (orig key)
(if (key-chord-lookup-key (vector 'key-chord key))
(let ((result (key-chord-input-method key)))
(if (eq (car result) 'key-chord)
result
(funcall orig key)))
(funcall orig key)))
(advice-add 'pyim-input-method :around #'rime--enable-key-chord-fun)
上面的 advice 是为了在 emacs-rime 中使用 key-chord 写的,应该也适用于 pyim(以前测试过)
这个可能是一个更好的解决思路,如果可行的话
太感谢了,完全可行:grinning:
有用,key-chord配合pyim可以进一步提升输入法体验:
(key-chord-define-global " j" 'pyim-convert-string-at-point)
(key-chord-define-global " k" 'pyim-convert-string-at-point)
您好,能分享一下emacs-rime的版本吗?
把 pyim 改成 rime
(advice-add 'rime-input-method :around #'rime--enable-key-chord-fun)
似乎这个 issue 里面的解决方法过期了,用到的一些 api 都没有了。我是想向原来那个 issue 的问题一样,在使用 evil-escape 的时候,快速输入 kj
切换 evil 状态,而不是让 pyim 上屏词组。不知道 issue 中的函数要如何改进?
我用的下面这段代码,你试试看。效果是快速jk之后中文不上屏,而是将已经输入的拼音插入buffer中,并切换到evil的normal模式。
有两个问题:1. 我本地的pyim还是5.2.6版本,不确定最新的pyim会不会有不兼容的修改;2. 这段代码只能说基本可以工作,但不够完美(譬如当前输入了jk,然后再快速按jk,已经输入的jk就没了)。
(with-eval-after-load 'evil-escape
(defun pyim-plus-self-insert-command (orig-func)
(interactive "*")
(let ((first-key (elt evil-escape-key-sequence 0))
(second-key (elt evil-escape-key-sequence 1)))
(if (and (local-variable-p 'last-event-time)
(floatp last-event-time)
(< (- (float-time) last-event-time) evil-escape-delay))
(set (make-local-variable 'temp-evil-escape-mode) t)
(set (make-local-variable 'temp-evil-escape-mode) nil))
(if (and temp-evil-escape-mode
(string-prefix-p (char-to-string first-key) (reverse (pyim-entered-get 'point-before)))
(equal last-command-event second-key))
(progn
(push last-command-event unread-command-events)
;; (pyim-process-outcome-handle 'pyim-entered)
(push (pyim-entered-get 'point-before) pyim-outcome--history)
(pyim-process-terminate))
(progn
(call-interactively orig-func)
(set (make-local-variable 'last-event-time) (float-time))))))
(advice-add 'pyim-self-insert-command :around #'pyim-plus-self-insert-command)
)
感谢🙏,测试了一下,相当完美~