Tecla de acceso directo / acceso directo personalizado para abrir / traer al frente una aplicación

11

No me imagino que esto está integrado en el sistema, pero ¿es posible hacerlo sin demasiados problemas?

Digamos que abro un programa específico con una tecla de acceso rápido, y cuando presiono esa tecla de acceso rápido nuevamente, la ventana del programa se muestra al frente.

Quiero hacer esto en Ubuntu 9.04.

Tal vez con D-Bus? Cualquier expertos?

Actualización : Esto es lo que terminé en caso de que sea de ayuda para alguien:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Seguramente se puede simplificar, pero no soy un bashgenio. Además, para que mi ejemplo funcione, creé un perfil personalizado en la Terminal que aplica un título único a la ventana para que pueda encontrarlo más tarde. ¡Las posibilidades son infinitas!

Ivan
fuente
1
Para esta tarea simple, el método de jtb funciona mejor, porque xdotools a veces arroja errores X, y wmctrl es más rápido.
Ivan

Respuestas:

10

El wmctrlprograma es justo lo que estás buscando ( sudo apt-get install wmctrl). Puede usar el wmctrl -a "AppTitle"comando para llevar la aplicación al frente. wmctrl -lenumerará todas las ventanas disponibles, por lo que debería ser fácil escribir un script de shell que verifique si su programa se está ejecutando y lo inicia o lo pone al frente. Entonces puedes vincular eso a un atajo de teclado.

Primero guarde el siguiente script en alguna parte, lo usaré /home/jtb/code/bringToFront. Se necesitan dos argumentos, el primero es lo que escribiría en el terminal para iniciar el programa, el segundo es una subcadena del título de la ventana del programa. Si no hay una cadena única constante en el título, tendrá que trabajar un poco más para encontrar la ventana del programa.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Con el script en su directorio actual, ejecute chmod +x bringToFrontpara hacer que el script sea ejecutable. Entonces asegúrese de que funcione; para iniciar / enfocar firefox que podrías ejecutar ./bringToFront firefox "Mozilla Firefox".

  2. Ahora necesitamos vincular una tecla de acceso directo. Ejecute gconf-editory navegue la estructura de carpetas a la izquierda para /apps/metacity/keybinding_commands.

  3. Haga doble clic en el primero commandcon un valor en blanco, probablemente command_1. Escriba la ruta completa al script y proporcione los dos parámetros, por ejemplo /home/jtb/code/bringToFront firefox Firefox.

  4. Desde el panel de la izquierda, seleccione global_keybindings, la siguiente carpeta hacia arriba. Encuentre la runentrada que coincida con el comando que acaba de definir, probablemente run_command_1. Haga doble clic en él y escriba el método abreviado de teclado que desea usar. Ponga los modificadores entre paréntesis angulares, por ejemplo <Ctrl><Alt>F.

Ahora Control+ Alt+ Ftraerá su ventana de Firefox al frente, o la iniciará si aún no se está ejecutando.

jtb
fuente
Sí, me enteré de eso hace un par de minutos, pero fui con xdotool. ¡Gracias!
Ivan
Olvidé mencionar que también utilicé los atajos y comandos globales en gconf para lograr el efecto completo (¡la consola Quake de un pobre!).
Ivan
Ah, sí, no he usado xdotool yo mismo, pero parece que te daría más flexibilidad. Buen punto sobre gconf. Como eso es bastante obvio, también podría editar la respuesta para incluir más detalles para cualquier otra persona que quiera hacer esto.
jtb
Consola Quarth Man's Quake? ¿Te refieres a Tilda? freshmeat.net/projects/tilda
prestomation
Sí, también uso Tilda, pero trabajo en varios proyectos durante la semana, y para cada uno siempre abro tres o cuatro pestañas, por lo que cambiar rápidamente a la consola del proyecto ("espacio de trabajo") sin saturar Tilda es muy útil para mí.
Ivan
3

Aquí hay otra forma de hacerlo xdotools. El proceso de ventana emergente es reconocido por la línea de comando emitida para ejecutarlo (no se necesita un archivo pid o un título de ventana único).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi
etuardu
fuente
0

La respuesta publicada por jtb anteriormente es excelente, pero a veces desea que coincidan los títulos exactos (por ejemplo, desea abrir "GitKraken" pero el título de su navegador "GitKraken vs CLI" también coincide con la consulta).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Así que ahora puede llamar a su script bringToFront de la siguiente manera:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>
Sufí
fuente
0

Esta solución no está parametrizada, pero la he usado para enfocar o iniciar la calculadora gnome.

La opción -R encuentra la ventana o falla, si se encuentra se mueve al escritorio actual, se eleva y se enfoca. El nombre de la calculadora gnome es su ventana con el nombre Calculadora , podría parametrizarse fácilmente, pero nunca he encontrado la necesidad de hacerlo. Lo tengo mapeado Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi
X Tian
fuente