Ich würde gerne Spacemacs ausprobieren. Ich möchte jedoch noch nicht von meiner regulären Emacs-Konfiguration wechseln, daher möchte ich, dass sich die aktuelle Konfiguration .emacs.d
in einem Verzeichnis und die entsprechende Konfiguration für Spacemacs in einem anderen Verzeichnis befindet. Es ist mir egal, welchen Namen eines der Verzeichnisse hat.
Ist das möglich, kurz vor chroots / LD_PRELOAD / anderen solchen Tricks? Wie kann ich es tun?
spacemacs
, der auf die ausführbare(car command-line-args)
Datei von emacs verweist, und anhand des Werts von entscheiden, welche Init-Datei ausgeführt werden soll. Dies setzt natürlichAntworten:
Eine Möglichkeit besteht darin, anzugeben, welche Konfiguration Sie in eine
~/.emacs
Datei laden möchten . Wenn Emacs gestartet wird, sucht es nach einer solchen Datei, bevor es sie ansieht~/.emacs.d/
. Weitere Informationen zur Init-Datei finden Sie im Emacs-Handbuch.So können Sie beispielsweise eine erstellen
~/.spacemacs.d
und Ihre vorhandene beibehalten,~/.emacs.d
wie sie ist. Dann erstellen Sie ein~/.emacs
, um das zu laden, was Sie verwenden möchten:Wenn Sie möchten, haben Sie die Möglichkeit, die Konfiguration zu ändern, ohne die .emacs-Datei zu ändern. Lassen Sie Ihren .emacs beispielsweise nach Umgebungsvariablen suchen, die Sie in Ihrer Shell oder in einem Skript festgelegt haben, mit dem Sie Spacemacs starten:
quelle
fboundp
) nach einer Funktion oder einem Befehl suchen, die / der für Spacemacs eindeutig ist?(setq user-emacs-directory "~/.spacemacs.d/")
für sie zu arbeite (in einemprogn
auf dem spacemacs ast deiner bedingung). Kannst du das zu deiner Antwort hinzufügen, damit ich sie wieder annehmen kann?Da es bei init mehr zu tun gibt, als nur eine Datei zu laden und andererseits meine Laufzeitumgebung zu verknüpfen
.emacs.d
oder zu ändernHOME
, habe ich mich für eine Variante von @glucas entschieden. Ich habe den Code von verwendetstartup.el
und den Patch von # 15539 hinzugefügt , um eine Umgebungsvariable zum Wechseln zwischen verschiedenen Init-Verzeichnissen zu verwenden. Wenn keine angegeben ist, wird die Standardeinstellung verwendet.Es gab ein Problem mit Spacemacs: Sie
async
wissen nichts über das geänderte Init-Verzeichnis und können daher einige erforderliche Dateien nicht finden. Aber dies wurde kürzlich in Spacemacs behoben: Fehler beim Verwenden eines anderen Konfigurationsverzeichnisses als .emacs.d · Problem # 3390Also hier ist meine
~/.emacs
, die sich wie der ursprüngliche Init-Code verhalten sollte, aber mit konfigurierbarem Init-Verzeichnis:Es gibt auch eine nette Ergänzung, mit der es ohne zusätzlichen Aufwand als Daemon funktioniert: Der Servername wird auf den Namen des Init-Verzeichnisses gesetzt. Jetzt können Sie einen zweiten Emacs-Daemon mit Vanille-Spacemacs starten
und benutze immer noch emacsclient
Mein Anwendungsfall ist sehr einfach und ich bin erstaunt, dass ich der einzige bin: Ich habe einen immer laufenden Emacs-Daemon und benutze ihn von der GUI und über die Konsole (zum Beispiel mit SSH). In diesem Emacs bereite ich alle meine Unterlagen und mein Arbeitsprotokoll vor, also muss es die ganze Zeit da sein. Aber dann möchte ich Spacemacs oder eines der anderen Distributionspakete ausprobieren und sogar konfigurieren, bis ich meine aktuelle Konfiguration zurückziehen oder einige der cleveren Ideen verwenden kann. Und wie andere wollte ich eine einfache Basiskonfiguration für meine Mitarbeiter erstellen - und in meiner laufenden Instanz mit org-mode dokumentieren.
Da das einzige mir bekannte Problem darin besteht,
async
dass es nichts über das geänderte Init-Verzeichnis weiß, überlege ich, wie man am besten eine Konfiguration mitasync
Variablen hinzufügt, die standardmäßig eingefügt werden sollten, damit nicht alle gepatcht werden müssen Beschwörungenasync-start
wie bei Spacemacs.quelle
async
. :-( Haben Sie eine Problemumgehung, seitdem Sie einige Monate nichts veröffentlicht haben?async-start
Emacs ohne irgendetwas gestartet wird und wenn Sie eine Variable verwenden möchten, müssen Sie sie übergeben Schön und praktisch, wenn async mit einer Liste von Variablen konfiguriert werden kann, die bei jedem Aufruf von verwendet werdenasync-start
.(setq custom-theme-directory user-emacs-directory)
hier hinzufügen .Es wird hier erklärt und es gibt eine laufende PR , um es der Dokumentation hinzuzufügen:
quelle
Es ist bereits beantwortet und akzeptiert, aber wenn Sie Lust haben, neue Wege zu gehen, um Dinge umzukehren (jenseits von emacs configs), empfehle ich Ihnen, eine halbe Stunde damit zu verbringen, sich mit GNU Stow vertraut zu machen. Es ist eine Art
ln -s
auf Steroiden, und es könnte verschiedene Ansätze geben, um es zu verwenden. Sie können das gesamte Setup in einem Unterverzeichnis (einschließlich Offlineimap-Konfigurationen, Emacs-Konfigurationen usw.) haben - das wäre ein auf der Umgebung basierender Ansatz - oder Sie haben ein separates Unterverzeichnis für jede Anwendung, die Sie haben. Süße Schizophrenie.ZB Emacs-bezogene Auflistung von meinem ~ / Stow:
Es gibt eine anfängliche Konfiguration, die ich brauchbar gemacht habe, eine "Ich bleibe bei den Standardeinstellungen" -Konfiguration und eine "Ich werde meine eigene rollen". Ich kann einfach jede dieser Funktionen ein- und ausschalten und habe immer alle zur Verfügung. Jedes Unterverzeichnis kann einen ganzen Baum relativ zu meinem ~ / haben, und es ist ziemlich praktisch zu mischen und abzugleichen.
quelle
Ich habe mir den Patch angesehen, den @Uwe Koloska verwendet hat. Es war nicht in der Hauptniederlassung enthalten. Ich stimme einigermaßen zu, ich denke, dass das Problem außerhalb von Emacs mit der Shell gelöst werden sollte und dass Emacs nichts davon wissen.
Vielleicht wäre diese Funktion aus Benutzersicht logischer, und die Verwendung eines Flags wäre für einige Benutzer weniger kompliziert.
In meinem Anwendungsfall möchte ich meine Emacs-Installation und Spacemacs beibehalten, damit meine Variation der beiden obigen Lösungen so funktioniert.
Shell-Skript
Zunächst das Skript zum Starten von Spacemacs:
Dieses Skript wird aufgerufen
spacemacs
und im/usr/local/bin
Ordner installiert ..emacs Datei
Dann brauche ich eine
.emacs
Datei in meinem Home-Ordner, die die Umgebungsvariable richtig behandeltEMACS_USER_DIR
.Ich habe überhaupt keine Erfahrung mit Elisp, also bin ich auf dieses Thema gekommen. Erfahrene Leute könnten sich wahrscheinlich etwas Besseres einfallen lassen. Aber hey, es funktioniert.
Blickfang
Dann fügen Sie doch ein Icon hinzu:
quelle
exec emacs "$@"
.Ich finde es sehr einfach , mit Chemacs zwischen verschiedenen emacs-Konfigurationen zu wechseln.
Ich habe hier eine Antwort gegeben: https://emacs.stackexchange.com/a/44678/11979 .
quelle