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-servicesqué sirvepymacs-terminate-servicesy debería ejecutarlo alguna vez? - ¿Qué debo hacer si alguna vez accidentalmente ejecuto
pymacs-terminate-services? Estoy especialmente interesado en cómo editarbefore-save-hookpara 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)