GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Iniciar la aplicación solo si aún no está abierta?

Me gustaría imitar el uso de Alfred en Mac OS X, donde si intenta abrir una aplicación después de buscarla, solo abrirá una nueva ventana si el programa aún no se está ejecutando; de lo contrario, establecerá el foco en el instancia actualmente en ejecución de esa aplicación. ¿Hay alguna forma de cambiar el comportamiento predeterminado del iniciador para verificar esto antes de abrir una nueva ventana?

Mejor respuesta

Actualización del 7 de abril:se agregó una versión diferente y se encontró a Albert, ¡vea la actualización y la bonificación a continuación!

Sobre la funcionalidad del guión :
Has preguntado ” ¿Hay alguna forma de cambiar el comportamiento predeterminado del iniciador para verificar esto antes de abrir una nueva ventana? “. La respuesta básica es no, como usuario habitual, no tiene forma de agregar ese comportamiento a dash. Sin embargo, si hubiera un desarrollador de unity scope que estuviera dispuesto a implementar eso, podría acercarse a él o desarrollar uno usted mismo si tiene determinación y está dispuesto a aprender. Mis habilidades de codificación son muy modestas, por lo tanto, utilizo secuencias de comandos de shell y la interfaz gráfica disponible para las secuencias de comandos como solución alternativa.

Información relacionada

Publicación original:

Escribí un guión que usa el diálogo zenity y wmctrl para lograr lo que pediste. Tenga en cuenta que este es un script gráfico, lo que significa que solo funcionará con Windows, en GUI, y no funcionará si intenta iniciar algo en tty. Además, por lo que entiendo, Alfred hace exactamente lo mismo. Puede crear un acceso directo en el escritorio o un acceso directo en el iniciador, como se describe aquí y aquí.

El guión:

#!/bin/bash
# Author: Serg Kolo
# Description: A launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for https://askubuntu.com/q/440142/295286
# Date: April 6 , 2015
#


MYPROG=$( zenity --entry --title='MY LAUNCHER' --text='Type the name of application to run' )
sleep 0.5
wmctrl -lx | awk '{print $3}' | grep -i "$MYPROG"

if [ $? -eq 0 ]; then
    sleep 1         
    wmctrl -xa $MYPROG
   #as an alternative try the line bellow
   #wmctrl -a $MYPROG
    exit 1
else 
    $MYPROG &
    exit 0
fi

Notas al margen: en la versión anterior, el script usaba echo $?, para probar si las expresiones anteriores salían con éxito. Según la sugerencia de muru (de la edición), cambié el código a una versión algo más compacta, por lo que le sugiero que eche un vistazo a la versión anterior y la actual.

Además, previamente wmctrl -a $MYPROG no funcionó con la prueba de google-chrome o chromium-browser; por alguna estúpida razón, algunos programas tienen la propiedad WM_CLASS de la ventana en mayúscula, mientras que el programa aparece en dpkg --get-selections está en minúsculas (solo lea man wmctrl y ejecuta wmctrl -lx , tu sabrás). Agregar ese -ax debería encargarse de esto. El script abre la ventana de cromo ya abierta como debería

Otra cosa:wmctlr es algo extraño porque a veces necesita un retraso (tenía experiencia con él en otro script), así que tuve que agregar sleep 1 línea. Anteriormente, funcionaba de forma intermitente con Firefox, pero ahora funciona a la perfección.

Relacionado:¿Bluetooth en Ubuntu 16.04?

El guión en acción

En la animación a continuación, puede ver que en la primera ejecución de la secuencia de comandos, hay una instancia de Firefox abierta y la secuencia de comandos cambia el foco a esa ventana; en la segunda prueba, abro una nueva instancia de google-chrome, que no se ha abierto anteriormente.
(Nota al margen:si tiene curiosidad sobre el escritorio, por cierto, es openbox con cairo dock)

Por sugerencia en los comentarios, se eliminó la animación incrustada, solo se publicó el enlace. Informe si está roto por favor! http://i.stack.imgur.com/puuPZ.gif

Actualización, 7 de abril

Mejoré un poco la secuencia de comandos para hacer que todos los programas se enumeran en el cuadro de entrada desplegable de zenity. Ahora el usuario no tiene que memorizar cada programa, sino que puede desplazarse por una lista de ellos usando las teclas de flecha o simplemente abrir el menú desplegable. Además, esta versión mejorada abre las ventanas no por nombre, sino por ID de ventana, lo que brinda un rendimiento mucho mejor. Tenga en cuenta que la forma en que reviso los archivos .desktop es un poco redundante, usando el comando de corte dos veces, pero como mi script-fu no es tan bueno hasta ahora, esto es todo lo que puedo hacer. ¡Sugerencias para mejorar son bienvenidas!

#!/bin/bash
# Author: Serg Kolo
# Description: Second version of a launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for https://askubuntu.com/q/440142/295286
# Date: April 7 , 2015
#

set -x

MYPROG=$(zenity --entry --text 'Select program from list' --entry-text $(ls /usr/share/applications/*.desktop | cut -d'/' -f5 | cut -d'.' -f1 | xargs echo))
sleep 0.5
# Do we have a window of such program ?
wmctrl -lx| awk '{print $3}'  | grep -i $MYPROG

if [ $? -eq 0 ]; then
    sleep 0.5 # if yes, find that window id, and raise it
    WINID=$(wmctrl -lx | grep -i $MYPROG | awk 'NR==1{print $1}')
    wmctrl -ia $WINID &
 #  exit 0  
else
    echo $MYPROG | grep -i libreoffice
    if [ $? -eq 0  ]
    then
        MYPROG=$(echo $MYPROG | sed 's/-/ --/g')
    fi
    $MYPROG &

#  exit 0 
fi

Bonificación:

De hecho, encontré Albert, que es una versión Linux de Alfred, pero no lo probé yo mismo. Sin embargo, vale la pena echarle un vistazo. Sin embargo, como ya señaló Jacob, todavía hay errores.

Hay una aplicación llamada Gnome-Do, que gráficamente se parece a Alfred, sin embargo, no tiene la misma funcionalidad que este script.

Avíseme si le gusta este script, si hay algo que necesita arreglarse, y no olvide votar la respuesta si la encuentra útil


Ubuntu
  1. Cómo abrir Appimage en Linux

  2. Apache 2 no se pudo vincular, ¿la dirección ya está en uso?

  3. Keepassx 0.4.3 en 11.10 (unidad) ¿No está visible en el conmutador de tareas (alt-tab)?

  4. ¿Xubuntu Libre Office Calc no puede abrir el archivo de red?

  5. ¿Por qué Files (nautilus) abre una nueva ventana aunque ya hay una abierta?

Abra carpetas en cualquier aplicación de terminal de Nautilus

Cómo abrir una ventana de terminal de Linux

5 formas de abrir o iniciar una aplicación en Debian

18.04:¿Emoji de color que no aparece en Chrome, solo parcialmente en Firefox?

¿Windows no enfocado no responde a los clics del mouse?

Gedit en 16.04:¿Mostrar pestaña con nombre de archivo cuando solo se abre un archivo?