Làm thế nào để danh sách đen một gói?


8

Tôi đang sử dụng company-modecho mục đích hoàn thành. Nhưng bằng cách nào đó, một số gói luôn luôn thu hút auto-complete, xung đột với nhau company-mode, vì cả hai đều cung cấp một cửa sổ bật lên với các ứng cử viên hoàn thành. Tôi muốn vào danh sách đen auto-complete, vì tôi không cần nó. Làm thế nào tôi có thể làm điều đó? Tôi biết có một biến package-pinned-package, nhưng tôi không thể thấy cách đưa vào danh sách đen một gói - có thể bằng cách sử dụng một kho lưu trữ không hợp lệ?


1
Lưu ý rằng không có va chạm mỗi se. Để autocomplete-modetrở thành một vấn đề, nó phải được kích hoạt trước, tương tự như vậy company-mode.
wasamasa

Vì một số lý do, nó được kích hoạt mà không cần tôi thực hiện bất kỳ tùy chỉnh nào.
Arne

Nếu đó là một yêu cầu của gói khác thì nó phải được cài đặt, nhưng có thể không autocompletehoạt động trong bất kỳ bộ đệm nào company-modeđang hoạt động. Có lẽ bạn cần phải vô hiệu hóa thủ công autocompletetrong *mode-hookbất kỳ chế độ chính bị ảnh hưởng nào?
Đánh dấu Aufflick

1
Tôi đề nghị bạn tìm hiểu những gì không. Hoặc là bạn (và một cái gì đó trong tệp init của bạn, một khả năng đã trở nên có thể xảy ra hơn rất nhiều kể từ khi chấp nhận bộ khởi động) hoặc gói khác (đó là một lỗi). Cả hai chia đôi và tìm kiếm của bạn ~/.emacs.dcho một cái gì đó dọc theo dòng (auto-complete-mode)sẽ làm việc.
wasamasa

1
Các gói thường không nên bật chế độ tự động hoàn thành cho bạn (lưu một số trường hợp rất cụ thể). Nếu bạn chắc chắn 100% rằng bạn không tự kích hoạt nó, tôi khuyên bạn nên gửi một vấn đề trong gói báo cáo này.
Malabarba

Câu trả lời:


7

Tôi không biết làm thế nào để đưa vào danh sách đen việc cài đặt một gói. Nhưng thật dễ dàng để ngăn chặn nó tải . Nếu bạn đặt (provide 'auto-complete)tệp init của mình, thì bất kỳ gói nào cố tải auto-completesẽ được thông báo rằng nó đã được tải.

(Chính xác hơn, điều này quan tâm đến các thư viện tải auto-completetheo cách thông thường, với require. Nếu có bất kỳ mã nào sử dụng loadtrực tiếp (sẽ không bình thường), bạn cần đặt mã này vào một tệp riêng gọi làauto-complete.el .)

Tất nhiên, nếu gói yêu cầu auto-complete, có lẽ vì nó sẽ sử dụng nó. Nhưng có thể một gói chỉ khai báo các nguồn tự động hoàn thành và có chức năng hữu ích khác. Vì vậy, bạn có thể làm cho phần mà bạn không muốn không có. Tùy thuộc vào những gì gói làm, bạn có thể cần các định nghĩa tương tự khác.

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

7

Những gì @Gilles viết là câu trả lời chung mà tôi cũng sẽ đưa ra.

Nhưng lưu ý rằng việc sử dụng providekhông không ngăn chặn mã từ tải gói. Nó ngăn chặn mã tải gói chỉ bằng cách require. Nếu mã sử dụng load, load-library, load-filevv sau đó lừa này không có tác dụng.

Nếu bạn thực sự cần ngăn mã tải một thư viện nhất định, cách tiếp cận tốt hơn là cung cấp thư viện proxy được tải thay cho nó. Ví dụ: trong một thư mục xuất hiện sớm hơn trong bạn load-path, hãy thêm một âm thanh auto-complete.elkhông có gì ngoại trừ (provide 'auto-complete).

Bằng cách đó, bất cứ khi nào mã cố tải thư viện bằng cách sử dụng loadhoặc load-librarythư viện proxy của bạn sẽ được tải thay vì thư bạn đang tránh.

Tuy nhiên, nếu mã sử dụng load-filevà cung cấp địa chỉ tuyệt đối của tệp của thư viện mà bạn đang cố tránh, thì tệp đó sẽ được tải. Tôi không thấy một giải pháp tốt cho trường hợp đó (ngoại trừ xóa hoặc thay thế tệp đó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.