Skip to content

Instantly share code, notes, and snippets.

@douo
Created June 2, 2025 07:41
Show Gist options
  • Save douo/aa4858a1ef429203c49880175c215dda to your computer and use it in GitHub Desktop.
Save douo/aa4858a1ef429203c49880175c215dda to your computer and use it in GitHub Desktop.
本脚本用于配合 yabai 的 window_focused 信号,实现以下自动化功能:每次窗口聚焦时,根据不同应用自动切换输入法
#!/bin/bash
# ============================================================================
# 脚本名称:switch_input_method.sh
#
# 功能简介:
# 本脚本用于配合 yabai 的 window_focused 信号,实现以下自动化功能:
# - 每次窗口聚焦时,根据窗口 ID 查询应用名称
# - 根据不同应用自动切换到英文或中文输入法(通过 macism 命令)
# - 并将当前窗口的 ID、应用名、窗口标题及切换记录写入日志,方便调试
#
# 使用方法:
# 1. 通过 yabai 信号绑定调用本脚本,例如:
# yabai -m signal --add event=window_focused action="$HOME/scripts/switch_input_method.sh"
# 2. 日志将输出到 $HOME/scripts/switch_input_method.log
#
# 依赖:
# - jq(用于处理 JSON,安装:brew install jq)
# - macism(用于切换输入法,安装:brew install knu/tap/macism)
# ============================================================================
# ---------- 以下为脚本正文 ----------
# 变量定义
ENGLISH_IME="com.apple.keylayout.ABC"
CHINESE_IME="im.rime.inputmethod.Squirrel.Hans"
# 第一类:始终切换到英文输入法的应用
english_apps=("Terminal" "iTerm2" "kitty")
# 第二类:始终切换到中文输入法的应用
chinese_apps=("WeChat" "QQ" "DingTalk" "Microsoft Word" "Notes" "钉钉" "有道云笔记")
# 获取聚焦窗口ID
window_id="$1"
# 如果window_id为空,主动获取
if [ -z "$window_id" ]; then
window_id=$(yabai -m query --windows --window | jq -r '.id')
fi
window_info=$(yabai -m query --windows --window "$window_id")
# 获取app名
app_name=$(echo "$window_info" | jq -r '.app')
# 获取窗口标题
window_title=$(echo "$window_info" | jq -r '.title')
# 日志记录
# echo "$(date '+%Y-%m-%d %H:%M:%S') - ID: $window_id, App: $app_name, Title: $window_title" >> "/tmp/switch_input_method.log"
# 判断函数
function contains() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [ "${!i}" == "${value}" ]; then
return 0
fi
}
return 1
}
# 判断所属类别并切换输入法
if contains "${english_apps[@]}" "$app_name"; then
macism "$ENGLISH_IME"
elif contains "${chinese_apps[@]}" "$app_name"; then
macism "$CHINESE_IME"
else
# 第三类,不切换输入法
:
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment