É possível levantar uma janela usando um atalho de teclado no Gnome3?

7

Eu mudei recentemente do KDE4 para o Gnome3. No KDE, você pode criar atalhos de teclado específicos da aplicação para levantar janelas. Eu costumo criar um para cada firefox, thunderbird, meu terminal, etc Dessa forma, alternando entre as janelas é relâmpago rápido. O Gnome não parece ter esse tipo de funcionalidade. Também não gosto do esquema de troca de janelas do Gnome3 (alt-tab).

Daí eu queria saber se é possível levantar janelas através do DBUS? Se for, então será possível escrever um script e atribuir um atalho de teclado para isso.

    
por freethinker 15.05.2011 / 13:09

3 respostas

3

Eu encontrei um script no fluxbox wiki que usa wmctrl para encontrar um aplicativo e aumentar sua janela se ele já estiver em execução. Caso contrário, o script inicia o aplicativo. Eu estou usando esse script com ajustes para suportar argumentos, que tenho documentado em meu blog .

  1. Certifique-se de que wmctrl esteja instalado.

    sudo apt-get install wmctrl
    
  2. Adicione o seguinte script ao seu caminho (possivelmente em $HOME/bin/find_app.sh ) e torne-o executável.

    #!/bin/bash
    # Find_app
    
    # Author: Lucas van Staden (lvs at dedmeet.com / http://www.dedmeet.com)
    # This little script will try and find the application attempting to start
    # in the running processes, and if found, focus the application
    # if not found, a new instance will start
    
    # usage:
    # find_app.sh <application with full path>
    
    # params
    # 1 - application to start (full path)
    
    # helper applications
    DOLLARONE=$(echo $1 | sed -e 's/[\t ]*$//') #Delete trailing spaces
    WMCTRL='which wmctrl';
    GREP='which grep';
    APPLICATION=$(echo $DOLLARONE | cut -d ' ' -f 1)
    if [ "x$APPLICATION" != "x$DOLLARONE" ]; then
      APPARGS=$(echo $DOLLARONE | cut -d ' ' -f 2)
    fi
    BASENAME='basename $APPLICATION';
    BASENAME='echo $BASENAME | tr "[:upper:]" "[:lower:]"'
    FOUND=0;
    function findwindow {
    # 1 = BASENAME
    # 2 = WMCTRL
    # 3 = GREP
            IFS=$'\n';
            for RUNNING in '$2 -l -x'
            do
                    if [ 'echo $RUNNING | tr "[:upper:]" "[:lower:]" | $3 -c $DOLLARONE' -gt 0 ]
                    then
                            HOSTNAME='hostname'
                            WINDOW=${RUNNING#*${HOSTNAME} }
                            $2 -a $WINDOW
                            FOUND=1;
                    fi;
            done
    }
    if [ "x$APPARGS" = "x" ]; then
      findwindow $BASENAME $WMCTRL $GREP;
      if [ $FOUND -eq 0 ]
      then
              $APPLICATION &
              sleep 2;
              # Try and find the application, after opened
              findwindow $BASENAME $WMCTRL $GREP;
              if [ $FOUND -eq 0 ]
              then
                      # Still not found, wait a bit more, and try again
                      sleep 3;
                      findwindow $BASENAME $WMCTRL $GREP;
              fi
      fi
    else
      $APPLICATION $APPARGS &
    fi
    
  3. Atualize os arquivos de entrada da área de trabalho dos aplicativos nos quais você deseja ter um atalho singular para iniciar e elevar, para que os aplicativos sejam invocados por meio do script acima.

    Por exemplo:

    cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
    

    Edite firefox.desktop em ~/.local/share/applications/ e altere a linha Exec para se referir a find_app.sh :

    Exec=find_app.sh "firefox %u"
    
  4. Agora adicione um atalho de teclado para seu navegador padrão:

    Configurações do sistema | Teclado | Atalhos | Lançadores | Inicie o navegador da Web

  5. Reinicie o shell do gnome: Pressione Alt r para abrir o diálogo de execução. Digite r e pressione Enter .

Agora você deve poder iniciar / aumentar seu navegador usando um único atalho de teclado.

    
por 17.05.2011 / 12:08
2

Existe uma ferramenta semelhante chamada xdotool . Parece ser o mesmo que wmctrl. A principal vantagem sobre o último, talvez, é que ele usa IDs X Window em vez de strings para manipular janelas. Eu não sei se isso importa muito no seu caso. Mas diga que você está usando o Chrome, aberto em um site, cujo título tem o Mozilla, então você pode não conseguir identificar o aplicativo pelo título da janela.

    
por 23.12.2011 / 02:56
0

Perceba que essa é uma pergunta muito antiga, mas as respostas ainda são relevantes. Não sei se esse foi o caso anos atrás, mas a tarefa agora pode ser realizada em uma linha: wmctrl -xa xfce4-appfinder || xfce4-appfinder -c

Isso pode ser expandido em um script que se comporta de maneira semelhante a um dado anteriormente:

#! /usr/bin/env bash

if [ $# -lt 1 ]; then
    echo "usage: 'basename $0' [class-name] [command] [args]"
    echo
    echo "Find and activate window with [class-name]."
    echo "Execute [command] if window cannot be found."
    echo
    echo "If [command] is not given, it is assumed to be [class-name]"
    exit
fi

if [ $# -lt 2 ]; then
    class="$1"
    command="$1"
else
    class="$1"
    shift
    command="$@"
fi

if (! wmctrl -xa $class) ; then
    $command
fi

Pode ser usado assim: find_app.sh xfce4-appfinder

Ou então: find_app.sh xfce4-appfinder xfce4-appfinder -c

    
por 22.06.2017 / 08:32

Tags