it-swarm.com.de

Wie kann ich GUI Emacs in OSX von der Kommandozeile aus starten?

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:

  1. Das Fenster emacs öffnet vor mein Terminalfenster.
  2. Wenn Sie "emacs" eingeben, wird ein GUI-Emacs-Fenster gestartet. Wenn Sie Dateien in diesem Fenster suchen, wird standardmäßig in dem Verzeichnis gesucht, von dem aus ich Emacs gestartet habe.
  3. Wenn Sie "emacs foo.txt" eingeben, wenn foo.txt vorhanden ist, wird ein GUI-Emacs-Fenster mit geladener foo.txt gestartet.
  4. 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.
81
Johan Walles

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.

107
David Caldwell

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!

69
Chris McMahan

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]" &
8
David J.

Ich gehe davon aus, dass Sie entweder

  • Starten Sie den Emacs-Daemon beim Anmelden
  • Habe (Server-Start) in deinen .emacs
  • Es macht nichts aus, viele separate Kopien von Emacs laufen zu lassen

Wenn ja, dann denke ich, dass dies die ursprünglichen vier Kriterien erfüllt, und noch eins:

  1. Das emacs-Fenster wird vor meinem Terminalfenster geöffnet.

es öffnet sich immer zum Vordergrund (mit x-Fokus-Frame).

  1. 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.

  1. 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.

  1. 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
5
The Dave

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:

  • OS X Yosemite Version 10.10.2
  • GNU Emacs 24.4.2 (x86_64-Apple-darwin14.0.0, NS Apple-appkit-1343.14) .__ von 2014-11-13
4
sbecker11

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.

4
mforbes

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

3
Yuriy Skvortsov

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.

1
jackkamm

Einfache Lösung ...

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
}

Verwendungszweck

ec file [...]

Lassen Sie uns auspacken, was passiert:

  1. Übergeben Sie alle ec-Argumente an emacsclient, und warten Sie nicht (-n) auf emacs, bevor Sie fortfahren .
    1. Wenn Emacs bereits läuft, sind wir fertig und bearbeiten gerade.
  2. schlucken Sie die Fehlermeldung von emacsclient ein, wenn keine Emacs ausgeführt werden. (2> /dev/null)
  3. Behandeln Sie den Exit-Code 1 ([[ $? == 1 ]]) .__ manuell.
    1. Öffnen Sie Emacs.app und übergeben Sie die Argumente der Datei (die Pfade werden korrekt geöffnet.)
    2. Sie sind fertig und Emacs hat Ihre Dateien geöffnet.
1
ocodo

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.

0
rake

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
0
Koren.H