在python-mode中,有一个名为py-execute-region的函数,它将突出显示的代码区域发送到Python缓冲区进行评估。在评估之后,光标位于Python缓冲区中,但我希望它保留在脚本缓冲区中,以便我可以继续生成更多代码。我写了一个简单的建议功能:
(defadvice py-execute-region
(after py-execute-region-other-window activate)
""" After execution, return cursor to script buffer """
(other-window 1)
)
但这根本不起作用。我尝试过其他变种,比如使用'around'而不是'after';将变量设置为脚本缓冲区名称,然后弹出缓冲区到该缓冲区和类似的东西。没有成功!我想知道这个机制对某人来说是否明显......谢谢!
答案 0 :(得分:8)
在这种情况下,解决方案似乎是
(custom-set-variables
'(py-shell-switch-buffers-on-execute nil))
答案 1 :(得分:2)
使用around-advice在调用中包装函数
save-window-excursion
,它将恢复上一个窗口
命令完成后的配置。
(defadvice py-execute-region
(around preserve-window-configuration activate)
"After execution, return cursor to script buffer"
(save-window-excursion ad-do-it))
但请记住,如果Python缓冲区尚未显示, 在命令完成后它仍将被隐藏。要解决这个问题, 你可以添加另一条建议来调用switch-to-buffer-other-window 端:
(defadvice py-execute-region
(after show-pybuf-other-window activate)
"After execution, show the python buffer in another window."
(switch-to-buffer-other-window "[PYTHON BUFFER NAME]"))
另外,请确保您不在elisp中使用"""triple quotes"""
。我不
认为他们有效。
答案 2 :(得分:1)
你有什么工作对我来说很好。它应该自动激活,因此不需要单独激活。但是,您需要取消激活并重新激活建议才能使更改生效:
1)定义并激活建议
2)它没有做你想要的,所以改变建议
3)停用它:( ad-deactivate'py-execute-region)
4)重新激活它:( ad-activate'py-execute-region)
步骤4应该选择您在步骤2中所做的更改。或者,您可以在步骤2中更改代码,然后重新评估步骤4中的代码(假设已设置激活标志)。
答案 3 :(得分:1)
我还没有尝试过这个,但我确实为find-file做了类似的事情,在那里我需要在调用other-window之前调用interactive。我实际上并不知道Emacs Lisp,但这可能有效。
(defadvice py-execute-region
(after py-execute-region-other-window activate)
(interactive)
(other-window 1)
)