subplot title python
Manejando la muerte del ayudante (2)
La solución más fácil que se me ocurre es usar hook kill-buffer-query-functions
para evitar que *Pymacs*
sea eliminado. Me gusta esto:
(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)
Le preguntará si realmente quiere matar el *Pymacs*
o no. Incluso puede hacer que sea imposible eliminar los enlaces de teclado con esto:
(defun my-pymacs-saver ()
(if (equal (buffer-name) "*Pymacs*")
(progn
(message "NEVER kill *Pymacs*!")
nil)
t))
Yo uso pymacs-terminate-services
para cargar con fuerza todos los módulos. Tengo una función similar a pymacs-reload-rope
en http://www.emacswiki.org/emacs/AntonNazarov .
Probablemente pueda agregar pymacs-terminate-services
a kill-buffer-hook
(localmente en el buffer *Pymacs*
) para una terminación más elegante. Pero no estoy seguro. Por el resto de su pregunta, creo que es mejor preguntar / solicitar en el rastreador de problemas de Pymacs.
Instalé Pymacs, soga, ropemode, ropemacs, y cuando pymacs-terminate-services
por accidente, no pude guardar buffers modificados. Primero me preguntó: The Pymacs helper died. Restart it? (yes or no)
The Pymacs helper died. Restart it? (yes or no)
The Pymacs helper died. Restart it? (yes or no)
. Si respondí "sí", arrojó - Debugger entered--Lisp error: (error "There is no Pymacs helper!")
. Si respondí "no", arrojó:
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
")
Me las arreglé para pymacs-load
ejecutando pymacs-load
, cargando el módulo os
y respondiendo sí a Pymacs helper restart question. El búfer se guardó, pero luego comencé a tener otro error cada vez que guardé el archivo:
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)
")
Este es mi archivo de inicio:
(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-")
El manual de Pymacs describe la muerte del ayudante de Pymacs. *Pymacs*
que no debería cerrar el *Pymacs*
, porque esto mata al ayudante, y también debería reiniciar Emacs si se elimina el helper. Esto es inaceptable ya que tengo la costumbre de cerrar todos los buffers de vez en cuando y rara vez reinicio Emacs. Tengo varias preguntas relacionadas ahora:
- ¿Cuál es la mejor manera de manejar Pymacs para minimizar esos problemas? ¿Es posible ejecutar Pymacs solo cuando trabajo con Python y luego terminarlo de forma segura?
- ¿
pymacs-terminate-services
qué sirvepymacs-terminate-services
y debería ejecutarlo alguna vez? - ¿Qué debo hacer si alguna vez accidentalmente ejecuto
pymacs-terminate-services
? Estoy especialmente interesado en cómo editarbefore-save-hook
para hacer posible el almacenamiento en búfer sin mensajes de error.
Si mata accidentalmente el búfer * Pymacs * o ejecuta los pymacs-terminate-services
puede recuperar el proceso ejecutando el siguiente comando y respondiendo "sí" en el aviso.
(pymacs-load "ropemacs" "rope-")
Puede modificar su función init-file para permitir que el reinicio sea llamado interactivamente con Mx python-restart
. Reiniciar Pymacs de esta manera evitará el error 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)