laishulu/emacs-smart-input-source

如何跨行检测当前光标之前的两个单词?感谢感谢 🙏

suliveevil opened this issue · 5 comments

这样的话就能减少中英文切换次数,行内插入单个英文单词也不会影响输入法状态,以及不需要在中文输入法下按两次空格插入一个空格了。

相关讨论

中文空格:

#7

探针:

tumashu/pyim#463

Keyboard Maestro 实现在 macOS 上的两个单词的检测,方法很笨,效率很低:

https://forum.keyboardmaestro.com/t/input-monitor-text-selection-and-character-before-the-cursor/26567

写了个简单的正则匹配,不知道怎么用 elisp 实现

(([\u2e80-\u9fff]+)([\n\r]{1,2})?([\s\t])?(([\u2e80-\u9fff]+)|(\w)+)([\s\t])?)

image

跨行检测两个单词是否含有中文

智能的代价就是更麻烦吧,算了,我先放弃了。

不要自己弄啊,不可靠,容易有edge case,最好是调用emacs自己的功能。
记下当前的cursor,然后调用backward-word函数,再调用current-word获得当前的word,都完成之后光标复原。
大概相当于下面这样:

  (save-excursion
    (backward-word)
    (setq word1 (current-word)
    (backward-word)
    (setq word2 (current-word))

sis中类似代码:

(defun sis--back-detect-chars ()

🤣 我水平太差了,我先学学基本语法再尝试添加 detect-word 吧。

感谢。