
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 emacs
comando haga el trabajo por mí. El comando emacs
ahora 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.
El script de shell se puede encontraraquí.
PD: el método abreviado de teclado funciona bien cuando /usr/bin/emacs
está vinculado al ejecutable predeterminado de emacs (en /etc/alternatives/emacs
mi 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 TERM
variable 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. :)