具有i3 bindsym和xdotool的按键的无限循环

问题描述 投票:0回答:1

我正在尝试将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绑定键?

bash x11 xdotool i3
1个回答
0
投票
bindsym Control+Shift+c [class="Firefox"] exec xdotool key --clearmodifiers ctrl+c
© www.soinside.com 2019 - 2024. All rights reserved.