Como posso desativar a alternância de aplicativos Alt-Tab no Cinnamon quando um determinado programa está aberto?

1

Eu uso o emacs e tenho comandos de preenchimento definidos como Alt-Tab em certos modos e, como uma criatura de hábitos, gostaria de mantê-lo assim.

Existe uma maneira fácil de desativar a alternância de aplicativos via Alt-Tab quando o emacs está aberto?

    
por Dan 19.06.2015 / 19:03

2 respostas

3

Eu tenho uma solução. Tudo o que você precisa é começar este script de observador:

#!/bin/bash

keySwitchApplication="switch-applications"
keySwitchApplicationBackward="switch-applications-backward"

backupSwitchApplications="$(gsettings get org.gnome.desktop.wm.keybindings "$keySwitchApplication")"
disableSwitchApplications="$(gsettings get org.gnome.desktop.wm.keybindings "$keySwitchApplication" | sed "s/\,*\s*'<Alt>Tab'//")"

backupSwitchApplicationsBackward="$(gsettings get org.gnome.desktop.wm.keybindings "$keySwitchApplicationBackward")"
disableSwitchApplicationsBackward="$(gsettings get org.gnome.desktop.wm.keybindings "$keySwitchApplicationBackward" | sed "s/\,*\s*'<Shift><Alt>Tab'//")"

disabled="0"

while true; do
  isActive=$(wmctrl -lx | awk -v search=$(printf 0x0%x $(xdotool getactivewindow)) -v wm_class="$wm_class" '{ if( ~ search &&  ~ /emacs/) print  }')

  if [[ "$isActive" != "" ]]; then
    # echo "active"
    if [[ "$disabled" == "0" ]]; then
      # echo "disable shortcut"
      gsettings set org.gnome.desktop.wm.keybindings "$keySwitchApplication" "$disableSwitchApplications"
      gsettings set org.gnome.desktop.wm.keybindings "$keySwitchApplicationBackward" "$disableSwitchApplicationsBackward"
      disabled="1";
    fi
  else
    # echo "not active"
    if [[ "$disabled" == "1" ]]; then
      # echo "enable shortcut"
      gsettings set org.gnome.desktop.wm.keybindings "$keySwitchApplication" "$backupSwitchApplications"
      gsettings set org.gnome.desktop.wm.keybindings "$keySwitchApplicationBackward" "$backupSwitchApplicationsBackward"
      disabled="0"
    fi;
  fi;
  sleep 1
done

O script verifica em um loop infinito a classe da janela emacs e desabilita / ativa Alt + Tab e Shift + Alt + Guia

Se algo der errado, você poderá redefinir a entrada para as configurações padrão:

gsettings reset org.gnome.desktop.wm.keybindings switch-applications
gsettings reset org.gnome.desktop.wm.keybindings switch-applications-backward

No meu caso:

% gsettings reset org.gnome.desktop.wm.keybindings switch-applications  
% gsettings get org.gnome.desktop.wm.keybindings switch-applications   
['<Super>Tab', '<Alt>Tab']

% gsettings reset org.gnome.desktop.wm.keybindings switch-applications-backward
% gsettings get org.gnome.desktop.wm.keybindings switch-applications-backward  
['<Shift><Super>Tab', '<Shift><Alt>Tab']

Créditos

@Serg e sua resposta Como desabilitar a troca de idioma de entrada no terminal
@JacobVlijm para sua comentários

    
por A.B. 20.06.2015 / 11:52
1

Um jeito feio e hilário vem à mente ...

A configuração do teclado deve ser armazenada em: ~/.config/dconf/user Portanto, se você tiver dois arquivos, um em que Alt+Tab esteja habilitado no sistema e o outro em que Alt+Tab esteja globalmente desativado, você poderia, teoricamente, trocá-los.

Script simples que:

  1. Backup Alt+Tab Enabled
  2. Copiar Disabled Alt+Tab over Enabled Alt+Tab
  3. Executar o Emacs
  4. Depois que o Emacs é fechado, copie os arquivos de volta como deveriam

Esse script seria usado para abrir / executar o Emacs

Eu não tenho idéia se isso funcionaria, por segurança eu tentaria primeiro no VB e agora não tenho tempo para tentar ...

    
por RiddleMeThis 19.06.2015 / 20:20