有关python模式功能的Emacs defadvice(Emacs defadvice on py

2019-08-05 16:26发布

在python模式,有一个称为PY-执行区域功能,它发送的代码高亮区域到Python的缓冲器进行评估。 评估后,光标是在Python缓冲区,但我宁愿它留在脚本缓冲区,所以我可以继续生产更多的代码。 我写了一个简单的通知功能:

(defadvice py-execute-region                                                
   (after py-execute-region-other-window activate)                          
   """ After execution, return cursor to script buffer """                  
   (other-window 1)                                                         
) 

但是,这并不在做任何事情都。 我试过其他变体如使用“围绕”而不是“后”; 一个变量设置为脚本缓冲区名称,然后弹出到缓冲区该缓冲区之类的东西。 没有成功! 我不知道如果这个机制是显而易见的人...谢谢!

Answer 1:

在这种情况下,解决问题的方法是

(custom-set-variables
 '(py-shell-switch-buffers-on-execute nil))


Answer 2:

各地使用,建议换行功能调用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的缓冲区,它仍然会在命令完成后隐藏。 为了弥补这一点,你可以添加另一个忠告在最后调用切换到缓冲区其它窗口:

(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]"))

此外,请确保您不使用"""triple quotes"""在elisp的。 我不认为他们的工作。



Answer 3:

你有没有什么对我的作品的罚款。 它应该自动激活,所以一个独立的激活应该是不必要的。 但是,你需要去积极并重新激活建议更改生效:

1)定义和激活建议

2)它不会做你想要的东西,所以更改建议

3)停用它:(广告停用“PY-执行区域)

4)重新激活它:(广告激活“PY-执行区域)

步骤4应该拿起在步骤2中替换地所作的更改,则可以在步骤2中改变代码,然后只重新评估在步骤4中的代码(假设激活标志被设置)。



Answer 4:

我还没有真正尝试了这一点,但我做了查找文件类似的东西,并在那里我需要打电话叫其他窗口前的互动。 其实,我的Emacs Lisp没有真正的想法,但是这可能工作。

(defadvice py-execute-region                                                
   (after py-execute-region-other-window activate)                          
   (interactive)
   (other-window 1)                                                         
)


文章来源: Emacs defadvice on python-mode function