2012-04-15 14 views
37

Había instalado Pymacs, cuerda, modo de cuerda, mazos de cuerda, y cuando ejecuté pymacs-terminate-services por accidente, no pude guardar los buffers modificados. Primero me preguntó: The Pymacs helper died. Restart it? (yes or no). Si respondí "sí", arrojó - Debugger entered--Lisp error: (error "There is no Pymacs helper!"). Si respondió "no", se lanzó:Manejando la muerte de ayudante

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 
") 

logré evitar mediante la ejecución de pymacs-load, cargando os módulo y responder afirmativamente a la pregunta Pymacs ayudante de reinicio. El tampón se salvó, pero luego empecé a conseguir otro error cada vez que salvé 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) 
") 

Ésta es mi init-file:

(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 describe la muerte de Pymacs ayudante. Dice que no debo cerrar el buffer *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?
  • ¿Qué es pymacs-terminate-services y debo ejecutarlo alguna vez?
  • ¿Qué debo hacer si accidentalmente ejecuto pymacs-terminate-services? Estoy especialmente interesado en cómo editar before-save-hook para hacer posible el almacenamiento en búfer sin mensajes de error.
+1

No lo intenté, pero [este bit en Pymacs/contrib/Giorgi/dir] (https: // github.com/pinard/Pymacs/blob/b4e462f52566ad51c18f5d65e1db32af1e24bc13/contrib/Giorgi/dotEmacs.py) parece relevante, ¿tal vez ...? – dbr

+1

Una pregunta muy detallada, gramaticalmente correcta que no ha recibido una respuesta definitiva ... definitivamente merecedora de una recompensa. –

Respuesta

2

La solución más fácil que se me ocurre es utilizar kill-buffer-query-functions gancho para evitar *Pymacs* a matar. De esta manera:

(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) 

Se le preguntará si realmente quiere matar *Pymacs* búfer o no. Incluso puede hacer que sea imposible para matar de vínculos de teclado por esto:

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

utilizo pymacs-terminate-services para recargar enérgicamente todos los módulos. Tengo una función similar a pymacs-reload-rope en http://www.emacswiki.org/emacs/AntonNazarov.

Probablemente puede agregar pymacs-terminate-services a kill-buffer-hook (localmente en *Pymacs* buffer) para una terminación más elegante. Pero no estoy seguro. Para el resto de su pregunta, creo que es mejor preguntar/solicitar en Pymacs issue tracker.

0

Si mata accidentalmente el búfer * Pymacs * o ejecuta pymacs-terminate-services puede recuperar el proceso ejecutando el siguiente comando y respondiendo "sí" en el aviso.

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

Usted puede modificar su función init-file para permitir el reinicio de ser llamado de forma interactiva con M-x 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) 
Cuestiones relacionadas