Atajo para llevar todas las terminales abiertas al frente

17

Después de navegar a una página web o editor, ¿hay alguna forma de devolver todos los terminales abiertos al frente en sus posiciones originales? Es un poco molesto hacer clic en el icono del terminal y luego traer cada uno de vuelta individualmente.

¡Gracias!

Ejemplo:

  • Pre-atajo:

Atajo previo a la imagen


  • Post-atajo:

Atajo posterior a la imagen

Tom Selleck
fuente
1
+1 pregunta muy interesante, puede encontrar útil esta respuesta a una pregunta no relacionada : el programa Devilspie podría ser relevante para este problema si no hay una herramienta GUI existente.
evilsoup
Para el archivo: gist.github.com/psi-4ward/18c3a596d28a3cfa772101af755545df Un script que respeta las aplicaciones utilizadas recientemente
Psi

Respuestas:

9

Puede presionar Alt+ Tabpara alternar entre ventanas y Alt+ Shift+ Tabpara volver a alternar entre ventanas. Este acceso directo está hecho para funcionar en casi todos los sistemas operativos gráficos. Yow también puede usar las teclas Super+ Wy flechas para el mismo propósito.

Después de traer una ventana de terminal al frente, presione Alt+ ~para traer todas las demás ventanas de terminal al frente una por una:

cambiar a windows


Para traer automáticamente todos los terminales abiertos al frente (no uno por uno como lo describí antes) necesitará agregar un atajo de teclado para el siguiente script (script tomado de la respuesta de Adobe y mejorado teniendo en cuenta que la versión del script no ha funcionado) para mi):

#!/bin/bash

if [ $# -ne 1 ];then
  echo -e "Usage: `basename $0` PROGRAM_NAME\n
           For example:\n\t
           '`basename $0` gnome-terminal' for Terminal\n\t
           '`basename $0` firefox' for Firefox\n\t
           '`basename $0` chromium-browser' for Chromium\n\t..."
  exit 1
fi

pids=" $(pidof $@) "

if [ "$pids" = "  " ]; then # the string "  " contain two spaces
    echo "There is no program named '$@' opened at the moment."
    exit 1
fi

wmctrl -lp | while read identity desktop_number PID window_title; do 
    if [ "${pids/ $PID }" != "$pids" ]; then
        wmctrl -ia $identity
    fi
done

No olvide hacer que el script sea ejecutable:

chmod +x /path/to/script/script_name

Después de probar el script en la terminal, debe ver:

Radu Rădeanu
fuente
3
Gracias, pero eso es esencialmente lo mismo que hacer clic en el icono del terminal y seleccionar cada uno para llevarlo al frente. Me refiero a un atajo que traerá todas las terminales abiertas al frente. Un ejemplo es que podría estar escribiendo código en gedit, quiero compilarlo en un terminal mientras veo la salida de un registro en otro terminal.
TomSelleck
"La captura de pantalla se tomará en 1 segundo" ... hmm, alguien acaba de mentir aquí ...
Carlos Campderrós
1
@Tomcelic Vea mis nuevas ediciones. Quiero decir que estaba trabajando en tal secuencia de comandos mientras Adobe ha publicado su How to Answer (que para mí no ha funcionado), así que no lo tome de la manera incorrecta.
Radu Rădeanu
8

Aquí hay un pequeño script de bash que trae todas las ventanas cuyo título coincide con ARG al frente:

bring-all-windows.bash ARG

La secuencia de comandos:

#!/bin/bash

Program=$@

wmctrl -l | while read Window; do
    if [[ "$Window" == *"$Program"* ]]; then
        echo "DEBUG: I bring $Window"
        code=`echo "$Window" | cut -f 1 -d " "`
        wmctrl -i -a $code
    fi
done

Puedes atar

bring-all-windows.bash Terminal

a una tecla de acceso rápido (no olvide poner el script en una RUTA de inicio de sesión o escribir una ruta completa).

El script requiere wmctrlestar instalado.

Editar :

Para ejecutar algo desde la terminal, navegue al directorio donde colocó el script, luego

chmod +x bring-all-windows.bash
./bring-all-windows.bash Terminal

Cuando esté seguro de que funciona desde la terminal, intente vincularlo a una tecla de acceso rápido, dando la ruta completa. Cuando esté seguro de que funciona con una tecla de acceso rápido y la ruta completa al script, intente agregar su directorio a la RUTA del shell de inicio de sesión y vea si funciona de esa manera.

Adobe
fuente
¡Esto suena bien! Lo intentaré en breve y te responderé. Todavía estoy un poco perplejo en cuanto a por qué no hay un método nativo para esto, parece que debería ser natural.
TomSelleck
@ Tomcelic: Hay un wmctrly bash: eso es natural.
Adobe
Es cierto, pero no es nativo: P
TomSelleck
¿Hay alguna posibilidad de que le importe revisar cómo usar este script? Creé el script y lo guardé en mi carpeta de inicio y agregué su ruta a / etc / shells. También he agregado un acceso directo en la configuración del teclado con el nombre bring_terminals_forward y el comando es bash /home/michael/Scripts/bring-all-windows.bash Terminal
TomSelleck
Ejecutar el script directamente desde un terminal en ejecución tampoco parece funcionar ... Funciona para programas como gedit, pero no para Terminal
TomSelleck
0

Otra forma es usar xdotool. Debe instalarlo primero, por lo que sudo apt-get install xdotooles obligatorio.

xdotool search --class "terminal" windowactivate %@
xdotool search --name "braiam@bt" windowactivate %@

El primer aspecto para cualquier binario llamado *terminal*, el segundo busca cualquier ventana que tenga como título *braiam@bt*. Entonces, si pones eso en un script bash:

#!/bin/bash

set -e
program=$@

xdotool search --class '$program' windowactivate %@
xdotool search --name '$program' windowactivate %@

Puede saber más sobre esto en el xdotoolmanual.

Braiam
fuente
0

Gráficamente en mi escritorio Ubuntu, tengo mis iconos dispuestos verticalmente en el margen izquierdo de mi escritorio. Si hizo clic con el botón izquierdo en el icono del terminal, verá todas las ventanas del terminal. Luego puede elegir el que desee trabajar. Si hace clic con el botón derecho en el icono del terminal, verá una lista de menús con un "Nuevo terminal" en la parte superior y todos los terminales abiertos en la parte inferior de la lista. Puede seleccionar el que sea su terminal activo.

Este mismo método debería funcionar para cualquier otra aplicación, como su navegador.

Kemin Zhou
fuente