我正在尝试将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
触发的脚本中发送same绑定键?
bindsym Control+Shift+c [class="Firefox"] exec xdotool key --clearmodifiers ctrl+c