Comment mettre un package sur liste noire?


8

J'utilise à company-modedes fins d'achèvement. Mais d'une manière ou d'une autre, certains packages sont toujours intégrés auto-complete, ce qui entre en collision company-mode, car les deux offrent une fenêtre contextuelle avec les candidats à l'achèvement. Je veux mettre sur liste noire auto-complete, car je n'en ai pas besoin. Comment puis je faire ça? Je sais qu'il y a une variable package-pinned-package, mais je ne vois pas comment mettre un paquet sur liste noire - peut-être en utilisant une archive invalide?


1
Notez qu'il n'y a pas de collision en soi. Pour autocomplete-modeêtre un problème, il doit d'abord être activé, il en va de même company-mode.
wasamasa

Pour une raison quelconque, il est activé sans que je fasse de personnalisation.
Arne

S'il s'agit d'une exigence d'un autre paquet, il doit être installé, mais il devrait être possible de ne pas autocompleteêtre actif dans un tampon où il company-modeest actif. Vous devez peut-être désactiver manuellement autocompletel' *mode-hookun des principaux modes concernés?
Mark Aufflick

1
Je vous suggère de découvrir ce qui fait. Soit c'est vous (et quelque chose dans votre fichier init, une possibilité qui est devenue beaucoup plus probable depuis l'acceptation des kits de démarrage) ou un autre package (qui est un bug). La bissection et la recherche ~/.emacs.dde quelque chose dans le sens de (auto-complete-mode)cela fonctionneraient.
wasamasa

1
Les packages ne devraient généralement pas activer le mode de complétion automatique pour vous (sauf certaines circonstances très spécifiques). Si vous êtes sûr à 100% de ne pas l'activer vous-même, je vous suggère de signaler un problème dans ce package en signalant cela.
Malabarba

Réponses:


7

Je ne sais pas comment mettre sur liste noire l'installation d'un paquet. Mais il est facile de l'empêcher de se charger . Si vous placez (provide 'auto-complete)votre fichier init, alors tout paquet qui tentera de se charger auto-completesera informé qu'il est déjà chargé.

(Plus précisément, cela prend en charge les bibliothèques qui se chargent auto-completenormalement, avec require. S'il y a du code qui utilise loaddirectement (ce qui serait inhabituel), vous devez le mettre dans un fichier séparé appeléauto-complete.el .)

Bien sûr, si le package l'exige auto-complete, c'est probablement parce qu'il l'utilisera. Mais peut-être qu'un paquet ne déclare que les sources de saisie semi-automatique et a des fonctionnalités utiles sinon. Ainsi, vous pouvez faire la partie que vous ne voulez pas opérer. Selon ce que fait le package, vous devrez peut-être d'autres définitions similaires.

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

7

Ce que @Gilles a écrit est la réponse générale que j'aurais aussi donnée.

Mais notez que l'utilisation providen'empêche pas le code de charger le package. Il empêche le code de charger le package uniquement par require. Si le code utilise load, load-library, load-fileetc. alors cette astuce n'a aucun effet.

Si vous devez vraiment empêcher le code de charger une bibliothèque donnée, une meilleure approche consiste à fournir une bibliothèque proxy qui est chargée à sa place. Par exemple, dans un répertoire qui vient plus tôt dans votre load-path, ajoutez un faux auto-complete.elqui ne fait rien sauf (provide 'auto-complete).

De cette façon, chaque fois que le code essaie de charger la bibliothèque à l'aide de loadou load-libraryvotre bibliothèque proxy sera chargée au lieu de celle que vous évitez.

Cependant, si le code utilise load-fileet fournit l'adresse absolue du fichier de la bibliothèque que vous essayez d'éviter, ce fichier sera chargé. Je ne vois pas de bonne solution pour ce cas (sauf pour supprimer ou remplacer ce fichier).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.