Wie kann ich ein Paket auf die schwarze Liste setzen?

8

Ich benutze company-modefür Vervollständigungszwecke. Aber irgendwie zieht sich auch immer ein Paket zusammen auto-complete, das kollidiert company-mode, da beide ein Popup mit Abschlusskandidaten anbieten. Ich möchte auf die schwarze Liste setzen auto-complete, da ich es nicht brauche. Wie kann ich das machen? Ich weiß, dass es eine Variable gibt package-pinned-package, aber ich kann nicht sehen, wie ein Paket auf die schwarze Liste gesetzt wird - möglicherweise mithilfe eines ungültigen Archivs?

Arne
quelle
1
Beachten Sie, dass es an sich keine Kollision gibt. Um autocomplete-modeein Problem zu sein, muss es zuerst aktiviert werden. Gleiches gilt für company-mode.
Wasamasa
Aus irgendeinem Grund wird es aktiviert, ohne dass ich Anpassungen vornehmen muss.
Arne
Wenn es eine Anforderung eines anderen Pakets ist, muss es installiert werden, aber es sollte möglich sein, dass autocompletees in keinem Puffer aktiv ist, in dem company-modees aktiv ist. Möglicherweise müssen Sie autocompleteden *mode-hookbetroffenen Hauptmodus manuell deaktivieren ?
Mark Aufflick
1
Ich schlage vor, dass Sie herausfinden, was funktioniert. Entweder Sie (und etwas in Ihrer Init-Datei, eine Möglichkeit, die seit der Annahme von Starter-Kits viel wahrscheinlicher geworden ist) oder ein anderes Paket (was ein Fehler ist). Sowohl die Halbierung als auch die Suche ~/.emacs.dnach etwas in der Art von (auto-complete-mode)würde funktionieren.
Wasamasa
1
Pakete sollten den automatischen Vervollständigungsmodus im Allgemeinen nicht für Sie aktivieren (außer unter bestimmten Umständen). Wenn Sie zu 100% sicher sind, dass Sie es nicht selbst aktivieren, sollten Sie in diesem Paket ein Problem melden, das dies meldet.
Malabarba

Antworten:

7

Ich weiß nicht, wie ich die Installation eines Pakets auf die schwarze Liste setzen soll. Es ist jedoch leicht zu verhindern, dass es geladen wird . Wenn Sie (provide 'auto-complete)Ihre Init-Datei einfügen, wird jedem Paket, das versucht zu laden auto-complete, mitgeteilt, dass es bereits geladen ist.

(Genauer gesagt, dies kümmert sich um Bibliotheken, auto-completedie auf normale Weise mit geladen werden require. Wenn es einen Code gibt, der loaddirekt verwendet wird (was ungewöhnlich wäre), müssen Sie dies in eine separate Datei mit dem Namenauto-complete.el .)

Wenn das Paket dies erfordert auto-complete, liegt es wahrscheinlich daran, dass es verwendet wird. Aber vielleicht deklariert ein Paket nur Quellen für die automatische Vervollständigung und verfügt ansonsten über nützliche Funktionen. So können Sie den Teil machen, dass Sie kein No-Op wollen. Je nachdem, was das Paket tut, benötigen Sie möglicherweise andere ähnliche Definitionen.

(provide 'auto-complete)
(defmacro ac-define-source (&rest ignored)
  "A no-op since I blacklist `auto-complete'.")
Gilles 'SO - hör auf böse zu sein'
quelle
7

Was @ Gilles schrieb, ist die allgemeine Antwort, die ich auch gegeben hätte.

Aber beachten Sie, dass die Verwendung providenicht nicht verhindern Code aus dem Paket zu laden. Es verhindert, dass Code das Paket nur von lädt require. Wenn Code usw. verwendet load, load-libraryhat load-filedieser Trick keine Auswirkung.

Wenn Sie wirklich verhindern müssen, dass Code eine bestimmte Bibliothek lädt, ist es besser, eine Proxy-Bibliothek bereitzustellen, die stattdessen geladen wird. Fügen Sie beispielsweise in einem Verzeichnis, das früher in Ihrem Verzeichnis vorhanden ist, load-patheine Fälschung hinzu auto-complete.el, die nichts anderes tut als (provide 'auto-complete).

Auf diese Weise wird immer dann, wenn Code versucht, die Bibliothek mit zu laden, loadoder load-libraryIhre Proxy-Bibliothek anstelle der von Ihnen vermiedenen geladen.

Wenn der Code jedoch load-filedie absolute Adresse der Datei der Bibliothek verwendet und bereitstellt, die Sie vermeiden möchten, wird diese Datei geladen. Ich sehe keine gute Lösung für diesen Fall (außer um diese Datei zu entfernen oder zu ersetzen).

Drew
quelle