问题标签 [advising-functions]

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 投票
2 回答
3874 浏览

regex - 是否可以更改 emacs 的正则表达式语法?

我喜欢emacs。我喜欢正则表达式。我讨厌 emacs 的正则表达式语法 - 需要转义分组括号和大括号,您转义文字括号,缺少预定义的字符类等。

我可以替换 emacs 的正则表达式引擎,或者调整一些设置,以便当我使用 Query-replace-regexp(或许多其他功能之一)时,我可以使用我在 java/js/perl/ruby/etc 中编写的语法...?

编辑: 主题最初是“如何更改 emacs 的正则表达式引擎”,它不仅会更改转义规则并添加字符类,而且(帖子中未提及)添加对各种常见扩展的支持(?...)。诸如非捕获括号之类的功能:(?:...),仅当/如果-不匹配时才匹配:(?=...)/(?!...) 等。我不相信(尽管很高兴得到纠正)这些是 emacs 当前的正则表达式引擎可能实现的,并且没有任何语法替换可以解决这个问题。

下面的解决方案通过替换为 emacs 理解的语法来解决转义和附加 char 类的原始问题。第二个答案(现已删除)建议建议(添加一个在另一个开头运行的函数)emacs 的正则表达式函数来替换所有正则表达式处理。作者很快审查了他/她自己,意识到这可能会破坏许多现有的 emacs 代码,最终该帖子被删除。

我仍然想将正则表达式引擎更改为支持扩展的引擎,但我同意普遍更改转义行为会造成严重破坏,我不愿意追逐。因此,我正在更改主题以匹配问题并接受回复。

我突然想到要更改引擎以支持通用语法和扩展,建议正则表达式函数将 emacs 内部代码转换为通用语法,建议交互式函数将我的通用语法转换为 emacs 语法(所以它可以是转换回通用)...但我认为即使是 RMS 也会在此之前推荐一个分叉。

0 投票
4 回答
4099 浏览

emacs - 如何强制 Emacs 不在特定窗口中显示缓冲区?

我的 Windows 配置如下所示:

我将右下角的窗口用于特殊显示(如帮助、完成等),但当我调用使用的命令(find-file-other-window等)时,emacs 坚持使用该窗口display-buffer,并调整该窗口的大小。这很烦人......有没有办法让emacs不使用那个窗口?我正在考虑提供建议display-buffer,但它是 c 中的一个函数。对此有什么想法吗?

编辑:

很大程度上基于 Trey 的回答,到目前为止,这对我有用:

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。