Jak otworzyć plik w istniejącym procesie emacsa z wiersza poleceń?

14

Mam kilka skryptów, które uruchomią wszystkie aplikacje i pliki związane z konkretnym projektem. Ale uruchomi wiele instancji emacs, zamiast po prostu spowodować, że obecne emacs otworzą żądane pliki. Wolę, aby obecny emacs po prostu otworzył pliki tekstowe projektu w nowym buforze.

Jakieś pomysły, jak to zrobić?

bev
źródło
Spójrz na moją odpowiedź stackoverflow.com/a/38655619/2450748 Chociaż 5 lat później :)
nexayq

Odpowiedzi:

21

M-x server-startw sesji Emacsa, a następnie użyj, emacsclient -n file1 file2 ...aby dodać pliki do istniejącego Emacsa. Istnieją dodatkowe opcje, których możesz chcieć użyć, np. -cAby otworzyć pliki w nowym oknie (ramce).

geekozaur
źródło
dzięki dood. Właśnie to muszę wiedzieć. Nie sprawdzam jeszcze „poprawnej odpowiedzi”, ponieważ słyszałem, że zawsze powinieneś pozostawić ją otwartą na chwilę, aby dać szansę innym. Ale już umieściłem twoją odpowiedź w niektórych skryptach.
Bev
Zwykle wolisz umieścić (server-start)plik .emacs zamiast ręcznie uruchamiać serwer. Używam, (and window-system (server-start))aby uniknąć uruchamiania serwera, jeśli uruchamiam emacsa w terminalu.
cjm
We współczesnym Emacsie jest równie przydatny w terminalu; zobacz -topcję.
geekozaur
@cjm - właściwie uruchamiam serwer w moim pliku .emacs. Ja po prostu nie korzystać z niego :-)
Bev
5

Umieść (server-start)w swoim .emacspliku.

Dodaj to do ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

następnie użyj myeditjako edytora. Będziesz musiał skorzystać z -copcji, aby wyświetlić okno.

Więc możesz to zrobić:

myedit -c a-file
run-script #that uses myedit

lub

run-script #that uses myedit
myedit -c
ctrl-alt-delor
źródło
Richard, dzięki za wkład. Nadal zastanawiam się nad kilkoma rzeczami w twoim skrypcie. Po pierwsze, ponieważ emacsclient nie ma opcji -c, zakładam, że jest to bash, ale nie wiem. Po drugie, dlaczego nie umieścić emacsa jako alternatywnego edytora? Dzięki
Bev
# $ emacsclient --help .... Akceptowane są następujące OPCJE: ... -c, --create-frame Utwórz nową ramkę zamiast próbować użyć bieżącej ramki Emacs ... -a EDYTOR, --alternat -editor = EDYTOR Edytor do awaryjnej, jeśli serwer nie jest uruchomiony Jeśli Edytor jest pusty ciąg znaków, start Emacs w trybie demona i spróbuj połączyć się ponownie
ctrl-alt-Delor
Nie musisz (a właściwie prawdopodobnie nie chcesz) używać parametrów pozycyjnych w definicji aliasu. Zastanów się, jak się alias foo='echo bar $*'rozwija set quux; foo baz. Jeśli chcesz użyć parametrów pozycyjnych, wypróbuj je jako funkcję powłoki:myedit() { emacsclient … "$@"; }
Chris Johnsen