我安装了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)
")
这是我的初始文件:
(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描述了Pymacs助手的死亡。它告诉我不应该关闭*Pymacs*
缓冲区,因为这会杀死帮助程序,如果帮助程序被杀死,也应该重新启动Emacs。这是不可接受的,因为我习惯不时关闭所有缓冲区,也很少重启Emacs。我现在有几个相关的问题:
pymacs-terminate-services
,我应该运行它吗?pymacs-terminate-services
该怎么办?我特别感兴趣的是如何编辑before-save-hook
以便在没有错误消息的情况下保存缓冲区。答案 0 :(得分: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中询问/请求。
答案 1 :(得分:0)
如果您不小心杀死* Pymacs *缓冲区或执行pymacs-terminate-services
,您可以通过执行以下命令并在提示符处回答“是”来恢复该过程。
(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)