Managing helper death
The easiest solution I can think of is to use kill-buffer-query-functions
hook to prevent *Pymacs*
to be killed. Like this:
(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)
It will ask you if you really want to kill *Pymacs*
buffer or not. You can even make it impossible to kill from keybinds by this:
(defun my-pymacs-saver () (if (equal (buffer-name) "*Pymacs*") (progn (message "NEVER kill *Pymacs*!") nil) t))
I use pymacs-terminate-services
to forcefully reload all modules. I have a function similar to pymacs-reload-rope
in http://www.emacswiki.org/emacs/AntonNazarov.
Probably you can add pymacs-terminate-services
to kill-buffer-hook
(locally in *Pymacs*
buffer) for more graceful termination. But I am not sure. For the rest of your question, I guess it's better to ask/request in the Pymacs issue tracker.
If you accidentally kill the *Pymacs* buffer or execute pymacs-terminate-services
you can recover the process by executing the following command and answering "yes" at the prompt.
(pymacs-load "ropemacs" "rope-")
You can modify your init-file function to allow for the restart to be called interactively with M-x python-restart
. Restarting Pymacs in this manner will avoid the TypeError: major()...
error.
(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)