Làm cách nào tôi có thể ngăn python.el vận chuyển với Emacs 23 khỏi tải EVER?


7

Tôi sử dụng python-mode.el thay vì python.el cho công việc python và tất cả các tùy chỉnh của tôi phụ thuộc vào nó. Tuy nhiên, theo định kỳ vì một số lý do, python.el xuất xưởng với Emacs23 sẽ được tải một cách kỳ diệu và đột nhiên tất cả cấu hình của tôi chỉ xuất hiện ngoài cửa sổ.

Làm thế nào tôi có thể ngăn chặn điều này? Ngay bây giờ, tôi có mã này trong .emacs của mình:

(if featurep 'python)
    (unload-feature 'python))

Điều đó dường như làm giảm các trường hợp này xảy ra, nhưng đôi khi tôi sẽ mở một tệp python - trong cùng một phiên! - và nó sẽ nhận được python.el python-mode thay vì phiên bản python-mode.el. Chưa hết, bộ đệm tiếp theo vẫn có chế độ cũ.

Đây là nhanh chóng lái tôi chuối!

Câu trả lời:


8

Tất cả phụ thuộc vào cách bạn thiết lập .emacs của mình.

Theo mặc định, chức năng 'python-modeđược liên kết với gói python.el. Bạn cần thay đổi điều đó với những điều sau đây:

(autoload 'python-mode "python-mode" "Python Mode." t)

Điều đó giả định rằng python-modegói đã có trên của bạn load-path. Bạn cũng cần chắc chắn rằng những điều trên xảy ra trong .emacs của bạn trước khi bất cứ điều gì khiến python.elnó được tải.

Hai dòng khác có thể không cần thiết, nhưng đừng đau:

(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))

Nếu điều đó không hiệu quả, thì chúng ta sẽ cần thêm thông tin.


Một cách khác là ghi đè các chức năng được tự động tải từ python.elđó, kể từ Emacs 23.1 như sau:

(defun run-python (&rest args) nil)
(defun python-mode (&rest args) nil)
(defun jython-mode (&rest args) nil)
(defun python-shell (&rest args) nil)

Nếu bạn xác định những thứ đó trong .emacs của bạn, thì tự động tải mà Emacs thiết lập sẽ không có hiệu lực. Bạn sẽ phải tải python-mode.elthủ công (vì tự động tải cho python-modekhông cần phải chạy (vì bạn đã xác định chức năng đó)). Tải python-mode.elvới:

(load "/path/to/python-mode.el")

2

Nếu nó xảy ra một lần nữa, nó báo hiệu một lỗi python-mode.elquá. Python-mode.el - đó là nỗ lực của tôi - nên được thiết kế theo cách, python.elkhông làm phiền, ngay cả khi được tải.

Trong trường hợp, vui lòng tạo một mục tại trình theo dõi lỗi .


1

Bạn có thể chỉ cần xóa python.el (và có lẽ .elc? Đây có phải là phần mở rộng cho tệp đã biên dịch không)


Vấn đề ở đây là tệp .el.gz là một phần của phân phối Emacs cốt lõi, trong không gian người dùng.
Chris R

1

Một điều tốt đẹp là kiểm tra phụ thuộc tải tập tin thông qua load-historybiến. Tìm kiếm những khuyết điểm (require . python)trong đó. Nhược điểm này sẽ được liên kết với một tập tin được tải. Điều này có thể giúp hiểu được các phụ thuộc tải và sửa đổi trình tự tải của các chế độ python khác nhau.

Để đảm bảo bạn không bao giờ tải python.el và python.elc, hãy loại bỏ nó trong các tệp cài đặt của emacs. Và thêm nó vào tập tin init của bạn:

(autoload 'python-mode "python-mode")

Nhưng nếu bạn không thể làm điều đó vì một số gói khác phụ thuộc vào nó, bạn có thể thử đặt các mục sau vào tệp init của mình. Nó tải python-mode.el sau python.el và ghi đè các định nghĩa của nó:

(require 'python) (require 'python-mode)

Tôi đã trải qua vấn đề tương tự. Mặc dù tôi đã có một (require 'python-mode)biểu mẫu thích hợp trong init.el của mình và không yêu cầu tải đối với python.el. Trong trường hợp của tôi, python.el tiếp tục được tải sau python-mode.el, nó vượt qua các thiết lập của tôi. Đó là do semantic / Wisent / python.el cố tải python.el.


0

liên kết sau đây cũng có thể có liên quan ..

http://permalink.gmane.org/gmane.emacs.cedet/4935

Tôi sử dụng chế độ python và mặc dù mã được khuyên ở trên có trong .emacs của tôi, tôi vẫn phải làm những việc như ..

M-x py-pdbtrack-toggle-stack-tracking  ; followed by..
M-x python-pdbtrack-toggle-stack-tracking

.. để thực sự tắt một tính năng.

thủ phạm là sự phụ thuộc khôn ngoan python.el python.el gây ra việc tải lại một số defs biến phổ biến. tôi đã nhận xét (yêu cầu 'python nil t) vì tôi đã xác định thủ công đường dẫn bao gồm mà nó (mã yêu cầu tệp này) thiết lập bằng mọi cách.

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.