2013-10-10 19 views
5

Ich habe vor kurzem auf die Verwendung von Emacs 'Paketmanager packages umgeschaltet.In Emacs, die Info-Verzeichnis-Liste beim Einschließen von Paketen setzt?

Seitdem werden einige Emacs-Pfadvariablen über das hinaus gesetzt, was ich in meiner .emacs Datei mache: Sowohl load-path als auch Info-directory-list werden mit Sachen aus den Paketen geliefert. Aber ich verstehe nicht wo diese Anpassungen vorgenommen werden.

Lassen Sie sich auf Info-directory-list konzentrieren: In meiner .emacs Datei nil Ich stelle es nicht so ist es (so sein soll, dass später, wenn info starten, seinen von Info-default-directory-list initialisiert jedoch mit meiner neuen Verpackung ist es bereits intialised und einige Pakete. Verzeichnisse hinzugefügt Diese vermasseln meine dir Struktur in info ich habe die Autoload-Dateien überprüft, aber sie setzen nicht Info-directory-list in irgendeiner Weise -... und keine andere elisp Datei in den Paketen (pandoc-mode insbesondere) tut so

Wo wird die Variable Info-directory-list gesetzt und wie kann ich die Kontrolle über die Reihenfolge in dieser Variablen zurückgewinnen?

Antwort

3

Nach der Auswertung Ihrer Init-Datei ruft Emacs package-initialize (was tut, was es klingt). Nachdem die Pakete Initialisierung Emacs after-init-hook läuft, also wenn Sie Variablen manipulieren wollen, die während der Paket Initialisierung geändert wurden, können Sie die folgenden in Ihrer init-Datei setzen können:

(add-hook 'after-init-hook 'my-after-init-hook) 
(defun my-after-init-hook() 
    "After package initialisation." 
    ;; do something with Info-directory-list 
) 

Sie auch package-initialize selbst anrufen können, vorausgesetzt, dass Sie stellen sicher, dass alle erforderlichen paketbezogenen Variablen im Voraus festgelegt werden. Details finden Sie unter Emacs 24 Package System Initialization Problems.

Was, wie und warum Info-directory-list geändert wird, werden die manuellen Kommentare zu diesem Aspekt in (elisp) Multi-file Packages:

Ein Multi-Datei-Paket ist weniger bequem zu schaffen als ein Single-File Paket, aber es bietet Weitere Funktionen: Es kann mehrere Emacs Lisp-Dateien, ein Info-Handbuch und andere Dateitypen (z. B. Bilder) enthalten.

[...]

Wenn der Inhalt Verzeichnis eine Datei namens dir enthält, ist dies angenommen eine Info Verzeichnisdatei mit install-info gemacht sein. * Hinweis Aufruf von install-info: (texinfo) Aufruf von install-info. Die entsprechenden Info-Dateien sollten auch im Content-Verzeichnis vorhanden sein. In diesem Fall wird Emacs das Inhaltsverzeichnis automatisch zu Info-directory-list hinzufügen, wenn das Paket aktiviert ist.

Insbesondere tut package-activate-1 dies:

(when (file-exists-p (expand-file-name "dir" pkg-dir)) 
     ;; FIXME: not the friendliest, but simple. 
     (require 'info) 
     (info-initialize) 
     (push pkg-dir Info-directory-list)) 
+0

ps: ich vermutet hatte 'Paket-initialize' der Täter zu sein, so bemerkte ich es in meiner .emacs-Datei, aber ich wusste nicht, dass emacs es auf jeden fall nennt ... – halloleo

+0

@halloleo @phils Irgendwelche Idee, warum 'Info-Verzeichnis-Liste' viele Einträge des gleichen Pakets enthält? Z.B. Ich habe 8 Einträge für '.emacs.d/elpa/magit-20150608.1139'. – user3156459