2012-04-15 10 views
37

Я установил Pymacs, rope, ropemode, ropemacs, и когда я случайно выполнил 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 manual описывает смерть помощника Pymacs. Это говорит о том, что я не должен закрывать буфер *Pymacs*, потому что он убивает помощника, а также должен перезапускать Emacs, если помощник убит. Это неприемлемо, поскольку у меня есть привычка время от времени закрывать все буферы, а также редко перезапускать Emacs. У меня есть несколько вопросов:

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

Не пробовал, но [этот бит в Pymacs/contrib/Giorgi/dir] (https: // github.com/pinard/Pymacs/blob/b4e462f52566ad51c18f5d65e1db32af1e24bc13/contrib/Giorgi/dotEmacs.py) кажется актуальным, может быть ..? – dbr

+1

Очень подробный, грамматически правильный вопрос, не получивший окончательного ответа ... определенно заслуживающий щедрости. –

ответ

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* буфер или нет. Вы можете даже сделать это невозможно убить из keybinds этим:

(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 issue tracker.

0

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

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

Вы можете изменить вашу функцию инициализации-файла, чтобы позволить рестарта называться в интерактивном режиме с 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^