pipe理帮手死亡

我已经安装了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帮助器重新启动问题。 缓冲区被保存了,但是当我保存文件时,我又开始发生另一个错误:

 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帮手的死亡。 它告诉我不应该closures*Pymacs*缓冲区,因为这会杀死帮助程序,并且如果帮助程序被*Pymacs* ,也应该重新启动Emacs。 这是不可接受的,因为我有习惯closures所有的缓冲区,也很less重新启动Emacs。 我现在有几个相关的问题:

  • 处理Pymacs以最大限度地减less这些问题的最好方法是什么? 是否有可能运行Pymacs只有当我与Python工作,然后再安全地终止它?
  • 什么是pymacs-terminate-services ,我应该运行它吗?
  • 如果我不小心运行了pymacs-terminate-services怎么办? 我特别感兴趣的是如何编辑before-save-hook以使缓冲区保存成为可能,而不会出现错误消息。

我能想到的最简单的解决scheme是使用kill-buffer-query-functions hook来防止*Pymacs**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-serviceskill-buffer-hook (本地在*Pymacs*缓冲区中)以获得更优美的终止。 但我不确定。 对于您的其余问题,我想最好是在Pymacs 问题跟踪器中询问/请求。

如果不小心杀死了* Pymacs *缓冲区或执行pymacs-terminate-services ,可以通过执行以下命令并在提示符下回答“是”来恢复进程。

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

您可以修改您的init-file函数以允许重新启动与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) 
Interesting Posts