2010-02-16 13 views
5

Tengo un alias en bash que ejecuta emacsclient si emacs daemon ya se está ejecutando e inicia emacs de lo contrario. Sin embargo, en el caso de que se active una nueva instancia de emacs, ¿puedo hacer que se ejecute en segundo plano para poder seguir usando esa terminal (o cerrarla)? En mi perfil fiesta, tengocrear un alias de emacs que se inicia en segundo plano?

alias ec="/usr/bin/emacsclient.emacs-snapshot -n -c -a /usr/bin/emacs-snapshot" 

Y podría estar en el terminal y escriba

$ ec newfile 

Si emacs daemon no se está ejecutando, es que hay un alias que puede crear para que la línea anterior hacer el equivalente de

$ emacs newfile & 

en lugar de

$ emacs newfile 

(También debo mencionar que estoy usando Linux Ubuntu y emacs-snapshot está asignado al alias, 'emacs').

¡Muchas gracias!

Respuesta

4

En lugar de llamar directamente /usr/bin/emacs-snapshot, escribir un script que llama /usr/bin/emacs-snapshot en el fondo y luego vuelve:

#!/bin/sh 
case $# in 
    0) /usr/bin/emacs-snapshot & 
    *) /usr/bin/emacs-snapshot "[email protected]" & 
esac 

A continuación, se llama a la secuencia de comandos en la forma ordinaria; lanzará un proceso emacs de fondo y regresará inmediatamente.

Si usted desea conseguir la suposición puede utilizar /bin/bash y disown el proceso después de la esac (obtener el PID con $!).

+1

¿Por qué el 'case'? Solo usar 'myscript" $ @ "' funcionará igual que 'myscript' cuando $ # es o. – dubiousjim

+1

@profjim: tal vez en bash pero no en versiones anteriores de '/ bin/sh'. El 'caso' garantiza la portabilidad. En versiones anteriores, 'myscript" $ @ "' se comporta como 'myscript '' '' cuando '$ #' es 0. Cuando eres tan viejo como yo, aprendes a retener la "compatibilidad bug-for-bug". –

+0

bueno saberlo, gracias! – dubiousjim

2

Si bien esta no es la respuesta directa a su pregunta, esta es la forma más elegante de "iniciar emacs deamon o ejecutar emacsclient de lo contrario". Cree el siguiente alias: alias emacs=emacsclient -c -a "". A partir de man emacsclient:

-a, --alternate-editor = Editor ... Si el valor de EDITOR es la cadena vacía, ejecutar `emacs --daemon' para iniciar Emacs en modo demonio, y Intenta conectarte.

Cuestiones relacionadas