Jak uruchomić Emacsa z linii poleceń w OSX?

Jak uruchomić Emacsa z linii poleceń w OSX?

Pobrałem i zainstalowałem Emacsa z http://emacsformacosx.com/.

Przyjmę odpowiedź spełniającą wszystkie poniższe kryteria:

  1. okno Emacsa otwiera przed moim oknem terminala.
  2. wpisanie "emacs" uruchamia okno graficzne Emacsa. Znajdowanie plików w tym oknie domyślnie będzie wyglądać w katalogu, z którego uruchomiłem Emacsa.
  3. typowanie " emacs foo.txt " kiedy foo.txt exists uruchamia okno GUI Emacs z foo.txt załadowany.
  4. wpisując " emacs foo.txt " kiedy foo.txt does not exist uruchamia okno GUI Emacs z pustym buforem tekstowym o nazwie " foo.txt". Robienie ^X^S w tym buforze spowoduje zapisanie foo.txt w katalogu z którego uruchomiłem Emacsa.
Author: Johan Walles, 2012-04-16

11 answers

Wywołaj następujący skrypt "emacs" i umieść go gdzieś w swoim PATH:

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"

To obejmuje #2, # 3 i # 4.

Dla #1, Umieść to gdzieś w swoim .plik emacs:

(x-focus-frame nil)

The emacsformacosx.com strona ma teraz stronę z instrukcjami, skąd pochodzi górny fragment. Jest tam więcej informacji o uruchomieniu emacsclient i podpięciu Emacsa do git mergetool.

 105
Author: David Caldwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-29 09:28:05

W powłoce wpisz polecenie 'emacs', aby wskazać na aplikację OSX emacs

W mojej powłoce (uruchamiającej domyślny bash), mam następujące (w moim .bashrc)

alias emacs='open -a /Applications/Emacs.app $1'

Następnie wpisanie Emacsa w wierszu poleceń uruchamia aplikację emacs.

Polecam jednak otworzyć kopię Emacsa i po prostu go uruchomić. Jeśli tak jest i chcesz załadować plik do istniejącej kopii Emacsa, możesz użyć emacsclient, umieszczając w Twoje .bashrc:
alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'

Następnie dodaj następujące do swojego .plik emacs do uruchomienia serwera emacs (który odbiera wywołania emacsclient)

;;========================================
;; start the emacsserver that listens to emacsclient
(server-start)

Następnie możesz wpisać

ec .bashrc

Aby załadować kopię .bashrc do istniejącej sesji Emacsa!

 69
Author: Chris McMahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-25 14:21:08

To poprawia odpowiedź Davida Caldwella uruchamiając Emacsa w tle:

#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &

Jak stwierdzono w drugiej odpowiedzi, dotyczy to #2, # 3 i # 4. Dla #1, Umieść to gdzieś w swoim .plik emacs: (x-focus-frame nil).

Zauważ, że poniżej nie działa -- nie uruchamia Emacsa w katalogu podanym w wierszu poleceń (np. emacs .)

# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" &
 8
Author: David J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:01

Zakładam, że ty też:

  • Uruchom demona Emacsa po zalogowaniu
  • Have (server-start) in your .emacs
  • nie przeszkadza mi posiadanie wielu oddzielnych kopii Emacsa działających

Jeśli tak, to myślę, że spełnia to cztery podstawowe kryteria, plus jeszcze jedno:

  1. okno Emacsa otwiera się przed moim oknem terminala.

Będzie zawsze otwarty na pierwszy plan (z x-Focus-frame).

  1. typowanie " emacs" uruchamia okno GUI Emacs. Znajdowanie plików w tym oknie domyślnie będzie wyglądać w katalogu, z którego uruchomiłem Emacsa.

Otworzy istniejące okno Emacsa w trybie dired.

  1. wpisując " emacs foo.txt " kiedy foo.txt exists uruchamia okno GUI Emacs z foo.txt załadowany.

Jeśli emacs jest już uruchomiony i ma serwer, to otworzy się w istniejącym oknie i wyjdzie na pierwszy plan.

  1. wpisując " emacs foo.txt " kiedy foo.txt does not exist uruchamia okno GUI Emacs z pustym buforem tekstowym o nazwie " foo.txt". Robienie ^X^S w tym buforze spowoduje zapisanie foo.txt w katalogu z którego uruchomiłem Emacsa.

Zgadza się.

Jeden dodatkowy:

Kontrola powraca do sesji terminala natychmiast po wpisaniu polecenia.

~/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
Author: The Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-25 13:13:03

Na Mountain Lion, używam portu Yamamoto Mitsuharu https://github.com/railwaycat/emacs-mac-port o następującym pseudonimie:

alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs
I spełnia wszystkie Twoje kryteria.
 4
Author: mforbes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-05 03:41:39

Dalsze ulepszanie odpowiedzi Davida Jamesa działa dla mnie następująco:

Zgodnie z instrukcją otwarcia pliku z terminala znalezionego w http://www.emacswiki.org/emacs/EmacsForMacOS#toc20

open -a /Applications/Emacs.app <file-name>

Łącząc to z odpowiedzią Davida Jame ' a stworzyłem następujący EMAX skrypt bash i umieściłem go w mojej ścieżce na ~ / bin

#!/bin/bash
(open -a /Applications/Emacs.app "$@") &

Zastrzeżenie: aby emacs mógł otworzyć bieżący katalog w trybie Dired by name, należy potrzeba użycia

emax .

Środowisko:

  • OS X w wersji 10.10.2
  • GNU Emacs 24.4.2 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14) z dnia 2014-11-13
 4
Author: sbecker11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 00:38:24

Właśnie zbudowałem Emacsa z homebrew package manager zgodnie z tym przewodnikiem: http://www.emacswiki.org/emacs/EmacsForMacOS z instalacją naparu -- cocoa emacs Po tym należy uruchomić .wersja aplikacji, aby uzyskać gui, który w moim przypadku był / usr / local/Cellar / emacs/24.3 / Emacs.app / Contents / MacOS / Emacs

 3
Author: Yuriy Skvortsov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 13:58:50

Inne odpowiedzi nie do końca mi odpowiadały. W szczególności, na moim komputerze, skrypt bash

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" 

Zawsze otwiera emacs w katalogu domowym. Aby otworzyć go w bieżącym katalogu roboczym, musiałem wykonać

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
Zamiast tego.
 1
Author: jackkamm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 16:13:33

Skompiluj Emacsa zgodnie z następującymi krokami:

./configure --with-x --prefix=/usr
make
sudo make install
I gotowe! Może pomóc pobrać i zainstalować XQuartz, ale to tylko moje zdanie.
 0
Author: rake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-20 17:21:54

To jest mój skrypt dla open emacs/emacsclient na 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 "$@"
# open emacs.app instead.
else
    `$EMACS "$@"` &
fi
 0
Author: Koren.H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-04 03:34:55

Proste rozwiązanie...

Zamieszczono tutaj wiele bardzo złożonych rozwiązań tego problemu. To sprawiedliwe, bo wydaje się nie trywialne.

Jednak To rozwiązanie działa naprawdę dobrze dla mnie.

ec() {
  emacsclient -n $@ 2> /dev/null
  if [[ $? == 1 ]]; then
    open -a Emacs.app  -- $@
  fi
}

Użycie

ec file [...]

Rozpakujmy to co się dzieje:

  1. przekaż wszystkie argumenty ec do emacsclient i nie czekaj (-n) na Emacsa przed kontynuowaniem.
    1. Jeśli Emacs już działa, to koniec, a Ty edycja.
  2. przełknij komunikat o błędzie wysłany przez emacsclient, gdy nie działa emacs. (2> /dev/null)
  3. ręcznie obsłuż kod wyjścia 1 ([[ $? == 1 ]])
    1. otwórz Emacs.aplikacji i przekazuje do niej argumenty pliku (Ścieżki zostaną poprawnie otwarte.)
    2. jesteś skończony, a Emacs otworzył Twoje pliki.
 0
Author: ocodo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 08:10:39