我正在尝试将firefox-ctrl-q-workaround转换为也处理 Ctrl-Shift-C。这是因为我一直错误地在 Firefox 中使用 Ctrl-Shift-C 并且一直弹出打开的开发者工具变得乏味。令人难以置信的是,Firefox 没有任何配置快捷方式的方法。
设置大致如下所示:
首先,将 i3 中的密钥绑定到脚本:
# i3 config
bindsym --release Control+Shift+c exec --no-startup-id ~/ctrl_c_map.sh
脚本本身看起来像:
# This is the active window
W="$(xdotool getactivewindow)"
# Get window class
WM_CLASS="$(xprop -id "$W" | awk -F '"' '/WM_CLASS/{print $4}')"
# Succeed if the WM_CLASS is firefox
is_firefox() {
[ "$WM_CLASS" == "firefox" ] || [ "$WM_CLASS" == "Firefox Developer Edition" ]
}
send_key() {
keytosend=$1
xdotool key --clearmodifiers --window "$W" "$keytosend"
}
if is_firefox; then
# remap to copy (Ctrl+C)
send_key ctrl+c
else
# re-send original C-S-c as it was actually useful
send_key ctrl+shift+c
fi
这在 Firefox 中有效 - 捕获 Ctrl-Shift-C 事件并将其重新映射到 Ctrl-C,并复制任何选定的文本。万岁!
但是,在任何其他程序中(特别是在 Ctrl-Shift-C 真正有用的终端中),都会出现问题。当ctrl+shift+c
使用 发送密钥时xdotool
,i3 再次捕获它并再次触发脚本,使我们陷入无限循环,您只能通过混合 Ctrl/Shift 来逃脱。此外,目标窗口永远不会得到它的 Ctrl-Shift-C 键:它在 i3 和 bash 之间无休止地循环,但从未真正到达。
如何在没有无限循环的情况下从 i3 触发的脚本中发送相同的绑定键?bindsym