Управляющий смертью помощника

Я установил Pymacs, веревку, веревку, веревку, и когда я выполнил pymacs-terminate-servicesслучайно я не смог сохранить измененные буферы. Сначала он спросил меня - The Pymacs helper died. Restart it? (yes or no), Если я ответил "да", это бросило - Debugger entered--Lisp error: (error "There is no Pymacs helper!"), Если я ответил "нет", он бросил:

Debugger entered--Lisp error: (error "Python: Traceback (most recent call last):
  File \"/usr/local/lib/python2.7/dist-packages/Pymacs.py\", line 258, in loop
    value = eval(text)
  File \"<string>\", line 1, in <module>
IndexError: list index out of range
")

Мне удалось обойти, выполнив pymacs-load, загрузка os модуль и ответ "да" на вопрос перезапуска помощника Pymacs. Буфер был сохранен, но затем я начал получать другую ошибку при каждом сохранении файла:

Debugger entered--Lisp error: (error "Python: Traceback (most recent call last):
  File \"/usr/local/lib/python2.7/dist-packages/Pymacs.py\", line 258, in loop
    value = eval(text)
  File \"<string>\", line 1, in <module>
TypeError: major() takes exactly 1 argument (0 given)
")

Это мой init-файл:

(load "~/.emacs.d/pymacs.el")
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
(autoload 'pymacs-autoload "pymacs")
(require 'pymacs)
 (pymacs-load "ropemacs" "rope-")

Руководство Pymacs описывает смерть помощника Pymacs. Это говорит о том, что я не должен закрывать *Pymacs* буфер, потому что это убивает помощника, и должен также перезапустить Emacs, если помощник убит. Это неприемлемо, поскольку у меня есть привычка время от времени закрывать все буферы, а также редко перезагружать Emacs. У меня есть несколько связанных вопросов сейчас:

  • Как лучше всего обращаться с Pymacs, чтобы минимизировать такие проблемы? Можно ли запускать Pymacs только тогда, когда я работаю с Python, а затем безопасно завершить его снова?
  • Что такое pymacs-terminate-services и я должен когда-либо управлять этим?
  • Что мне делать, если я случайно запустил pymacs-terminate-services? Меня особенно интересует, как редактировать before-save-hook сделать возможным сохранение буфера без сообщений об ошибках.

2 ответа

Самое простое решение, которое я могу придумать, это использовать kill-buffer-query-functions крюк, чтобы предотвратить *Pymacs* быть убитым Как это:

(defun my-pymacs-saver ()
  (if (equal (buffer-name) "*Pymacs*")
      (yes-or-no-p "Really kill *Pymacs* buffer? ")
    t))

(add-hook 'kill-buffer-query-functions 'my-pymacs-saver)

Он спросит вас, действительно ли вы хотите убить *Pymacs* буфер или нет. Вы даже можете сделать невозможным убийство с помощью клавиш:

(defun my-pymacs-saver ()
  (if (equal (buffer-name) "*Pymacs*")
      (progn
        (message "NEVER kill *Pymacs*!")
        nil)
    t))

я использую pymacs-terminate-services принудительно перезагрузить все модули. У меня есть функция, похожая на pymacs-reload-rope в http://www.emacswiki.org/emacs/AntonNazarov.

Возможно, вы можете добавить pymacs-terminate-services в kill-buffer-hook (локально в *Pymacs* буфер) для более изящного завершения. Но я не уверен. Для остальной части вашего вопроса, я думаю, что лучше спросить / запросить в системе отслеживания проблем Pymacs.

Если вы случайно убили буфер *Pymacs* или выполнили pymacs-terminate-services Вы можете восстановить процесс, выполнив следующую команду и ответив "да" на приглашение.

(pymacs-load "ropemacs" "rope-")

Вы можете изменить функцию init-file, чтобы перезапуск вызывался в интерактивном режиме с M-x python-restart, Перезапуск Pymacs таким способом позволит избежать TypeError: major()... ошибка.

(defun pymacs-restart ()
  (interactive)
  (pymacs-load "ropemacs" "rope-"))

(load "~/.emacs.d/pymacs.el")
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
(autoload 'pymacs-autoload "pymacs")
(require 'pymacs)
(pymacs-restart)
Другие вопросы по тегам