我已经安装了Pymacs,rope,ropemode,ropemacs,当我偶然执行pymacs-terminate-services时,我无法保存修改后的缓冲区。它首先问我-The Pymacs helper died. Restart it? (yes or no)。如果我回答"is",则抛出-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重新启动问题回答yes来解决。缓冲区已保存,但是每次保存文件时,我都开始出现另一个错误:
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。这是 Not Acceptable ,因为我有不时关闭所有缓冲区的习惯,而且很少重启Emacs。我现在有几个相关的问题:
  • 处理Pymacs最小化此类问题的最佳方法是什么?仅当我使用Python并再次安全终止它时,才可能运行Pymacs吗?
  • 什么是pymacs-terminate-services,我应该运行它吗?
  • 如果不小心运行pymacs-terminate-services怎么办?我对如何编辑before-save-hook以使保存缓冲区而不会出现错误消息特别感兴趣。
  • 最佳答案

    我能想到的最简单的解决方案是使用kill-buffer-query-functions钩子(Hook)来防止*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*缓冲区。您甚至可以通过以下方法使它无法从键绑定(bind)中杀死:
    (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中进行询问/请求。

    关于python - 管理助手死亡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10161638/

    10-11 10:19