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:
- okno Emacsa otwiera przed moim oknem terminala.
- 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.
- typowanie " emacs foo.txt " kiedy foo.txt exists uruchamia okno GUI Emacs z foo.txt załadowany.
- 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.
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
.
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!
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 "$@" &
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:
- okno Emacsa otwiera się przed moim oknem terminala.
Będzie zawsze otwarty na pierwszy plan (z x-Focus-frame).
- 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.
- 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.
- 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
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.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
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
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.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.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
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:
- przekaż wszystkie argumenty
ec
do emacsclient i nie czekaj (-n
) na Emacsa przed kontynuowaniem.- Jeśli Emacs już działa, to koniec, a Ty edycja.
- przełknij komunikat o błędzie wysłany przez emacsclient, gdy nie działa emacs. (
2> /dev/null
) - ręcznie obsłuż kod wyjścia
1
([[ $? == 1 ]]
)- otwórz Emacs.aplikacji i przekazuje do niej argumenty pliku (Ścieżki zostaną poprawnie otwarte.)
- jesteś skończony, a Emacs otworzył Twoje pliki.
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