Come inserire nella lista nera un pacchetto?


8

Sto usando company-modeper scopi di completamento. Ma in qualche modo, anche alcuni pacchetti attirano sempre auto-complete, che si scontrano company-mode, poiché entrambi offrono un popup con i candidati di completamento. Voglio una lista nera auto-complete, dal momento che non ne ho bisogno. Come lo posso fare? So che esiste una variabile package-pinned-package, ma non riesco a vedere come inserire nella blacklist un pacchetto, magari utilizzando un archivio non valido?


1
Si noti che non vi è alcuna collisione in sé. Per autocomplete-modeessere un problema, deve essere prima abilitato, lo stesso vale per company-mode.
Wasamasa,

Per qualche motivo, viene abilitato senza che io faccia alcuna personalizzazione.
Arne,

Se è un requisito di un altro pacchetto, deve essere installato, ma dovrebbe essere possibile non autocompleteessere attivo in nessun buffer dove company-modeè attivo. Forse è necessario disabilitare manualmente autocompletein *mode-hookdelle maggiori modalità colpite?
Mark Aufflick,

1
Ti consiglio di scoprire cosa fa. O sei tu (e qualcosa nel tuo file init, una possibilità che è diventata molto più probabile dall'accettazione degli starter kit) o ​​un altro pacchetto (che è un bug). Sia la dissezione sia la ricerca ~/.emacs.ddi qualcosa sulla falsariga di (auto-complete-mode)funzionerebbe.
Wasamasa,

1
I pacchetti in genere non dovrebbero abilitare la modalità di completamento automatico per te (salvo alcune circostanze molto specifiche). Se sei sicuro al 100% di non abilitarlo da solo, ti suggerisco di segnalare un problema in quel pacchetto segnalandolo.
Malabarba,

Risposte:


7

Non so come inserire nella lista nera l'installazione di un pacchetto. Ma è facile impedirne il caricamento . Se inserisci il (provide 'auto-complete)tuo file init, a qualsiasi pacchetto che tenta di caricare auto-completeverrà detto che è già caricato.

(Più precisamente, questo si occupa delle librerie che si caricano auto-completenel modo normale, con require. Se c'è del codice che usa loaddirettamente (il che sarebbe insolito), devi metterlo in un file separato chiamatoauto-complete.el .)

Naturalmente, se il pacchetto richiede auto-complete, è probabilmente perché lo utilizzerà. Ma forse un pacchetto dichiara solo fonti di completamento automatico e ha funzionalità utili in caso contrario. Quindi puoi fare la parte che non vuoi una no-op. A seconda dell'operazione del pacchetto, potrebbero essere necessarie altre definizioni simili.

(provide 'auto-complete)
(defmacro ac-define-source (&rest ignored)
  "A no-op since I blacklist `auto-complete'.")

7

Quello che @Gilles ha scritto è la risposta generale che avrei dato anche.

Ma nota che l'utilizzo providenon senza impedire che il codice dal caricamento del pacchetto. Impedisce al codice di caricare il pacchetto solo da require. Se il codice utilizza load, ecc. load-library, load-fileQuesto trucco non ha alcun effetto.

Se è davvero necessario impedire al codice di caricare una determinata libreria, un approccio migliore è fornire una libreria proxy che viene caricata al suo posto. Ad esempio, in una directory che precede la tua load-path, aggiungi un falso auto-complete.elche non fa altro che (provide 'auto-complete).

In questo modo, ogni volta che il codice tenta di caricare la libreria utilizzando loado load-libraryviene caricata la libreria proxy anziché quella che si sta evitando.

Tuttavia, se il codice utilizza load-filee fornisce l'indirizzo assoluto del file della libreria che si sta tentando di evitare, quel file verrà caricato. Non vedo una buona soluzione per quel caso (tranne per rimuovere o sostituire quel file).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.