问题标签 [defadvice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Emacs 对 python-mode 函数的默认建议
在 python 模式中,有一个名为 py-execute-region 的函数,它将突出显示的代码区域发送到 Python 缓冲区进行评估。评估后,光标位于 Python 缓冲区中,但我希望它保留在脚本缓冲区中,以便继续生成更多代码。我写了一个简单的建议函数:
但这根本没有任何作用。我尝试过其他变体,例如使用“around”而不是“after”;将变量设置为脚本缓冲区名称,然后弹出到缓冲区到该缓冲区和类似的东西。没有成功!我想知道这个机制对某人来说是否显而易见......谢谢!
emacs - 如何在 Emacs 中建议原语
当我遇到一些非常奇怪的行为时,我正试图回答另一个 SO 问题。这是我的小测试用例:
在哪里:
/tmp/foofoo
是我访问并运行的只读文件my-override-toggle-read-only
。/tmp/fooxxfoo
不存在。/tmp
可由我登录的用户写入。
如果我在设置为tester-fn
的缓冲区中运行,那么我会得到意想不到的结果:. 如果我在其他缓冲区(例如scratch)中运行,我会在 minibuffer: 中得到预期的响应。通过调试器跟踪建议表明它正在做我认为它应该做的事情,执行我期望它执行的部分,跳过我期望它执行的部分,返回我期望它的值。但是,通过调试器进行跟踪显示返回的值非常不同(如果变量评估为 nil,则 &如果变量评估为非 nil)。& return 真的让我觉得很奇怪。my-override-mode-on-save
t
XXX: no - YYY: no
tester-fn
XXX: no - YYY: yes
tester-fn
nil
t
nil
nil
nil
nil
我不知道这里发生了什么。任何人都知道为什么我没有得到我期望的结果?
emacs - Emacs/Emacs Lisp:我可以在交互式表单之前插入建议吗?或者如何智能地预设编译命令?
我想做的是智能地为compile
函数的字符串参数预先设置一个缓冲区本地默认值。
现在 compile.el 默认使用“make”作为命令。我可以通过设置来设置compile-command
。我什至可以使该变量成为局部缓冲区。如果我想要相同的静态值,那总是有效的。
但我想compile-command
根据缓冲区的内容、缓冲区的名称、文件包含目录的内容(如果有)和月相来智能地选择。基本上我想控制默认值,然后允许交互式用户覆盖该预设值。
我希望通过事先的建议来做到这一点。但这并没有像我预期的那样工作。
阅读advice.el文件,我明白了
假设一个函数/宏/subr/特殊形式有 N 条前通知,M 条环绕通知和 K 条后通知。假设没有任何建议受到保护,其建议定义将如下所示(主体形式索引对应于该建议类中相应建议的位置):
这对我说的是,当建议函数是交互式的时,“交互式调用”会在调用之前的建议或任何建议之前调用交互式表单。
而且,当我向 中添加建议时compile
,我观察到的行为证实了这一点。在处理交互式表单后调用建议。在我的建议有机会猜测它应该是什么并预先设置之前,交互式表单会建议用于编译的字符串。
所以...
- 如何让我的代码在交互式表单之前运行?可以建议吗?如果不是建议,还有别的吗?或者
- 如何
compile-command
为任何缓冲区动态预设?
想法赞赏。
emacs - 如何在 emacs 中设置两个并行缓冲区以在一个中编辑 Python 文件并在另一个中在 IPython shell 中执行?
我正在尝试ipython.el
在 emacs23 中进行设置。我已经成功安装了它(python-mode.el
在我load-path
的 to supplantpython.el
预先安装了 emacs 之后)。我什至可以让它通过M-x py-shell
等运行。
界面似乎设置得很糟糕,我想知道我是否做错了,或者我是否需要对其进行自定义以使其按我喜欢的方式工作。
简而言之,我想要的工作流程:
- 在一个或多个缓冲区中,编辑 Python 代码
- 当我进入
C-c C-c
该缓冲区时,要么在打开的 IPython shell 缓冲区(如果有)中执行该缓冲区中的 Python 代码,要么打开另一个缓冲区来执行此操作。
但现在发生的是:
- IPython shell 在一个缓冲区中,Python 文件在另一个缓冲区中,如果我点击
C-c C-c
Python 文件缓冲区,文件缓冲区将切换到 IPython 缓冲区(这意味着我现在有两个重复的 iPython 缓冲区)并执行文件。 - 这很烦人。
我对 elisp 很陌生,但我的理解defadvice
是,我可以建议python-execute-buffer
注意现有的文件缓冲区,运行python-execute-buffer
,然后切换回原始文件缓冲区作为解决方法。
这似乎很愚蠢。任何有关更好方法来实现此目的的建议将不胜感激!
如果重要的话:我在 OS X 10.6.8 上运行 Emacs 24.0.50 的 IPython 0.10.1。
提前致谢!
emacs - 我如何建议emacs中的py-execute-buffer在函数之前运行py-shell?
我想编辑一个缓冲区或文件,点击C-c C-c
并将文件发送到 IPython 会话。如果我在运行M-x py-shell
之前先运行,我现在可以py-execute-buffer
完成此操作C-c C-c
。但是,如果我尝试通过
我收到一个错误:
IPython 似乎看不到创建的临时文件?如果我现在切换回我的 Python 文件并重新运行py-execute-buffer
,一切都很好。
任何想法将不胜感激-谢谢!
emacs - 当我从桌面会话恢复时发出警告。Emacs
昨天我从 EmacsWiki 找到了桌面模式,然后我为我的 Emacs 24 配置了它:
但是当我重新启动 Emacs 时,我在*Compile-Log*缓冲区中收到警告:
其他人在使用桌面时遇到此警告?或者,还有比桌面模式更好的附加组件吗?
emacs - 如何在 Emacs 中找到建议功能的默认建议?
当我查看 的文档时beginning-of-defun
,有一条注释:
但是我找不到调用 defadvice 的 .el 文件。有没有办法导航到定义建议的原始文件?
编辑:虽然我标记了正确的 Phils 对 .el 文件进行 rgrep 的建议,但我仍然希望有一些更优雅的方法可以追溯到 defadvice。
emacs - Emacs Lisp,如何映射宏并评估其中一个参数
Bob Glickstein 在“编写 GNU Emacs 扩展”第 3 章中描述了一种建议滚动功能的方法。(他建议让它们可逆,所以我们必须在滚动之前保存状态。)
例如,对于向上滚动命令,此建议是这样完成的
好。我当然必须对所有滚动命令执行此操作。所以我想对它们进行排序,并想一起为它们提供建议。
(我使用一个向量来保存 5 个引号。)
但现在我被困住了。
将建议(不存在的)函数 fun-name 四次,因为 defadvice 是一个宏,并且不评估 fun-name。
有什么办法吗?
(我正在使用 Emacs 24)
emacs - emacs:如何使用标记环?
当我执行 aC-u C-SPC
时,emacs 会将我带到“以前的位置”。随后C-u C-SPC
的压力会回到以前的位置。这太棒了,我经常使用它。
但是有些事情总是困扰着我:标记环中唯一缺少的标记是where-I-invoked-this-in-the-1st-place!这就像在你身后留下面包屑,然后去“哎呀,我可能会迷路,我回去检查一下”,然后在你现在所在的地方不留下面包屑!
我尝试为该功能提供建议,但我无法终生以编程方式模拟C-SPC C-SPC
.
- 我怎样才能“看到”(回声、消息、跟踪等)组合键的作用,例如“Ch k”,但对于重复的键序列,例如
C-SPC C-SPC
?这是手册对后者的描述(强调我的)
C-SPC 运行命令 set-mark-command,它是 `simple.el' 中的交互式编译 Lisp 函数。
它绑定到 C-@,C-SPC。
(set-mark-command ARG)
在点所在的位置设置标记,或跳转到标记处。设置标记也会改变区域,即点和标记之间的文本;这是 Emacs 中最接近某些编辑器所称的“选择”的等价物。
在没有前缀参数的情况下,将标记设置为点,并将旧标记位置推到本地标记环上。如果前一个标记设置在另一个缓冲区中,也将旧标记推到全局标记环上。
但是当我尝试使用它(非交互式)“没有前缀参数”以“在点设置标记”时,我得到一个调试器错误“错误的参数数量”..?(我意识到参数和前缀参数之间的区别)。
即使有一个哲学的,非实用的答案,我也可以。我只是想了解这里的想法。