(重新设计)中英文混打:OS输入法管理包 smart-input-source

感觉名字可以短点,smart-input :grin:

@manateelazycat

  1. auto save buffer input source实现进去了。
  2. 现在save-triggers是空的时候,也能正常切换。

但是,save-triggers 和 hint-mode 都还留着没删。
这样,如果用户怕耗系统资源,
把idle切换间隔设置的比较长的话,
仍然可以通过save-triggers实现及时保存。

晚上我给更新到文档上去。

===== 更新 =======

想了想,
还是激进点
把save-triggers 和 hint-mode 删掉了。
减少用户配置时的迷惑。

你试下git最新版,
最新版save-triggers是可选的特性,不加进去也可以。

==== 更新====

最新版save-triggers已删除。

--------------------我是分割线------------------------------

请问下最新版本在颜色设置这块有什么更新吗?
我在Mac 上原来的配置没法更新颜色了,默认把我的光标显示成绿色了,看起来像是匹配了主题的颜色。

颜色这块没动。
绿色是默认色。

你现在自己配置的颜色不起作用了么?

现在我去掉了自己的配置,直接用你的 (smart-input-source-global-cursor-color-mode t) 就可以自动切换颜色了,只是颜色是绿色,我想改成黄颜色可以吗?用习惯了 :grin:

(setq smart-input-source-other-cursor-color "yellow")

我刚才本地试了,是可以的。

这个可以了 :+1:

@goumao 关于Windows 上super 键的问题,我尝试了长按win键的时候输入C-x,@s,基本可以实现,但是有问题,就是单按win键时不能按太久,像s-J这种就没事。请教下AHK怎么实现按住Win+ 其他组合键盘时,Win 只发送一次 C-x,@s? 以下是我目前的代码:

#SingleInstance 
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#MaxHotkeysPerInterval 200
Lwin::

if GetKeyState("Lwin", "P")
  {     
  Send ^x
  Sleep 200
  Send % "@s"
  return
  }
KeyWait, Lwin  
return

加时间检测?
第一次执行按下代码的时候,记下当时的时间last-time。
第二次执行的时候,如果在2秒范围之内,就跳过。并且更新last-time

我原来也这么想的,但一直没找到记录按压时间的函数。 原来我把等待按键抬起的命令放大括号里面就可以解决了,这样只会执行一次语句块,就等抬起。

#SingleInstance 
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#MaxHotkeysPerInterval 200
Lwin::

if GetKeyState("Lwin", "P")
  {     
  Send ^x
  Sleep 200
  Send % "@s"
  KeyWait, Lwin  
  }
return

那我最好给加到winsuper上?

@goumao 还有一个小问题,如果按win键盘的时间太短,就会直接输入@s, 这个不知道是什么原因?

@goumao 现在这个完美了,所有s-hotkey 的都能按了,除了s-x,s-x 这种,M-s-o 这种也没问题了。

Lwin::
  IfWinActive,ahk_class Emacs
  {  
    Send ^x
    Sleep 100
    Send % "@s"
    KeyWait, Lwin  
  } 
  else
  {
  Send {Lwin down}
  KeyWait, Lwin 
  send {Lwin up}
  }
Return

补充:

另外反馈一个情况,目前我在Windows 上使用感觉自动切换光标颜色的功能明显延迟高。

(smart-input-source-global-cursor-color-mode t)
(setq smart-input-source-other-cursor-color "orange")

我用cursor-chg 这个包切换的话就没延迟。

(add-hook 'smart-input-source-set-english-hook
          (lambda ()
            (setq current-input-method nil)
            ))

(add-hook 'smart-input-source-set-other-hook
          (lambda ()
            (setq current-input-method "rime-smart")
            ))

更新: 我回滚到 d377b4feb0a56fd073ef919bf90c7ff72723f447 这个版本用回triggers的方式就很流畅了。

最新的我试了下也发现很卡,我不知道是哪个原因造成的,也是用回triggers方式了

这个卡,是什么个意思。
是smart-input-source自动更改输入法的时候,就卡么?

还是说:比如C-x, b的时候,响应变慢?


我可能知道原因了。。。。。

关键点不在trigger上,
而是在切换软件上。

老的方式是:

  1. 先读输入法,如果输入法没改变,那么就不换输入法。

新的方式是:

  1. 直接更改输入法,无论输入法有没有发生改变。

这样的话:

  1. 新的方式下,macism 更高效。因为在英文到中文,或者中文到英文的切换时,可以少启动一次macism。
  2. 如果 im-select 的读取和无效切换(英文到英文,或者中文到中文)耗时差别很大, 那可能老的方式效率更高。

你的分析应该是对的。我在Mac 上确实没有感觉到延迟,但是在Win下,切换输入法的时候延时很明显,没法忍受。有办法解决吗?

如果是刚才的原因,肯定是可以解决的啦

你帮我测试一下运行时间:

  • 英文状态下:im-select读状态
  • 中文状态下:im-select读状态
  • 中文状态下:im-select切中文
  • 中文状态下:im-select切英文
  • 英文状态下:im-select切中文
  • 英文状态下:im-select切英文

有这些数据,就能确定是不是那个问题了。

我不懂怎么测试时间,没有安装相关的包。有什么建议吗?