问题标签 [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.

0 投票
4 回答
1663 浏览

python - Emacs 对 python-mode 函数的默认建议

在 python 模式中,有一个名为 py-execute-region 的函数,它将突出显示的代码区域发送到 Python 缓冲区进行评估。评估后,光标位于 Python 缓冲区中,但我希望它保留在脚本缓冲区中,以便继续生成更多代码。我写了一个简单的建议函数:

但这根本没有任何作用。我尝试过其他变体,例如使用“around”而不是“after”;将变量设置为脚本缓冲区名称,然后弹出到缓冲区到该缓冲区和类似的东西。没有成功!我想知道这个机制对某人来说是否显而易见......谢谢!

0 投票
1 回答
446 浏览

emacs - 如何在 Emacs 中建议原语

当我遇到一些非常奇怪的行为时,我正试图回答另一个 SO 问题。这是我的小测试用例:

在哪里:

  • /tmp/foofoo是我访问并运行的只读文件my-override-toggle-read-only
  • /tmp/fooxxfoo不存在。
  • /tmp可由我登录的用户写入。

如果我在设置为tester-fn的缓冲区中运行,那么我会得到意想不到的结果:. 如果我在其他缓冲区(例如scratch)中运行,我会在 minibuffer: 中得到预期的响应。通过调试器跟踪建议表明它正在做我认为它应该做的事情,执行我期望它执行的部分,跳过我期望它执行的部分,返回我期望它的值。但是,通过调试器进行跟踪显示返回的值非常不同(如果变量评估为 nil,则 &如果变量评估为非 nil)。& return 真的让我觉得很奇怪。my-override-mode-on-savetXXX: no - YYY: notester-fnXXX: no - YYY: yestester-fnniltnilnilnilnil

我不知道这里发生了什么。任何人都知道为什么我没有得到我期望的结果?

0 投票
5 回答
1002 浏览

emacs - Emacs/Emacs Lisp:我可以在交互式表单之前插入建议吗?或者如何智能地预设编译命令?

我想做的是智能地为compile函数的字符串参数预先设置一个缓冲区本地默认值。

现在 compile.el 默认使用“make”作为命令。我可以通过设置来设置compile-command。我什至可以使该变量成为局部缓冲区。如果我想要相同的静态值,那总是有效的。

但我想compile-command根据缓冲区的内容、缓冲区的名称、文件包含目录的内容(如果有)和月相来智能地选择。基本上我想控制默认值,然后允许交互式用户覆盖该预设值。

我希望通过事先的建议来做到这一点。但这并没有像我预期的那样工作。

阅读advice.el文件,我明白了

假设一个函数/宏/subr/特殊形式有 N 条前通知,M 条环绕通知和 K 条后通知。假设没有任何建议受到保护,其建议定义将如下所示(主体形式索引对应于该建议类中相应建议的位置):

这对我说的是,当建议函数是交互式的时,“交互式调用”会在调用之前的建议或任何建议之前调用交互式表单。

而且,当我向 中添加建议时compile,我观察到的行为证实了这一点。在处理交互式表单调用建议。在我的建议有机会猜测它应该是什么并预先设置之前,交互式表单会建议用于编译的字符串。

所以...

  • 如何让我的代码在交互式表单之前运行?可以建议吗?如果不是建议,还有别的吗?或者
  • 如何compile-command为任何缓冲区动态预设?

想法赞赏。

0 投票
1 回答
457 浏览

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-cPython 文件缓冲区,文件缓冲区将切换到 IPython 缓冲区(这意味着我现在有两个重复的 iPython 缓冲区)并执行文件。
  • 这很烦人。

我对 elisp 很陌生,但我的理解defadvice是,我可以建议python-execute-buffer注意现有的文件缓冲区,运行python-execute-buffer,然后切换回原始文件缓冲区作为解决方法。

这似乎很愚蠢。任何有关更好方法来实现此目的的建议将不胜感激!

如果重要的话:我在 OS X 10.6.8 上运行 Emacs 24.0.50 的 IPython 0.10.1。

提前致谢!

0 投票
2 回答
647 浏览

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,一切都很好。

任何想法将不胜感激-谢谢!

0 投票
1 回答
360 浏览

emacs - 当我从桌面会话恢复时发出警告。Emacs

昨天我从 EmacsWiki 找到了桌面模式,然后我为我的 Emacs 24 配置了它:

但是当我重新启动 Emacs 时,我在*Compile-Log*缓冲区中收到警告:

其他人在使用桌面时遇到此警告?或者,还有比桌面模式更好的附加组件吗?

0 投票
1 回答
875 浏览

emacs - 广告激活有什么作用?

回答中,我注意到:

听起来很有希望,但是......它有什么作用?!

我尝试eval-region了代码块。但对我来说,它所做的只是在align-regexp文档中添加以下内容:

建议使用此功能。

around-advice `align-regexp-with-spaces':
永远不要使用制表符进行对齐。

我似乎无法实际使用align-regexp-with-spaces,如果这应该是效果......我错过了什么?

我使用了 GNU Emacs 版本 24.0.96.1 (i386-mingw-nt6.1.7601)。

0 投票
1 回答
383 浏览

emacs - 如何在 Emacs 中找到建议功能的默认建议?

当我查看 的文档时beginning-of-defun,有一条注释:

但是我找不到调用 defadvice 的 .el 文件。有没有办法导航到定义建议的原始文件?

编辑:虽然我标记了正确的 Phils 对 .el 文件进行 rgrep 的建议,但我仍然希望有一些更优雅的方法可以追溯到 defadvice。

0 投票
1 回答
908 浏览

emacs - Emacs Lisp,如何映射宏并评估其中一个参数

Bob Glickstein 在“编写 GNU Emacs 扩展”第 3 章中描述了一种建议滚动功能的方法。(他建议让它们可逆,所以我们必须在滚动之前保存状态。)

例如,对于向上滚动命令,此建议是这样完成的

好。我当然必须对所有滚动命令执行此操作。所以我想对它们进行排序,并想一起为它们提供建议。

(我使用一个向量来保存 5 个引号。)

但现在我被困住了。

将建议(不存在的)函数 fun-name 四次,因为 defadvice 是一个宏,并且不评估 fun-name。

有什么办法吗?

(我正在使用 Emacs 24)

0 投票
4 回答
1495 浏览

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 中最接近某些编辑器所称的“选择”的等价物。

在没有前缀参数的情况下,将标记设置为点,并将旧标记位置推到本地标记环上。如果前一个标记设置在另一个缓冲区中,也将旧标记推到全局标记环上。

但是当我尝试使用它(非交互式)“没有前缀参数”以“在点设置标记”时,我得到一个调试器错误“错误的参数数量”..?(我意识到参数和前缀参数之间的区别)。

即使有一个哲学的,非实用的答案,我也可以。我只是想了解这里的想法。