2010-02-16 16 views
5

Ho un alias in bash che esegue emacsclient se il demone emacs è già in esecuzione e avvia emacs in caso contrario. Tuttavia, nel caso in cui una nuova istanza di emacs venga avviata, posso farla funzionare in background, così posso ancora usare quel terminale (o chiuderlo)? Nel mio profilo bash, hocrea un alias emacs che inizia in background?

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

E potrei essere al terminale e digitare

$ ec newfile 

Se emacs daemon non è in esecuzione, c'è un alias posso creare per rendere la linea di cui sopra fare l'equivalente di

$ emacs newfile & 

anziché

$ emacs newfile 

(Vorrei anche menzionare che sto usando Linux Ubuntu ed emacs-snapshot è assegnato all'alias, "emacs").

Grazie mille!

risposta

4

Invece di chiamare direttamente /usr/bin/emacs-snapshot, scrivere uno script che chiama /usr/bin/emacs-snapshot in background e poi ritorna:

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

quindi si chiama lo script in via ordinaria; lancerà un processo in background emacs e ritornerà immediatamente.

Se si desidera ottenere fantasia è possibile utilizzare /bin/bash e disown il processo dopo il esac (ottenere il PID con $!).

+1

Perché il "caso"? L'uso di 'myscript" $ @ "' funzionerà come 'myscript' quando $ # è o. – dubiousjim

+1

@profjim: forse in bash ma non nelle versioni precedenti di/bin/sh'. Il "caso" garantisce la portabilità. Nelle versioni precedenti, 'myscript" $ @ "' si comporta come 'myscript" "' quando '$ #' è 0. Quando sei vecchio come me, impari a mantenere la "compatibilità bug-per-bug" .. –

+0

buono a sapersi, grazie! – dubiousjim

2

Mentre questa non è la risposta diretta alla tua domanda, questo è il modo più elegante per "avviare emacs deamon o eseguire emacsclient altrimenti". Crea il seguente alias: alias emacs=emacsclient -c -a "". A partire dal man emacsclient:

-a, --alternate-editore = EDITOR ... Se il valore di EDITOR è la stringa vuota, eseguire `emacs --daemon' per avviare Emacs in modalità demone, e prova a collegarti ad esso.