Chciałbym wypróbować kosmiczne. Ale nie chcę jeszcze przełączać się z mojej zwykłej konfiguracji emacsa, więc chciałbym, aby konfiguracja, która jest obecnie w moim, .emacs.d
znajdowała się w jednym katalogu, a równoważna konfiguracja dla spacemaców była w innym katalogu. Nie mam nic przeciwko, jaką nazwę ma każdy katalog.
Czy to możliwe, brakuje chrootów / LD_PRELOAD / innych takich sztuczek? Jak mogę to zrobić?
spacemacs
wskazujące na plik wykonywalny emacsa i użyć wartości,(car command-line-args)
aby zdecydować, który plik init ma zostać uruchomiony. Zakłada się oczywiście, że korzystasz z systemu uniksowego innego niż OS X. (Sposób, w jaki pakiety aplikacji działają w systemie OS X, utrudnia tę sztuczkę.)Odpowiedzi:
Jedną z opcji jest określenie, którą konfigurację chcesz załadować do
~/.emacs
pliku. Kiedy Emacs uruchomi się, poszuka takiego pliku, zanim przejrzy~/.emacs.d/
. Aby uzyskać więcej informacji, możesz przeczytać o pliku początkowym w podręczniku Emacsa.Na przykład możesz utworzyć
~/.spacemacs.d
i zachować istniejącą wersję~/.emacs.d
taką, jaka jest. Następnie utwórz,~/.emacs
aby załadować dowolny, który masz ochotę użyć:Jeśli chcesz, możesz wymyślić sposoby przełączania konfiguracji bez modyfikowania pliku .emacs. Na przykład poproś, aby .emacs sprawdził zmienną środowiskową ustawioną w powłoce lub w skrypcie używanym do uruchamiania spacemac:
źródło
fboundp
) funkcji lub polecenia, które jest unikalne dla znaków spacji?(setq user-emacs-directory "~/.spacemacs.d/")
to zrobić praca (wprogn
gałęzi spacemacs twojej warunkowej). Czy możesz dodać to do swojej odpowiedzi, abym mógł ją ponownie zaakceptować?Ponieważ przy inicjowaniu jest coś więcej niż tylko ładowanie pliku, a z drugiej strony symlinkowanie
.emacs.d
lub zmianaHOME
zmian w moim środowisku wykonawczym, zdecydowałem się na wariant zaproponowany przez @glucas. Użyłem kodu zstartup.el
i dodałem łatkę z # 15539, aby użyć zmiennej środowiskowej do przełączania między różnymi katalogami init. Jeśli nie podano żadnej, używana jest wartość domyślna.Wystąpił jeden problem z spacemacs:
async
nie wie o zmienionym katalogu init, więc nie może znaleźć potrzebnych plików. Ale problem został ostatnio rozwiązany w metodzie spacemacs: Błąd podczas korzystania z katalogu konfiguracji innego niż .emacs.d · Problem # 3390Oto moje,
~/.emacs
które powinny zachowywać się jak oryginalny kod init, ale z konfigurowalnym katalogiem init:Jest też miły dodatek, który sprawia, że działa on jako demon bez dodatkowego wysiłku: nazwa-serwera zostanie ustawiona na nazwę katalogu init. Teraz możesz uruchomić drugiego demona emacs z waniliowymi znakami kosmicznymi
i nadal używamy emacsclient
Mój przypadek użycia jest bardzo prosty i jestem zdumiony, że jestem jedyny: mam zawsze działającego demona emacs i używam go z GUI i na konsoli (na przykład z ssh). W tym emacsie przygotowuję całą moją dokumentację i dziennik pracy, więc musi być tam cały czas. Ale potem chcę wypróbować kosmiczne lub jeden z innych pakietów dystrybucyjnych, a nawet je skonfigurować, dopóki nie mogę wycofać mojej obecnej konfiguracji lub skorzystać z niektórych sprytnych pomysłów. I podobnie jak inni, chciałem stworzyć prostą konfigurację podstawową dla moich współpracowników - i udokumentować ją w trybie org w uruchomionej instancji.
Ponieważ jedynym znanym mi problemem jest
async
to, że nie wie on o zmienionym katalogu init, myślę o najlepszym sposobie dodania konfiguracji,async
która zawiera zmienne, które powinny być wstrzykiwane domyślnie, aby nie było potrzeby łatania wszystkich inwokacjeasync-start
tak, jak zrobiły to kosmiczne maszyny.źródło
async
. :-( Ponieważ minęło kilka miesięcy od opublikowania, czy masz obejście?async-start
uruchamia emac bez niczego, a jeśli chcesz użyć jakiejś zmiennej, musisz ją przekazać. bądź miły i wygodny, jeśli asynchronię można skonfigurować z listą zmiennych, które będą używane przy każdym wywołaniuasync-start
.(setq custom-theme-directory user-emacs-directory)
tutaj.Wyjaśniono to tutaj i istnieje ciągły PR, aby dodać go do dokumentacji:
źródło
Odpowiedź została już zaakceptowana i zaakceptowana, ale jeśli masz ochotę wypróbować nowe sposoby robienia rzeczy w sposób odwracalny (poza konfiguracjami emacs), polecam spędzić pół godziny na zapoznaniu się z GNU Stow. To coś w rodzaju
ln -s
sterydów i może istnieć kilka podejść do jego użycia. Możesz mieć całą konfigurację w jednym podkatalogu (włączając konfiguracje offlineimap, emacs config itp.) - to podejście oparte na środowisku - lub mieć osobny podkatalog dla każdej aplikacji. Słodka schizofrenia.Np. Lista związana z emacsem z mojego ~ / Stow:
Jest jedna konfiguracja początkowa, którą udało mi się wykorzystać, jedna konfiguracja „Trzymam się przy ustawieniach domyślnych” i jedna „Zmienię własną”. Mogę tylko włączyć i wyłączyć każdy z nich i zawsze mieć je wszystkie dostępne. Każdy podkatalog może mieć całe drzewo względem mojego ~ / i bardzo przydatne jest mieszanie i dopasowywanie.
źródło
Sprawdziłem łatkę używaną przez @Uwe Koloska. Nie został uwzględniony w głównej gałęzi. W pewnym sensie zgadzam się, myślę, że problem powinien zostać rozwiązany poza emacsem za pomocą powłoki i pozostawienie emacsa nic o tym nie wiedząc.
Może ta funkcja byłaby bardziej logiczna z perspektywy użytkownika, użycie flagi byłoby mniej skomplikowane dla niektórych użytkowników.
W moim przypadku użytkowania chcę zachować instalację Emacsa i Spacemaców, więc moja odmiana dwóch powyższych rozwiązań działa w ten sposób.
Skrypt powłoki
Przede wszystkim skrypt do uruchamiania znaków kosmicznych:
Ten skrypt jest wywoływany
spacemacs
i jest instalowany w/usr/local/bin
folderze.plik .emacs
Następnie potrzebuję
.emacs
pliku w moim folderze domowym, który poprawnie traktowałby zmienną środowiskowąEMACS_USER_DIR
.W ogóle nie mam doświadczenia z elisp, więc wymyśliłem to, bardziej doświadczeni ludzie prawdopodobnie mogliby wymyślić coś lepszego. Ale hej, to działa.
Eye-Candy
Dlaczego więc nie dodać ikony:
źródło
exec emacs "$@"
.Uważam, że używanie Chemacs jest bardzo łatwe do przełączania między różnymi konfiguracjami emacs.
Odpowiedziałem tutaj: https://emacs.stackexchange.com/a/44678/11979 .
źródło