El método abreviado de teclado personalizado para el script bash no funciona

El método abreviado de teclado personalizado para el script bash no funciona

Soy un usuario de emacs y he escrito algunos archivos de configuración de emacs.

quería ejecutar elServidor de clientecaracterística de emacs usando un soloscript de basheso se encargaría del servidor y el cliente de emacs. El script ejecuta el servidor (si aún no se está ejecutando) y luego ejecuta el cliente en el marco deseado (terminal o gráfico).

He vinculado suavemente el script ejecutable /usr/bin/emacs(anulando el valor predeterminado) para que ejecutar el emacscomando haga el trabajo por mí. El comando emacsahora activa el script desde la terminal y también a través de Alt+F2. El problema es que vincular un método abreviado de teclado al mismo comando (o al script) no funciona.

Adjunto aquí la captura de pantalla de mi acceso directo. ingrese la descripción de la imagen aquí

El script de shell se puede encontraraquí.

PD: el método abreviado de teclado funciona bien cuando /usr/bin/emacsestá vinculado al ejecutable predeterminado de emacs (en /etc/alternatives/emacsmi caso).

Respuesta1

Intenté recrear tu problema y creo que estuve cerca.

El problema que descubrí que estás enfrentando es con la if [[ -t 1 ]]condición.

De acuerdo atldp

Esta opción de prueba se puede utilizar para comprobar si stdin [ -t 0 ] o stdout [ -t 1 ] en un script determinado es una terminal.

Por lo tanto, el script no podrá detectar el programa que lo invocó mediante este condicional. Por lo tanto, esta no es la solución precisa a su problema.

Ahora, internamente, las combinaciones de teclas en Ubuntu se ejecutan a través de una terminal falsa. De hecho, la TERMvariable se establece enmudo, cuando se ejecuta un comando a través de combinaciones de teclas.

Entonces, para resolver tu problema, puedes usar el siguiente código.

if [ $TERM == "dumb" ]
then
        TERMINAL=false
        CREATE="-c"
else
        TERMINAL=true
        CREATE="-nw"
fi

No puedo garantizar que funcione en todos los casos, pero funciona para el uso que usted describió.
Espero eso ayude. :)

información relacionada