2010-02-16 13 views
5

Ich habe einen Alias ​​in der bash, der emacsclient ausführt, wenn der emacs-Daemon bereits läuft und sonst emacs startet. Wenn eine neue Instanz von Emacs jedoch hochfährt, kann ich sie im Hintergrund laufen lassen, damit ich das Terminal noch benutzen kann (oder es schließe)? In meinem Bash-Profil, ich habeEmacs-Alias ​​erstellen, der im Hintergrund startet?

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

Und ich könnte am Terminal sein und

$ ec newfile 

Wenn Emacs-Daemon nicht läuft bereits geben, ist es eine Alias ​​ich erstellen kann die Zeile oben zu machen tun das Äquivalent von

$ emacs newfile & 

anstelle von

$ emacs newfile 

(Ich sollte auch erwähnen, dass ich Linux Ubuntu verwende und emacs-snapshot ist dem Alias ​​'emacs' zugewiesen).

Vielen Dank!

Antwort

4

Statt /usr/bin/emacs-snapshot direkt zu nennen, ein Skript schreiben, /usr/bin/emacs-snapshot im Hintergrund ruft und dann zurück:

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

Sie dann das Skript auf die gewöhnliche Weise nennen; Es wird einen Hintergrund-Emacs-Prozess starten und sofort zurückkehren.

Wenn Sie Lust bekommen möchten Sie /bin/bash und disown der Prozess nach dem esac (erhalten die pid mit $!) verwenden können.

+1

Warum der 'Fall'? Nur $ myscript $ @ "' funktioniert genauso wie 'meinscript', wenn $ # o ist. – dubiousjim

+1

@profjim: vielleicht in bash, aber nicht in älteren Versionen von '/ bin/sh'. Das 'Case' garantiert Portabilität. In älteren Versionen verhält sich "myscript" $ @ "als' myscript "" ', wenn' $ # '0 ist. Wenn du so alt bist wie ich bin, lernst du" Bug-for-Bug-Kompatibilität "beizubehalten. . –

+0

Gut zu wissen, danke! – dubiousjim

2

Während dies nicht die direkte Antwort auf Ihre Frage ist, ist dies der elegantere Weg, "emacs deamon zu starten oder sonst emacsclient zu starten". Erstellen Sie das folgende Alias: alias emacs=emacsclient -c -a "". Ab man emacsclient:

-a, --alternate-Editor = Editor ... Wenn der Wert des Editor ist die leere Zeichenkette, lief `Emacs --daemon‘ Emacs im Daemon-Modus zu starten, und versuche dich mit ihm zu verbinden.