Solução usando xdotool
Eu não acho que exista um DE que tenha uma opção embutida para isso, mas com a ajuda de xdotool
podemos escrever um script personalizado que deve fazer o truque:
#!/bin/bash
# 'f6f7swap.sh' by Glutanimate
#
# Reassign F6 to F7 if specific application has focus
# Dependencies: xdotool x11-utils
#
# Usage: f6f7swap.sh '<full window class>'
# Example: f6f7swap.sh '"gnome-terminal", "Gnome-terminal"'
# --Variables--
WinClass="$1"
# --Main--
# get currently active window ID
ActiveWinID="$(xdotool getactivewindow)"
# get window class of active window
ActiveWmClass="$(xprop -id "$ActiveWinID" \
| grep "WM_CLASS" \
| awk -F' = ' '{print $2}' )"
# Compare with provided window class
if [[ "$ActiveWmClass" = "$WinClass" ]]; then
echo "Target window found. Sending 'F7'"
xdotool key F7
else
echo "Target window not found. Sending 'F6'"
xdotool key F6
fi
Instruções
- Verifique se você tem
xdotool
exprop
instalado (sudo apt-get install xdotool x11-utils
) - Salve este script como
f6f7swap.sh
e torne-o executável - Determine a classe da janela da sua janela / aplicativo de destino executando
xprop | grep WM_CLASS
e clicando em uma janela de amostra -
Execute
f6f7swap.sh
com a classe de janela inteira como um argumento, por exemplo:f6f7swap.sh '"gnome-terminal", "Gnome-terminal"'
f6f7swap.sh
tentará corresponder à janela ativa com a classe de janela fornecida. Se eles corresponderem, o script enviará 'F7'; se não, enviará 'F6'. - Vincule o comando completo (por exemplo,
f6f7swap.sh '"gnome-terminal", "Gnome-terminal"'
) a F6 nas preferências do seu teclado
Script atualizado
Segue-se uma versão mais genérica do script que permite a troca de qualquer chave à sua escolha:
#!/bin/bash
# 'keyswap.sh' by Glutanimate
#
# Reassign keys if specific application has focus
# Dependencies: xdotool
#
# Usage: keyswap.sh '<full window class>' '<input key>' '<output key>'
# Example: keyswap.sh '"gnome-terminal", "Gnome-terminal"' 'F6' 'F7'
# --Variables and Checks--
Usage="Usage: keyswap.sh '<full window class>' '<input key>' '<output key>'"
if [[ "$#" != "3" ]]; then
echo "Error: Insufficient arguments"
echo "$Usage"
exit 1
fi
WinClass="$1"
OrigKey="$2"
ReplKey="$3"
# --Main--
# get currently active window ID
ActiveWinID="$(xdotool getactivewindow)"
# get window class of active window
ActiveWmClass="$(xprop -id "$ActiveWinID" \
| grep "WM_CLASS" \
| awk -F' = ' '{print $2}' )"
# Compare with provided window class
if [[ "$ActiveWmClass" = "$WinClass" ]]; then
echo "Target window found. Sending $ReplKey"
xdotool key "$ReplKey"
else
echo "Target window not found. Sending $OrigKey"
xdotool key "$OrigKey"
fi
Invoque-o com:
keyswap.sh '<full window class>' '<input key>' '<output key>'
Por exemplo:
keyswap.sh '"gnome-terminal", "Gnome-terminal"' 'F6' 'F7'