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

好。我先用github上的吧。多谢。

其实我一直在等smart-input-source支持emacs-rime。 :joy:能不能考虑提高一点优先级?不知道实现起来麻烦不。

这些颜色都有,改成"#FF11BB" 也是不行。

你是什么Emacs?GNU官方的么?

命令行执行:defaults read org.gnu.Emacs,什么结果?

改成了(setq cursor-type 'hbar) 没效果过,估计是hook 没有成功。 我是通过brew 安装的emacs mac port 28.0.50

返回结果如下:

➜  ~ defaults read org.gnu.Emacs
{
    ApplePressAndHoldEnabled = NO;
    NSFontPanelAttributes = "1, 1";
    NSNavLastRootDirectory = "~";
    NSNavLastUserSetHideExtensionButtonState = 1;
    NSNavPanelExpandedSizeForSaveMode = "{712, 448}";
    "NSWindow Frame NSFontPanel" = "766 268 445 240 0 0 1440 877 ";
    "NSWindow Frame NSNavPanelAutosaveName" = "546 534 347 181 0 0 1440 877 ";
} 

顺便请教下 这里的 ApplePressAndHoldEnabled = NO; 怎么打开? 不知道什么时候mac给我全局关上了,长按按键没法输入字符。

defaults write org.gnu.Emacs ApplePressAndHoldEnabled -bool true试试?
或者
defaults delete org.gnu.Emacs ApplePressAndHoldEnabled?

全局的话: defaults delete -g ApplePressAndHoldEnabled?

你是不是自己通过OS切换输入法的?
没通过smart input source?

两种都试过。通过m-x smart-input-source-switch 也确认过了。

你在hook里面加个 (print "enter hook")
我觉得hook没调用的可能性不大,
那块太直接了,没有什么出错的空间

有没有可能:
你repo/emacs-smart-input-source目录下(或者build/smart-input-source目录下)有 elc文件
而你只更新了el文件,
这样emacs载入还是会选elc文件。

你是说emacs-smart-input-source这个包下面的elc吧?
我是直接下载这个仓库,加入到load path 然后 (require ‘smart-input-source)的,没有手动编译过elc,应该不会自动生成吧。我检查了下包的目录下没有.elc

smart-input-source.el文件

  • 在L222和L228前面,分别加上 (print 222)(print 228)
  • L215改成 (progn (print 215) (run-hooks 'smart-input-source-set-english-hook))
  • L216上面加 (print 216)

hook这块,没有兼容性问题,也特别直接。不应该连hook都运行不了的。

另外,之前switch不会触发hook,已修正
set-english, set-other以前应该就是没有问题的。

@aqua0210

测试cursor,请确保用的是这个版本的文件:

https://github.com/laishulu/emacs-smart-input-source/raw/3599c59d373f958c816922dfe10163353e34c3a8/smart-input-source.el

❯ md5 smart-input-source.el
MD5 (smart-input-source.el) = 76c31e3e0ac7639fe3d5a9386743e222

直接git pull 是这个最新的吗? 我刚git pull 以后,切换中文的时候,光标形状会变化了。改颜色还是没变化

这个和你的emacs有关,
可能是你的版本(28)太新,成熟度不够,或者接口变了?
我是26.3

只要能读到状态,就好办,我再研究一下。

@kangxiaoning

一直复现不了你提的这个问题。
事实上,按<esc>是不会退出inline english region的,
<esc>会退出evil insert mode,
完了那个时候 inline english region仍然是激活状态。
这样可以方便地在region里移动,继续编辑。

可否录屏?注意需要文字描述一下按键序列(不放在录屏里也可以)

@aqua0210 你能复现他提的这个issue么?

我不用evil-mode,我在Emacs标准模式下 按Esc是不会影响inline english region的。没法重现他这个问题。

@goumao 关于光标颜色显示问题,我仔细看了下,看起来是hook没有正常生效。 我用emacs-rime的时候是通过 cursor-chg.el这个包自动切换的,不过我通过下面的配置,并没有生效。 这个包的原理是根据当前输入法的状态自动切换颜色,为nil时是红色,为其他值时是黄颜色。

单独执行 (setq current-input-method nil) 是可以改变光标为红色的,
单独执行 (setq current-input-method "rime") 光标为黄色。

(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")))

我猜测问题不是出现我这个hook里,
而是 current-input-method 是和emacs内置的输入法框架有关的。
但是我这里跟emacs内置的输入法框架是无关的。

你之前改光标形状能成功,说明还是被调用了的。
而你自己直接在emacs里手工执行(set-face-background 'cursor "orange") 没效果
说明就是语句本身的问题。

我去看下 cursor-chg.el 是怎么改光标颜色的,然后把那个迁移过来,应该就可以了。