emacs 是否有程序处于后台运行的变量, 或者切换的hook

使用了sis, 想实现evil norm模式下, 输入法始终为英文, 目前对 sis-change-hook 加了hook, 但是发现切换到别的程序后, 输入法也会定时自动被切换到因为.

所以想在函数里判定下是否是后台运行的逻辑, 没找到实现的方法.

背景: OS: macos emacs: emacs 28.2

我有一个hammerspon的脚本切换到emacs的时候, 输入法换到英文, 切换到微信的时候, 输入法换到中文, 但是切换的时候不稳定, 常常切换不成功. 这就导致我emacs切换到微信, 再回来, 输入法就维持到中文了.

切换到别的程序会切换到英文是正常的吧,这个行为应该是系统的行为。
sis 应该会在你从其它程序切回来的时候,恢复你切出去的时候的输入法状态

看看这个

你用的什么操作系统?什么输入法?有没有安装输入法切换软件?

操作系统里有没有开启自动切换输入法功能?

输入法里有没有开启切换输入法功能?

输入法切换软件是否监听 Emacs 窗口?

你用的什么操作系统?什么输入法?有没有安装输入法切换软件?

macos, 使用了hanmmerspoon来实现的切换输入法.

local function Chinese()
  hs.keycodes.setMethod("Pinyin - Simplified")
  hs.keycodes.currentSourceID("com.apple.inputmethod.SCIM.ITABC")
  hs.keycodes.currentSourceID("com.sogou.inputmethod.sogou.pinyin")
end

local function English()
  hs.keycodes.setLayout("U.S.")
  hs.keycodes.currentSourceID("com.apple.keylayout.ABC")
end

local function set_app_input_method(app_name, set_input_method_function, event)
  event = event or hs.window.filter.windowFocused

  hs.window.filter.new(app_name)
    :subscribe(event, function()
                 set_input_method_function()
              end)
end

输入法切换软件是否监听 Emacs 窗口?

有监控emacs 窗口, 但是切换经常有延迟, 或者失效.

外部软件修改 Emacs 的输入法只应该出现在 Emacs 窗口出现和消失的时候复原 Emacs 窗口出现之前的输入法。

内部 sis 应该在各种编辑状态下切换输入法。

用 evil 应该把切换输入法的 sis hook 到 evil xx state mode上吧,为什么要反过来把 evil hook 到 sis 上?

sis 作者的 macism 挺好用的,四五年前用过小黄锤,功能强大无比但天天崩溃,然后就弃用了。