Questions tagged «advice»

4
Emacs 24.4中新建议系统的实际好处
Emacs 24.4带有新的建议系统。该NEWS文件说: **新包装nadvice.el提供更轻巧的建议设施。它分层为: *** add-function/ remove-function,可用于在任何函数承载的地方(例如过程过滤器或<foo>-function挂钩)添加/删除代码。 *** advice-add/ advice-remove添加/删除有关命名函数的建议,就像这样defadvice做。 问:此新软件包有哪些实际好处和启示? 我对解决以下问题的答案特别感兴趣: 如果我仅使用建议自定义Emacs(而不是编写附加软件包),是否需要切换到新系统?它会在某个时候取代旧系统吗? 什么究竟能做些什么与新的系统,我不能做到defadvice? 能够“在任何承载功能的地方添加/删除代码”的意义是什么?
53 emacs24.4  advice 

1
如何使用nadvice?
我的配置充满了建议,而且我不断听到有关新的闪亮简约nadvice.el包的信息。 我已经搜索了手册,并且阅读了源代码,但我会公开承认:我仍然不知道如何实际使用它。 在座的任何人都可以向我指出指南,或告诉我如何开始移植旧式建议吗?

1
Emacs束手无策的建议
我想在一段代码中临时重写一个函数。 例如,以下内容: (defun nadvice/load-quiet (args) (cl-destructuring-bind (file &optional noerror nomessage nosuffix must-suffix) args (list file noerror t nosuffix must-suffix))) (defun nadvice/idle-require-quiet (old-fun &rest args) (advice-add 'load :filter-args #'nadvice/load-quiet) (apply old-fun args) (advice-remove #'load #'nadvice/load-quiet)) (advice-add 'idle-require-load-next :around #'nadvice/idle-require-quiet) 什么不起作用: 这个。如果我可以避免手动启用和禁用建议,并相信Emacs的单线程性质来处理事务,那将更加干净。 cl-letf不会让我引用原始函数,因此我无法实现:filter-args通常会执行的操作。 cl-flet 无法覆盖其他功能中的功能。 noflet是一个外部软件包,我想避免。(做的比我需要的要多得多)

3
cc模式的保存前挂钩
我想自定义cc-mode以在保存之前执行功能。一种解决方案是修改键cc-mode映射以绑定C-x C-s到执行我需要的工作的函数,然后将其保存。 我的问题是我是否可以为此定制钩子?该CC钩文档不提一个before-save-hook专门为cc-mode。应该如何通过钩子完成? 另外,我该怎么做defadvice呢?通过阅读手册,我唯一能看到的方法是在保存之前启用建议,然后在工作完成后将其禁用。这听起来很麻烦。使用advices 的惯用方式是什么?
13 hooks  cc-mode  advice 

2
如何在nadvice.el中处理参数列表?
在回答有关新建议系统的另一个问题之后: 在旧式中advice.el,可以操纵建议函数的参数列表的各个成员,而不必对未操纵的那些成员做出任何断言。例如,以下建议: (defadvice ansi-term (around prompt-for-name last) (let ((name (read-from-minibuffer "Tag: "))) (and (not (string= name "")) (ad-set-arg 1 (concat "Term: " name))) ad-do-it)) 允许为ansi-term调用提供(可选)缓冲区名称参数,同时ansi-term仍会通过根据其自身的交互形式进行提示来获取其第一个参数。 (供以后参考,ansi-term的签名为(PROGRAM &optional BUFFER-NAME),其交互形式提示PROGRAM带有多个可能的默认值,但对BUFFER-NAME无效。) 我不确定是否可以在中进行nadvice.el。如果是这样,我不确定该怎么做。我发现了几种替换建议函数的参数列表的方法。 例如,来自* info *(elisp)咨询组合: `:filter-args' Call FUNCTION first and use the result (which should be a list) as the new arguments to …
12 advice  arguments 

3
如何删除未命名的建议?
我很乐意向函数添加一些建议: (advice-add 'executable-find :around (lambda (f &rest args) (apply g args))) ;;; ^ 哎呀,错字了 修复它并再次评估以上代码。但是,现在我同时收到有关该功能的“更正”和“破损”建议。 我该如何摆脱这些?鉴于advice-remove需要功能对象或周围建议(此处为空)? (显然,我可以退出并重新启动,但是还有另一种方法,对吗?)
12 advice 

3
如何编写透明的“传递”函数包装器?
我所说的“透明的“传递”函数包装器”是一个函数,我们称它为“函数”,它wrapper通过将其所有参数传递给其他函数(称为它)来返回结果wrappee。 在Emacs Lisp中如何完成? 注意:理想的wrapper功能与功能的签名无关wrappee。即它不知道的参数的数量,位置,名称等wrappee;它只是将其所有参数传递给wrappee,就像wrappee最初调用的那样。(不过,您无需弄乱调用堆栈,即可将调用替换wrapper为wrappee。) 我对我的问题发表了部分答案: (defun wrapper (&rest args) (apply 'wrappee args)) 仅当工作wrappee是没有互动。显然,交互函数获取其参数的方式代表了与该(&rest args)咒语所涵盖内容不同的“渠道” 。我还是需要的,因此,是一个equally- wrappee的的-agnostic对应(&rest args)于其中的情况下签名wrappee是一个互动的功能。 (此问题是由先前问题中描述的问题引起的。) 如果需要进一步澄清我要的内容,下面是几个示例,显示了我所追求的Python和JavaScript等效项。 在Python中,实现这种包装器的几种标准方法如下所示: def wrapper(*args, **kwargs): return wrappee(*args, **kwargs) # or wrapper = lambda *args, **kwargs: wrappee(*args, **kwargs) (此处*args代表“所有位置参数”,**kwargs代表“所有关键字参数”。) 相当于JavaScript的是这样的: function wrapper () { return wrappee.apply(this, arguments); } // or wrapper = function …
10 advice  arguments 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.