3 votos

Cómo interactuar con la ventana detrás de gnome-terminal en la tecla de acceso directo de prensa?

Yo a menudo utilizar el Terminal para escribir código en vim, y como mi Terminal es ver-a través de yo soy capaz de ver lo que él detrás de ella, así que si tengo un manual de detrás de él en una ventana del explorador o algo como eso, entonces yo puedo hacer referencia a él sin necesidad de cambiar o tener que tenerlo junto a mi ventana de Terminal que prefiero no hacer como windows y bastante pequeño.

Pero hay una desventaja, a menudo es necesario para copiar y pegar texto, desplace la página hacia abajo detrás de la Terminal, buscar cosas sobre ella, etc.
Y para ello, tengo que cambiar a ella que no me gusta hacerlo, así que lo mejor sería que si había una manera de hacer que a en gnome-terminal, cuando presiono un cierto método abreviado de teclado, para mi cursor ir a través de la ventana actual (que es ver-a través de y debe permanecer encima) para que yo pueda ser capaz de interactiva con la ventana de atrás (por ejemplo, para copiar y pegar texto, para mover la página hacia abajo, y buscar cosas en la página) gnome-terminal sin que se mueve realmente a ella o ponerla enfrente de la gnome-terminal ventana.

Por supuesto que el teclado presionando el atajo - o tal vez uno diferente si esto no se puede hacer con el mismo atajo - debe devolver todo vuelve a la normalidad y la forma en que estaban antes que yo primero pulsado el acceso directo que me hizo interactuar con la ventana de atrás.

También me gustaría para mi el teclado para interactuar con la ventana de atrás y no sólo mi cursor. Y también me gustaría para que esto sólo sea el caso de la gnome-terminal aplicación como no quiero que esto suceda con otras aplicaciones.

Se puede hacer esto?

Estoy corriendo Ubuntu GNOME 15.10 con GNOME 3.18.

2voto

Jacob Vlijm Puntos24137

No es literalmente lo que usted pidió, pero si usted tiene una combinación de teclas que reconoce automáticamente tanto la gnome-terminal -ventana y la ventana directamente debajo de él, se podría cambiar (cambiar) entre los dos rápidamente, sin más esfuerzo.

El programa de instalación hace exactamente eso: Si (y sólo si), ya sea la ventana activa o la ventana directamente debajo de él, es un gnome-terminal ventana, el script hace cambiar de lugares, como se muestra en las imágenes. He dejado un par de irrelevante windows para ilustrar que no toman parte en la alternancia:

  1. Tener un gnome-terminal ventana en la parte superior de una gedit ventana:

    enter image description here

  2. Pulsa el atajo:

    enter image description here

  3. Pulse de nuevo:

    enter image description here

Y así sucesivamente. Como se mencionó, esto sólo ocurrirá si bien una de las más altas de windows pertenece a gnome-terminal.

Cómo configurar

  1. La secuencia de comandos(s) necesidad wmctrl

    sudo apt-get install wmctrl
    
  2. Guardar tanto secuencias de comandos siguiente en el mismo directorio, ya que uno de los scripts de las importaciones de las funciones de los otros:

    Guión 1
    para que se guarden como (exactamente) z_list.py:
    Esto es en realidad un fondo de secuencia de comandos, mantener el orden z de windows. El orden-z no puede ser determinada por la "normal" herramientas como wmctrl o xdotool. Ejecución de un script sencillo para seguir la pista de la ventana activa actualmente, nos dará la orden-z sin embargo.

    #!/usr/bin/env python3
    import subprocess
    import time
    import os
    
    rootdata = os.environ["HOME"]+"/.focus_history"
    
    def current_windows():
        try:
            return subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8")
        except subprocess.CalledProcessError:
            pass
    
    def convert_format(w_id):
        return w_id[:2]+(10-len(w_id))*"0"+w_id[2:]
    
    def read_data():
        return open(rootdata).read().splitlines()
    
    def get_top(wlist):
        try:
            top = convert_format([l.split("#")[-1].strip() for l in \
               subprocess.check_output(["xprop", "-root"]).decode("utf-8").splitlines() \
                   if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0])       
            return [l for l in wlist if top in l][0]
        except IndexError:
            pass
    
    if __name__ == "__main__":
        open(rootdata, "wt").write("This is an empty line")
        while True:
            time.sleep(0.5)
            wdata = current_windows()
            if wdata != None:
                wlist = wdata.splitlines()
                # get frontmost window (as in wmctrl -lG)
                top = get_top(wlist)
                oldlist = read_data()
                if not any([top == oldlist[0], top == None]):
                    # clean up closed windows
                    [oldlist.remove(l) for l in oldlist if not l.split()[0] in wdata]
                    # remove possible other mentions of the active window
                    [oldlist.remove(l) for l in oldlist if l.startswith(top.split()[0])]
                    open(rootdata, "wt").write(("\n").join([top]+oldlist))
    

    Guión 2
    para que se guarden como toggle_terminal.py:
    Como se ha mencionado, guardar este script en uno y en el mismo directorio, junto con z_list.py.

    #!/usr/bin/env python3
    import subprocess
    import z_list
    
    try:
        termpid = subprocess.check_output(["pidof", "gnome-terminal"]).decode("utf-8").strip()
        wlist = z_list.read_data(); top = wlist[0]; second = wlist[1]
        if any([termpid in top, termpid in second]):
            subprocess.Popen(["wmctrl", "-ia", second.split()[0]])
    except subprocess.calledProcessError:
        pass
    

Cómo utilizar

Desde el fondo de la secuencia de comandos se mantiene el seguimiento de activos de windows y crea el orden z de esa manera, se tiene que ejecutar antes de abrir (al menos) el windows te gustaría alternar, preferiblemente como una Aplicación de Inicio.

Para la prueba:

Abra una ventana de terminal, ejecute el fondo de la secuencia de comandos mediante el comando:

python3 /path/to/z_list.py

Abrir una nueva ventana de terminal y (por ejemplo) gedit ventana. El enfoque de la gedit ventana y abrir una nueva ventana de terminal en la parte superior de la misma. Luego de ejecutar en la ventana de terminal el comando:

python3 /path/to/toggle_terminal.py

Las ventanas deben cambiar de lugar (orden). Desafortunadamente, usted no será capaz de ejecutar de nuevo el comando (en el terminal) para traer la ventana de terminal para la parte superior de nuevo, ya que el gedit ventana está activa ahora :). Usted puede asumir sin embargo, funciona a partir de una tecla de acceso directo.

Si todo funciona bien, hacer que el programa de instalación permanente:

  • Agregar z_list.py a las Aplicaciones de Inicio: Dash > de Inicio de Aplicaciones > Añadir el comando:

    /bin/bash -c "sleep 15 && python3 /path/to/z_list.py"
    
  • Agregar secuencias de comandos 2 a una combinación de teclas: seleccionar: Configuración del Sistema > "Teclado" > "Opciones" > "accesos directos Personalizados". Haga clic en el "+" y agregar el comando:

    python3 /path/to/toggle_terminal.py
    

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

;