Bagaimana cara memasukkan paket ke daftar hitam?

8

Saya menggunakan company-modeuntuk tujuan penyelesaian. Tetapi entah bagaimana, beberapa paket selalu menarik auto-completejuga, yang bertabrakan company-mode, karena keduanya menawarkan popup dengan kandidat yang selesai. Saya ingin daftar hitam auto-complete, karena saya tidak membutuhkannya. Bagaimana saya bisa melakukan itu? Saya tahu ada variabel package-pinned-package, tetapi saya tidak bisa melihat cara memasukkan paket ke daftar hitam - mungkin dengan menggunakan arsip yang tidak valid?

Arne
sumber
1
Perhatikan bahwa tidak ada tabrakan per se. Untuk autocomplete-modemenjadi masalah, itu harus diaktifkan terlebih dahulu, demikian pula halnya company-mode.
wasamasa
Untuk beberapa alasan, itu diaktifkan tanpa saya melakukan penyesuaian.
Arne
Jika itu merupakan persyaratan dari paket lain maka harus diinstal, tetapi harus dimungkinkan untuk tidak autocompleteaktif dalam buffer mana company-modepun yang aktif. Mungkin Anda perlu menonaktifkan secara manual autocompletedi *mode-hooksalah satu mode utama yang terpengaruh?
Mark Aufflick
1
Saya sarankan Anda untuk mencari tahu apa fungsinya. Entah itu Anda (dan sesuatu dalam file init Anda, kemungkinan yang telah menjadi jauh lebih mungkin sejak penerimaan starter kit) atau paket lain (yang merupakan bug). Baik membagi dua dan mencari ~/.emacs.dsesuatu untuk Anda di sepanjang garis (auto-complete-mode)akan berhasil.
wasamasa
1
Paket biasanya tidak memungkinkan mode lengkapi-otomatis untuk Anda (simpan beberapa keadaan yang sangat spesifik). Jika Anda 100% yakin bahwa Anda tidak mengaktifkannya sendiri, saya sarankan Anda mengajukan masalah dalam paket yang melaporkan ini.
Malabarba

Jawaban:

7

Saya tidak tahu cara daftar hitam instalasi paket. Tetapi mudah untuk mencegahnya dimuat . Jika Anda memasukkan (provide 'auto-complete)file init Anda, maka setiap paket yang mencoba memuat auto-completeakan diberi tahu bahwa itu sudah dimuat.

(Lebih tepatnya, ini menangani perpustakaan yang memuat auto-completedengan cara normal, dengan require. Jika ada kode yang menggunakan loadsecara langsung (yang tidak biasa), Anda perlu meletakkan ini di file terpisah yang disebutauto-complete.el .)

Tentu saja, jika paket membutuhkan auto-complete, mungkin karena ia akan menggunakannya. Tetapi mungkin suatu paket hanya menyatakan sumber autocomplete dan memiliki fungsi yang bermanfaat. Jadi Anda dapat membuat bagian yang tidak Anda inginkan no-op. Bergantung pada apa yang dilakukan paket, Anda mungkin perlu definisi serupa lainnya.

(provide 'auto-complete)
(defmacro ac-define-source (&rest ignored)
  "A no-op since I blacklist `auto-complete'.")
Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

Apa yang ditulis @Gilles adalah jawaban umum yang akan saya berikan juga.

Tapi catatan bahwa menggunakan providetidak tidak mencegah kode dari loading paket. Ini mencegah kode dari memuat paket hanya dengan require. Jika kode menggunakan load, load-library, load-filedll maka trik ini tidak memiliki efek.

Jika Anda benar-benar perlu mencegah kode memuat pustaka yang diberikan, pendekatan yang lebih baik adalah dengan menyediakan pustaka proksi yang dimuat sebagai gantinya. Misalnya, dalam direktori yang datang lebih awal di Anda load-path, tambahkan palsu auto-complete.elyang tidak melakukan apa pun kecuali (provide 'auto-complete).

Dengan begitu, setiap kali kode mencoba memuat pustaka menggunakan loadatau load-librarypustaka proksi Anda akan dimuat alih-alih yang Anda hindari.

Namun, jika kode menggunakan load-filedan memberikan alamat absolut dari file perpustakaan yang Anda coba hindari, maka file itu akan dimuat. Saya tidak melihat solusi yang baik untuk kasus itu (kecuali untuk menghapus atau mengganti file itu).

Drew
sumber