Relative Pfade in der Init-Datei

7

Ist es beim Laden von Themen wie Themen aus benutzerdefinierten Verzeichnissen möglich, einen Pfad relativ zur Datei init.el anstelle eines absoluten Pfads anzugeben?

Ich frage, weil ich in der Lage sein möchte, dieselbe Konfigurationsdatei auf meinen OSX- und Windows-Computern zu verwenden, wobei ein absoluter Pfad wie ~ / .emacs.d / theme auf jedem Computer etwas anderes bedeutet (ich bin mir nicht einmal sicher, wie Windows damit umgeht ~)

Simon
quelle
1
MS Windows geht ~/genauso vor: Wie Ihr Ausgangsverzeichnis der Wert der Umgebungsvariablen HOME.
Drew
@ Draw Ich habe gerade versucht, cd ~/in cmd, aber der Pfad konnte nicht gefunden werden, obwohl die HOME-Variable richtig eingestellt war ...
Simon
Normalerweise cdreicht es aus, in Ihr Home-Verzeichnis zu wechseln. Außerdem ist es besser, Powershell zu verwenden. Cmd ist definitiv veraltet.
Nsukami _
Hast du mit emacs -Qangefangen? Haben Sie Umgebungsvariable definiert HOME? Haben Sie tun M-x cd RET ~/ RET? Funktioniert bei mir.
Drew
1
Die Windows-Shell cmd.exe versteht ~ nicht, Emacs unter Windows wird dies jedoch verarbeiten. @Nsukami_: cd (an einer cmd-Eingabeaufforderung) druckt das aktuelle Verzeichnis und wechselt nicht in Ihr Ausgangsverzeichnis.
Glucas

Antworten:

10

Sie können ~ / in Ihrer Init-Datei verwenden und es funktioniert gut unter Windows. Ich definiere immer eine HOME-Umgebungsvariable und lege meine .emacs.d dort ab, aber es gibt andere Ansätze. In den FAQ finden Sie Einzelheiten dazu, wie Emacs entscheidet, was für zu Hause verwendet werden soll.

Sie können mit der user-emacs-directoryVariablen auch Pfade erstellen , wenn Sie Folgendes bevorzugen:

 (expand-file-name "foo.el" user-emacs-directory)

was in meinem Fall mit nur austauschbar wäre "~/.emacs.d/foo.el".

.

Glucas
quelle
Wenn Speicher zur Verfügung steht, können Sie auch MS Windows-Umgebungsvariablen im Dateinamen verwenden (sie werden erweitert). Sie müssen jedoch die UNIX-Syntax verwenden (dh $PROGRAMFILESanstelle von %PROGRAMFILES%, aber ich kann dies derzeit nicht überprüfen).
wvxvw
1
Sie können stattdessen auch locate-user-init-file verwenden.
0

load-relative wurde geschrieben, um so etwas zu tun. Ihr Zweck war es, eine relative Verknüpfung innerhalb eines Pakets durchzuführen, aber ich glaube, dass es auch hier verwendet werden kann.

felsig
quelle