簡體   English   中英

管理助手死亡

[英]Managing helper death

我安裝了Pymacs,rope,ropemode,ropemacs,當我意外執行pymacs-terminate-services時,我無法保存修改后的緩沖區。 它首先問我 - 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) 如果我回答“是”,則拋出 - 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 helper restart問題來解決問題。 保存緩沖區,但每次保存文件時我都開始收到另一個錯誤:

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

這是我的初始文件:

(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以使緩沖區保存成為可能而沒有錯誤消息。

我能想到的最簡單的解決方案是使用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*緩沖區。 你甚至可以通過這個來殺死keybinds:

(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* buffer中)以獲得更優雅的終止。 但我不確定。 對於你的其余問題,我想最好在Pymacs 問題跟蹤器中詢問/請求。

如果您不小心殺死* Pymacs *緩沖區或執行pymacs-terminate-services您可以通過執行以下命令並在提示符處回答“是”來恢復該過程。

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

您可以修改init-file函數以允許使用Mx python-restart以交互方式調用Mx 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM