7

Я использую python-mode.el вместо python.el для работы с Python, и все мои настройки зависят от него. Тем не менее, периодически по какой-то причине python.el, который поставляется с Emacs23, волшебным образом загружается, и внезапно вся моя конфигурация просто выходит из окна.

Как я могу предотвратить это? Прямо сейчас у меня есть этот код в моем .emacs:

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

Кажется, это уменьшает количество случаев, когда это происходит, но иногда я открываю файл python - в том же сеансе! - и он получит python.el python-mode вместо версии python-mode.el. И все же, следующий буфер по-прежнему имеет старый режим.

Это быстро сводит меня с ума бананы!

5 ответов5

8

Все зависит от того, как вы настроили свой .emacs.

По умолчанию функция 'python-mode связана с пакетом python.el . Вам нужно изменить это следующим образом:

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

Это предполагает, что пакет python-mode уже находится на вашем load-path . Вы также должны быть уверены, что вышеперечисленное происходит в вашем .emacs, прежде чем что-либо приведет к загрузке python.el .

Эти две другие строки, вероятно, не нужны, но не больно:

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

Если это не сработает, нам понадобится дополнительная информация.


Другой альтернативой является переопределение функций, которые автоматически загружаются из python.el , которые в Emacs 23.1 были следующими:

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

Если вы определите их в своих .emacs, то автозагрузки, которые устанавливает Emacs, не будут иметь никакого эффекта. Вам придется загружать python-mode.el вручную (поскольку автозагрузка для python-mode запускать не нужно (поскольку вы определили эту функцию)). Загрузите python-mode.el с помощью:

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

Если это случится снова, это также сигнализирует об ошибке в python-mode.el . Python-mode.el - это мое стремление - должен быть спроектирован таким образом, чтобы python.el не мешал, даже если он загружен.

В случае, пожалуйста, сделайте запись в трекере ошибок.

1

Приятной вещью является проверка зависимости загрузки файла с помощью переменной load-history . Ищите минусы (require . python) в нем. Эти минусы будут связаны с загруженным файлом. Это может помочь понять зависимости загрузки и изменить последовательность загрузки различных режимов Python.

Чтобы никогда не загружать python.el и python.elc, избавьтесь от них в установочных файлах emacs. И добавьте это в ваш файл инициализации:

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

Но если вы не можете сделать это, потому что от этого зависит какой-то другой пакет, вы можете попытаться поместить следующее в ваш файл инициализации. Он загружает python-mode.el после python.el и переопределяет его определения:

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

Я испытал ту же проблему. Несмотря на то, что у меня была правильная (require 'python-mode) форма в моем init.el и нет требования к загрузке python.el. В моем случае python.el продолжал загружаться после python-mode.el, который переопределял мои настройки. Это произошло из-за semantic/wisent/python.el, который пытается загрузить python.el.

1

Вы должны быть в состоянии просто удалить python.el (и, возможно, .elc? Это все еще расширение для скомпилированного файла)

0

следующая ссылка также может быть актуальной ..

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

Я использую режим Python, и, несмотря на то, что в моем .emacs указан код, рекомендованный выше, мне все равно приходилось делать что-то вроде ..

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

... чтобы на самом деле отключить функцию.

виновником была зависимость python.el от wisent-python.el, которая вызвала перезагрузку некоторых общих переменных def. я прокомментировал (require 'python nil t), поскольку я уже вручную определил путь включения, который он (код, требующий этого файла) в любом случае устанавливает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .