2012-04-15 4 views
37

Ich hatte Pymacs, Seil, Ropemode, Ropemacs installiert, und wenn ich pymacs-terminate-services aus Versehen ausgeführt habe, konnte ich nicht modifizierte Puffer speichern. Es fragte mich zuerst - The Pymacs helper died. Restart it? (yes or no). Wenn ich "Ja" antwortete, warf es - Debugger entered--Lisp error: (error "There is no Pymacs helper!"). Wenn ich „nein“ beantwortet, warf es:Verwalten Helfer Tod

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

ich es geschafft, durch die Ausführung pymacs-load arbeiten um, laden os Modul, und die Beantwortung ja zu Pymacs Helfer Neustart Frage. Der Puffer wurde gerettet, aber dann begann ich einen anderen Fehler jedes Mal zu bekommen ich die Datei gespeichert:

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

Das ist mein init-Datei:

(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 beschreibt den Tod von Pymacs Helfer. Es sagt, dass ich *Pymacs* Puffer nicht schließen sollte, weil dies den Helfer tötet, und sollte Emacs auch neu starten, wenn Helfer getötet wird. Dies ist inakzeptabel, da ich die Gewohnheit habe, von Zeit zu Zeit alle Puffer zu schließen und Emacs auch selten neu zu starten. Ich habe jetzt mehrere verwandte Fragen:

  • Was ist der beste Weg, um mit Pymacs umzugehen, um solche Probleme zu minimieren? Ist es möglich, Pymacs nur auszuführen, wenn ich mit Python arbeite und es dann sicher wieder beende?
  • Was ist pymacs-terminate-services für und sollte ich es jemals ausführen?
  • Was soll ich tun, wenn ich jemals versehentlich pymacs-terminate-services laufen lasse? Ich bin besonders daran interessiert, before-save-hook zu bearbeiten, um Pufferspeicherung ohne Fehlermeldungen zu ermöglichen.
+1

Nicht versucht es, aber [dieses Bit in der Pymacs/contrib/Giorgi/dir] (https: // github.com/pinard/pymacs/blob/b4e462f52566ad51c18f5d65e1db32af1e24bc13/Beitrag/Giorgi/dotEmacs.py) scheint relevant, vielleicht ..? – dbr

+1

Eine sehr detaillierte, grammatisch korrekte Frage, die keine schlüssige Antwort erhalten hat ... definitiv eine Prämie verdient. –

Antwort

2

Die einfachste Lösung, die ich denken kann, ist kill-buffer-query-functions Haken zu verwenden *Pymacs* zu verhindern, getötet zu werden. Wie folgt aus:

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

Es wird Sie fragen, ob Sie wirklich *Pymacs* Puffer töten wollen oder nicht. Sie können es sogar unmöglich machen, von keybinds durch diese zu töten:

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

Ich benutze pymacs-terminate-services mit Nachdruck alle Module nachzuladen. Ich habe eine ähnliche Funktion wie pymacs-reload-rope in http://www.emacswiki.org/emacs/AntonNazarov.

Wahrscheinlich können Sie pymacs-terminate-services zu kill-buffer-hook hinzufügen (lokal in *Pymacs* Puffer) für eine elegantere Beendigung. Aber ich bin mir nicht sicher. Für den Rest Ihrer Frage, ich denke, es ist besser zu fragen/fordern in der Pymacs issue tracker.

0

Wenn Sie versehentlich den Puffer * Pymacs * löschen oder pymacs-terminate-services ausführen, können Sie den Prozess wiederherstellen, indem Sie den folgenden Befehl ausführen und an der Eingabeaufforderung "yes" (Ja) antworten.

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

Sie können Ihre init-Datei-Funktion ändern, um den Neustart zu ermöglichen, callte mit M-x python-restart interaktiv werden. Durch den Neustart von Pymacs auf diese Weise wird der Fehler TypeError: major()... vermieden.

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