Niedawno kupiłem pierwszego Maca od dekady i właśnie go konfiguruję. Jestem użytkownikiem Emacsa i zdecydowałem, że chcę tylko zwykłego Emacsa, a nie Aquamaca, aby móc korzystać z mojej istniejącej konfiguracji z innych systemów operacyjnych. Próbowałem śledzić wiele poradników, które znalazłem w Internecie (takich jak ten , ten i ten ze strony, z której pobrałem Emacsa ) i próbowałem łączyć te elementy na wiele sposobów, ale nigdy wprowadziłem rzeczy w stan zbliżający się do tego, do czego jestem przyzwyczajony / mam nadzieję:
- Demon Emacsa zaczyna działać albo przy starcie, albo tak szybko, jak go potrzebuję ; albo jedno jest w porządku. Wszelkie nowe ramki Emacsa są wspierane przez ten sam serwer.
- Kiedy otwieram plik tekstowy z Findera, plik otwiera się w Emacsie, jeśli to możliwe, w istniejącej ramce graficznej.
- Jeśli uruchomię Emacs.app, system ponownie użyje demona emacs działającego w tle zamiast uruchamiać nowe wystąpienie i otwierać w nim nowe okno. ( czapka )
- Kiedy uruchamiam Emacsa z terminala, terminal wykonuje swoją działalność bez czekania, aż skończę z Emacsem (chyba że użyję „-nw”)
- AFAIK w żadnym momencie podczas operacji opisanych powyżej Emacs nie powinien skończyć w stanie („tryb edycji serwera?”), W którym czeka na mnie napisanie
C-x #
, chociaż nie mam głębokiego zrozumienia tego. - (Uznałbym to za bonus) Jest jakiś sposób na wywołanie Emacsa z terminala, aby Emacs ponownie wykorzystał istniejącą ramkę, jeśli to możliwe.
Jak skonfigurować Emacsa, aby zachowywał się w ten sposób?
Jestem szczególnie zakłopotany tym, że Finder otwierał rzeczy w Emacsie w taki sposób, w jaki chcę (# 2), ponieważ znalezione przewodniki generalnie tworzą wiele aliasów, skryptów Apple, skryptów bash itp. I nie jestem pewien którego chcę powiedzieć Finderowi, aby otwierał pliki tekstowe.
Dzięki!
A. @lawlist pyta: „Czy nowa ramka jest domyślnie otwierana po otwarciu nowego pliku z terminala, nawet jeśli istnieje już ramka?” Odpowiedź jest taka, że jeśli uruchomię serwer podczas uruchamiania zgodnie z opisem tutaj , otworzę ramkę, a następnie otworzę plik, wpisując /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>
, mogę otworzyć plik w istniejącej ramce. Jeśli aktualnie nie ma otwartej ramki, muszę użyć „-nc” lub gdy próbuję otworzyć plik, nic się nie dzieje.
B. @lawlist pyta: „Czy chcesz, aby demon działał podczas logowania, czy wystarczy ładowanie Emacsa ręcznie po zalogowaniu?” Uruchamianie ręczne byłoby w porządku.
M-x server-start
ręcznie uruchomi serwer, abyemacsclient
mógł się z nim komunikować. Umieściłem(server-start)
w swoiminit.el
pliku zamiast używania demona przy logowaniu - jednak wiele osób woli opcję logowania demona. Oczywiście.emacs
plik byłby odpowiednim miejscem dla(server-start)
.ns-find-file
- który jest aktywowany automatycznie, gdy plik jest powiązany z Emacs.app. Moja funkcja pliku przechwytującego w powyższych linkach również modyfikuje,ns-find-file
czy to Cię interesuje. Oczywiście potrzebujesz zbudowanego Emacsa--with-ns
.Odpowiedzi:
Aby Emacs.app otwierał pliki w istniejącej ramce zamiast w nowej ramce, dodaj
(setq ns-pop-up-frames nil)
do pliku konfiguracyjnego, takiego jak~/.emacs
.Możesz otworzyć plik z terminala za pomocą
open -a emacs file
lubemacsclient -n file
. Jeśli Emacs.app nie jest otwarty, ale istniejeEmacs --daemon
proces, z jakiegoś powoduemacsclient -n file
nie działa, aleemacsclient -nc file
działa.Upewnij się, że używasz
emacsclient
pliku binarnego dołączonego do wersji Emacsa, której używasz, np./Applications/Emacs.app/Contents/MacOS/bin/emacsclient
Lub/usr/local/bin/emacsclient
jeśli zainstalowałeś Emacsa z Homebrew.Aby uruchomić serwer Emacsa przy logowaniu, na przykład zapisz tę listę jako
~/Library/LaunchAgents/my.emacsdaemon.plist
:List jest ładowany automatycznie przy następnym logowaniu, ale można go załadować natychmiast po uruchomieniu
launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.Edycja: Nadal nie wiem, dlaczego ludzie kojarzą typy plików z aplikacją AppleScript zamiast tylko Emacs.app. Skrypt w odpowiedzi kuzzooroo można również napisać jako skrypt powłoki:
Za pomocą Dziobaka możesz zapisać skrypt jako aplikację:
Właśnie zacząłem używać Emacsa, ale mam zupełnie inną konfigurację. Zrobiłem własną aplikację Emacs, wykonując kopię iTerm.app, zmieniając CFBundleIdentifier w Info.plist, tak aby aplikacja używała innego pliku preferencji, i ustawiając domyślne polecenie na
/usr/local/bin/emacs
. Dodałem(server-start)
do~/.emacs
i otworzyć niestandardową aplikację Emacs przy logowaniu. Użyłem Platypus do stworzenia działającej aplikacjiemacsclient -n "$@";open -b my.emacs
i ustawiłem ją jako domyślną aplikację do plików tekstowych.źródło
Rozwiązanie Lauriego w połączeniu z sugestiami z komentarzy w dużej mierze rozwiązało moje problemy. Wkleiłem poniżej część Applescript, którą zszyłem z rzeczy znalezionych w Internecie. Skrypt pomaga wygładzić pozostałe zmarszczki, np. Jego zachowanie jest nieco lepsze, jeśli nie ma bieżącej ramki Emacsa.
EDYCJA: celem skryptu jest skojarzenie z plikami .txt w Finderze.
źródło