【问题标题】:Emacs: Define macro in comment and automatically execute itEmacs:在注释中定义宏并自动执行
【发布时间】:2010-07-09 23:55:46
【问题描述】:

我正在使用 Emacs/AucTeX 来编辑 LaTeX 文件。在我的一些 LaTeX 文件中,我定义了一些“特定于文件”的命令(例如,\todo{...} 在一个文件中,\compute{...} 在另一个文件中,等等),所以我可以跟踪我在我的文件。

Emacs 命令highlight-regexp 在突出所有出现的\todo{...}s 方面做得很好。 \compute{...}s。但是到目前为止,每次打开相应的文件时,我都必须手动执行突出显示。

有没有办法告诉 Emacs/AucTeX 在打开特定文件时调用特定命令?我想将这些命令定义在相应的文件中,这样我就可以很容易地针对不同的文件进行调整(可能包含在局部变量中)。

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "master"
%%%
%%% here I would like to have something like:
%%% execute highlight-regexp for specific arguments
%%%
%%% End: 

【问题讨论】:

  • 你知道 todonotes 包吗?非常好。
  • 感谢您的提示。我去看看。

标签: emacs elisp auctex


【解决方案1】:

试试这个,

%%% Local Variables: 
%%% eval: (font-lock-add-keywords nil '(("\\\\todo" (0 font-lock-warning-face))))
%%% End: 

请参阅Section 57.3.4.1, Specifying File Variables,了解更多详情。

【讨论】:

  • 我必须承认我真的不知道这是如何工作的,但它确实有效。我读了手册,想用eval 来做,但我无法弄清楚它是如何工作的。但是,我读到不应将样式格式提示包含在局部变量中,而应包含在个人 .emacs 中。尽管如此,它回答了这个问题,因此被接受了。
  • 你可以通过使用钩子来避免 lambda, (add-hook 'tex-mode-hook '(lambda () (font-lock-add-keywords nil '(("\\\\ todo" (0 font-lock-warning-face))))))
【解决方案2】:

您可以将钩子与本地变量结合使用。例如,您可以添加一个局部变量dohighlight 或其他东西,然后编写如下函数:

(defun condhighl ()
 (when (boundp 'dohighlight)
 (highlight-regexp "regexp")))

然后将该函数添加为 AucTex 的钩子

(add-hook 'tex-mode-hook 'condhighl)

然后,您可以将本地变量中的 dohighlight 变量添加到要突出显示代码的缓冲区中。

【讨论】:

  • 这是一个不错的、优雅的解决方案。我确实想知道他所描述的内容是否存在次要模式...
  • 解决方案很优雅。但似乎 Emacs 确实首先切换到 tex-mode(即执行所有钩子内容),然后 之后加载文件。这意味着,在关键时间点,变量似乎是void
  • 看起来文本模式压缩了本地变量。我可以使用其他模式挂钩使其在其他模式下工作。
  • 是的,看起来是这样。当我尝试通过describe-variable 获取变量的内容时,出现错误。
【解决方案3】:

使用highlight-regexp 设置突出显示后,hi-lock-write-interactive-patterns (M-s h w) 会将模式作为魔术注释写入缓冲区。

您可能还想在mode: latex 行之后添加mode: hi-lock,以便在打开文件后立即激活突出显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多