37

Pymacs、rope、ropemode、ropemacsをインストールしましたが、pymacs-terminate-services誤って実行したときに、変更されたバッファーを保存できませんでした。それは最初に私に尋ねました- The Pymacs helper died. Restart it? (yes or no)。「はい」と答えると、投げました- Debugger entered--Lisp error: (error "There is no Pymacs helper!")。私が「いいえ」と答えた場合、それは投げました:

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

実行しpymacs-load、モジュールをロードosし、Pymacsヘルパーの再起動の質問に「はい」と答えることで、なんとか回避できました。バッファは保存されましたが、ファイルを保存するたびに別のエラーが発生し始めました。

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

これは私のinitファイルです:

(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マニュアルには、Pymacsヘルパーの死について説明されています。これはヘルパーを殺すので、バッファを閉じてはいけないことを示しています*Pymacs*。また、ヘルパーが殺された場合はEmacsを再起動する必要があります。私は時々すべてのバッファを閉じる習慣があり、Emacsを再起動することはめったにないので、これは受け入れられません。私は今、いくつかの関連する質問があります:

  • このような問題を最小限に抑えるためにPymacsを処理する最良の方法は何ですか?Pythonを使用している場合にのみPymacsを実行して、安全に終了することはできますか?
  • pymacs-terminate-servicesのために、そして私はそれを実行する必要がありますか?
  • 誤って走った場合はどうすればよいpymacs-terminate-servicesですか?before-save-hookエラーメッセージなしでバッファ保存を可能にするために編集する方法に特に興味があります。
4

2 に答える 2

2

私が考えることができる最も簡単な解決策は、kill-buffer-query-functionsフックを使用*Pymacs*して殺されるのを防ぐことです。このような:

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

本当に*Pymacs*バッファを削除するかどうかを尋ねられます。これにより、キーバインドからのキルを不可能にすることさえできます:

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

pymacs-terminate-servicesすべてのモジュールを強制的にリロードするために使用します。http://www.emacswiki.org/emacs/AntonNazarovに似た機能がpymacs-reload-ropeあります。

pymacs-terminate-servicesおそらく、より適切な終了のためにkill-buffer-hook(ローカルに*Pymacs*バッファに)追加できます。しかし、よくわかりません。残りの質問については、Pymacs issue trackerで質問/リクエストする方がよいと思います。

于 2012-11-27T17:22:56.200 に答える
0

誤って *Pymacs* バッファーを強制終了したり、実行したりしpymacs-terminate-servicesた場合は、次のコマンドを実行し、プロンプトで "yes" と答えると、プロセスを回復できます。

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

init-file 関数を変更して、再起動をインタラクティブに呼び出せるようにすることができますM-x python-restart。この方法で Pymacs を再起動すると、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)
于 2013-01-18T19:31:21.567 に答える