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-services
到kill-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)