Wie starte ich GUI Emacs von der Befehlszeile in OSX aus?
Ich habe Emacs von http://emacsformacosx.com/ heruntergeladen und installiert.
Ich akzeptiere eine Antwort, die alle folgenden Kriterien erfüllt:
Rufen Sie das folgende Skript "emacs" auf und legen Sie es irgendwo in Ihre PATH
:
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]"
Dies umfasst # 2, # 3 und # 4.
Fügen Sie für # 1 dies irgendwo in Ihre .emacs-Datei ein:
(x-focus-frame nil)
Die emacsformacosx.com Site hat jetzt eine How-To-Seite , von der der Top-Snippet stammt. Dort gibt es weitere Informationen zum Ausführen von emacsclient
und zum Einbinden von Emacs bis zu git mergetool
.
Geben Sie in Ihrer Shell den Befehl 'emacs' an, um auf die OSX-Anwendung emacs zu verweisen
In meiner Shell (die Standard-Bash läuft) habe ich Folgendes (in meiner .bashrc)
alias emacs='open -a /Applications/Emacs.app $1'
Wenn Sie in der Befehlszeile emacs eingeben, wird die Anwendung emacs gestartet.
Ich würde jedoch empfehlen, dass Sie eine Kopie von emacs öffnen und einfach weiterarbeiten. Wenn dies der Fall ist und Sie eine Datei in eine vorhandene Kopie von emacs laden möchten, können Sie den emacsclient verwenden, indem Sie Folgendes in Ihre .bashrc einfügen:
alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'
Fügen Sie dann der .emacs-Datei Folgendes hinzu, um den emacs-Server (der die emacsclient-Aufrufe empfängt) zu starten.
;;========================================
;; start the emacsserver that listens to emacsclient
(server-start)
Dann kannst du tippen
ec .bashrc
eine Kopie von .bashrc in eine bestehende Emacs-Sitzung laden!
Dies verbessert die David Caldwells Antwort , indem Emacs im Hintergrund gestartet wird:
#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]") &
Wie in der anderen Antwort erwähnt, umfasst dies # 2, # 3 und # 4. Fügen Sie für # 1 dies irgendwo in Ihre .emacs-Datei ein: (x-focus-frame nil)
.
Beachten Sie, dass not für mich nicht funktioniert - Emacs wird nicht in einem Verzeichnis gestartet, das in der Befehlszeile angegeben ist (z. B. emacs .
).
# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]" &
Ich gehe davon aus, dass Sie entweder
Wenn ja, dann denke ich, dass dies die ursprünglichen vier Kriterien erfüllt, und noch eins:
- Das emacs-Fenster wird vor meinem Terminalfenster geöffnet.
es öffnet sich immer zum Vordergrund (mit x-Fokus-Frame).
- Wenn Sie "emacs" eingeben, wird ein GUI-Emacs-Fenster gestartet. Beim Suchen von Dateien in diesem Fenster wird standardmäßig in dem Verzeichnis gesucht, von dem aus ich Emacs gestartet habe.
Ein vorhandenes Emacs-Fenster wird im Dired-Modus geöffnet.
- Wenn Sie "emacs foo.txt" eingeben, wenn foo.txt vorhanden ist, wird ein GUI-Emacs-Fenster mit geladener foo.txt gestartet.
Wenn emacs bereits läuft und über einen Server verfügt, wird dieser im vorhandenen Fenster geöffnet und erscheint in den Vordergrund.
- Wenn Sie "emacs foo.txt" eingeben, wenn foo.txt nicht vorhanden ist, wird ein GUI-Emacs-Fenster mit einem leeren Textpuffer mit dem Namen "foo.txt" gestartet. Wenn Sie ^ X ^ S in diesem Puffer verwenden, wird foo.txt in dem Verzeichnis gespeichert, in dem Emacs gestartet wurde.
Richtig.
Ein Extra:
Die Steuerung kehrt sofort nach der Eingabe des Befehls zur Terminalsitzung zurück.
~/bin/emacs
#!/bin/bash
EMACSPATH=/Applications/Emacs.app/Contents/MacOS
# Check if an emacs server is available
# (by checking to see if it will evaluate a LISP statement)
if ! (${EMACSPATH}/bin/emacsclient --eval "t" 2> /dev/null > /dev/null )
then
# There is no server available so,
# Start Emacs.app detached from the terminal
# and change Emac's directory to PWD
Nohup ${EMACSPATH}/Emacs --chdir "${PWD}" "${@}" 2>&1 > /dev/null &
else
# The emacs server is available so use emacsclient
if [ -z "${@}" ]
then
# There are no arguments, so
# tell emacs to open a new window
${EMACSPATH}/bin/emacsclient --eval "(list-directory \"${PWD}\")"
else
# There are arguments, so
# tell emacs to open them
${EMACSPATH}/bin/emacsclient --no-wait "${@}"
fi
# Bring emacs to the foreground
${EMACSPATH}/bin/emacsclient --eval "(x-focus-frame nil)"
fi
Die Antwort von David James wurde weiter verbessert, was für mich funktioniert:
Anweisungen zum Öffnen einer Datei von einem Terminal aus, das unter http://www.emacswiki.org/emacs/EmacsForMacOS#toc20 gefunden wird
open -a /Applications/Emacs.app <file-name>
kombination mit David James Antwort Ich habe das folgende emax bash-Skript erstellt und in meinem Pfad unter ~/bin abgelegt.
#!/bin/bash
(open -a /Applications/Emacs.app "[email protected]") &
Caveat: Damit Emacs das aktuelle Verzeichnis im Modus Dired by name öffnen kann, müssen Sie verwenden
emax .
Umgebung:
Auf Mountain Lion nutze ich Yamamoto Mitsuharus Port https://github.com/railwaycat/emacs-mac-port mit dem folgenden Alias:
alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs
und es erfüllt alle Ihre Kriterien.
Soeben wurde Emacs mit dem Homebrew-Paketmanager gemäß dieser Anleitung erstellt: http://www.emacswiki.org/emacs/EmacsForMacOS Mit brew install --cocoa emacs Danach sollte man starten die .app-Version, um gui zu erhalten, die in meinem Fall /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs war
Die anderen Antworten haben für mich nicht ganz funktioniert. Insbesondere auf meinem Rechner das Bash-Skript
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "[email protected]"
öffnet emacs immer im Home-Verzeichnis. Um es im aktuellen Arbeitsverzeichnis öffnen zu können, musste ich es tun
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/[email protected]"
stattdessen.
Viele sehr komplexe Lösungen für dieses Problem werden hier veröffentlicht. Das ist fair, weil es nicht trivial erscheint.
Diese Lösung funktioniert jedoch sehr gut für mich.
ec() {
emacsclient -n [email protected] 2> /dev/null
if [[ $? == 1 ]]; then
open -a Emacs.app -- [email protected]
fi
}
ec file [...]
ec
-Argumente an emacsclient, und warten Sie nicht (-n
) auf emacs, bevor Sie fortfahren .2> /dev/null
)1
([[ $? == 1 ]]
) .__ manuell.Kompiliere Emacs nach folgenden Schritten:
./configure --with-x --prefix=/usr
make
Sudo make install
Und du bist fertig! Es kann hilfreich sein, XQuartz herunterzuladen und zu installieren, aber das ist nur meine Meinung.
Dies ist mein Skript für open emacs/emacsclient unter osx.
#!/bin/bash
# Ensure (server-start) is added in your emacs init script.
EMACS=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs
EMACSCLIENT=/Applications/Macports/Emacs.app/\
Contents/MacOS/bin/emacsclient
# test if client already exsit.
$EMACSCLIENT -e "(frames-on-display-list)" &>/dev/null
# use emacsclient to connect existing server.
if [ $? -eq 0 ]; then
$EMACSCLIENT -n "[email protected]"
# open emacs.app instead.
else
`$EMACS "[email protected]"` &
fi