问题标签 [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.
regex - 是否可以更改 emacs 的正则表达式语法?
我喜欢emacs。我喜欢正则表达式。我讨厌 emacs 的正则表达式语法 - 需要转义分组括号和大括号,您不转义文字括号,缺少预定义的字符类等。
我可以替换 emacs 的正则表达式引擎,或者调整一些设置,以便当我使用 Query-replace-regexp(或许多其他功能之一)时,我可以使用我在 java/js/perl/ruby/etc 中编写的语法...?
编辑: 主题最初是“如何更改 emacs 的正则表达式引擎”,它不仅会更改转义规则并添加字符类,而且(帖子中未提及)添加对各种常见扩展的支持(?...)。诸如非捕获括号之类的功能:(?:...),仅当/如果-不匹配时才匹配:(?=...)/(?!...) 等。我不相信(尽管很高兴得到纠正)这些是 emacs 当前的正则表达式引擎可能实现的,并且没有任何语法替换可以解决这个问题。
下面的解决方案通过替换为 emacs 理解的语法来解决转义和附加 char 类的原始问题。第二个答案(现已删除)建议建议(添加一个在另一个开头运行的函数)emacs 的正则表达式函数来替换所有正则表达式处理。作者很快审查了他/她自己,意识到这可能会破坏许多现有的 emacs 代码,最终该帖子被删除。
我仍然想将正则表达式引擎更改为支持扩展的引擎,但我同意普遍更改转义行为会造成严重破坏,我不愿意追逐。因此,我正在更改主题以匹配问题并接受回复。
我突然想到要更改引擎以支持通用语法和扩展,建议正则表达式函数将 emacs 内部代码转换为通用语法,建议交互式函数将我的通用语法转换为 emacs 语法(所以它可以是转换回通用)...但我认为即使是 RMS 也会在此之前推荐一个分叉。
emacs - 如何强制 Emacs 不在特定窗口中显示缓冲区?
我的 Windows 配置如下所示:
我将右下角的窗口用于特殊显示(如帮助、完成等),但当我调用使用的命令(find-file-other-window
等)时,emacs 坚持使用该窗口display-buffer
,并调整该窗口的大小。这很烦人......有没有办法让emacs不使用那个窗口?我正在考虑提供建议display-buffer
,但它是 c 中的一个函数。对此有什么想法吗?
编辑:
很大程度上基于 Trey 的回答,到目前为止,这对我有用:
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。