【问题标题】:What does ad-activate do?广告激活有什么作用?
【发布时间】:2012-06-10 21:10:55
【问题描述】:

answer 中,我注意到:

;; Align with spaces only
(defadvice align-regexp (around align-regexp-with-spaces)
  "Never use tabs for alignment."
  (let ((indent-tabs-mode nil))
    ad-do-it))
(ad-activate 'align-regexp)

这个sounds很有前途,但是……它有什么作用?!

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

建议使用此功能。

围绕建议`align-regexp-with-spaces':
切勿使用制表符进行对齐。

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

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

【问题讨论】:

    标签: emacs elisp advising-functions defadvice


    【解决方案1】:

    在问这个问题时,我意识到我只是不明白advising functions 的概念。

    我很清楚:

    • align-regexp-with-spaces 不是函数也不是变量,而只是一个名称(用于启用/禁用单个建议)
    • 自从(ad-activate 'align-regexp)align-regexp 只是按照我的“建议”去做:不要使用标签

    所以:ad-activate 激活了建议,有效地改变了原始函数的行为。太好了!

    我不明白为什么这比在align-regexp 周围定义一个函数“更好”。但话说回来,我对 Emacs Lisp 了解不多。

    恐怕额外的文档行只会增加混乱......

    【讨论】:

    • 您应该能够编辑您的问题并将此信息添加到您的问题中(而不是证明“答案” - 它实际上不是)。
    • @Trey 我没有回答问题吗?答案解释了ad-activate 的作用。或者也许它没有。让我们添加...
    • 您可以围绕 align-regexp 定义一个函数,然后使用该函数。但是,任何直接使用 align-regexp 的 other 函数仍将使用旧版本。当您建议一个函数时,您实际上是 替换 它,因此任何其他使用 align-regexp 的代码现在都将使用您修改后的版本。最后一点:建议非常强大且非常危险,请谨慎使用(有时很难预测您的建议在其他上下文中被其他代码使用时会如何运作)。
    • 我个人喜欢显式调用ad-activate 只是因为将其更改为相应的ad-deactivate 来评估它很方便(或在ad-disable-* 调用后重新评估) .
    • Michel de Ruiter:更准确地说,对于指定的函数,ad-activate 激活 all 当前启用的通知(不一定只是在前面的表达式中定义的一个),并将还停用任何以前处于活动状态但已被禁用的建议(请参阅gnu.org/software/emacs/manual/html_node/elisp/…)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多