【问题标题】:bounds-of-thing-at-point and AUCTeX font lockingbounds-of-thing-at-point 和 AUCTeX 字体锁定
【发布时间】:2014-01-28 22:42:14
【问题描述】:

我将 LaTeX 与 Emacs 一起使用,并希望能够将我写的内容传递给 shell 命令。 (例如我使用xargs echo。)

为此,我定义了一个交互式 elisp 函数:

(defun echo () 
  (interactive)
  (let ((bnds  (bounds-of-thing-at-point 'word)))
    (shell-command-on-region (car bnds) (cdr bnds) "xargs echo")))

这适用于大多数缓冲区,但不适用于使用 AUCTeX 字体锁定的 LaTeX 缓冲区。大多数单词都可以正常工作,但在单词边界处带有引号的单词就不行了。

一个最小的例子:

\documentclass{article}
\usepackage{german}

\begin{document}
test "`Test"'
\end{document}

首先,作为概念证明:如果点在我的 LaTeX 缓冲区中的 test 上,我尝试我的命令 (echo),我会在 minibuffer 中得到 test。 (正如预期的那样。)

现在的问题:如果点在 Test 上,而我使用我的命令 xargs 抱怨双引号不匹配。

原因是 shell-command-on-region 没有将 Test 传递给 shell 命令,而是 Test"'。我可以通过在我的 elisp 代码 xargs -0 中使用来验证这一点。然后我在 minibuffer 中得到结果:

测试"'

问题来自AUCTeXs 字体锁定。 (我想使用它!)如果我将font-latex-quotes 设置为nil,我的命令可以正常工作(它在迷你缓冲区中返回Test),但引用的内容当然不会被字体化...

有什么想法可以更改我的 elisp 代码以使其也与 AUCTeX 一起使用,或者自定义 AUCTeX 以使其字体化引用的内容但保留正确的单词边界?

【问题讨论】:

  • 您能否澄清一下哪些有效,哪些无效? "test""Test" 应该以不同的方式引用吗?
  • 在这两种情况下,我都希望得到不带引号的单词。这当然适用于“测试”,因为在我的最小示例中它周围没有引号。它不适用于“Test”,在我的最小示例中它有引号。 (准确地说,它周围有德语引号的 LaTeX 代码,因此在它的末尾有一个简单的双引号。)
  • 您的描述不清楚。给出在具体示例文本的不同位置使用命令echo 的具体示例 --- 无论您真正尝试交流的情况。其次,如果那是该点的性别,则该点的性别返回一个字符串。如果您不希望它返回字符串,请考虑在点处查找单词或您真正想要的任何单词。或者,如果您真的想在点处提取字符串,然后使用其内容的边界,不包括 " 字符,则调整返回的边界。在您说出您的需要之前,没有人可以帮助您。
  • 我希望这个问题现在更清楚了。
  • 在对实际问题一无所知的情况下——您是否尝试在调用bounds-of-thing-at-point 时将font-latex-quotes 临时设置为nil? (您可以使用外部 let 来做到这一点。)

标签: emacs elisp auctex font-lock


【解决方案1】:
(defun echo ()
  (interactive)
  (let ((bnds (bounds-of-thing-at-point 'word)))
    (shell-command-on-region (car bnds) (cdr bnds) "xargs echo")
    (display-buffer "*Shell Command Output*")))

写下您的评论,使用函数modify-syntax-entry 临时更改语法表或使用另一个这样的:

(defun echo ()
  (interactive)
  (with-syntax-table text-mode-syntax-table
    (let ((bnds (bounds-of-thing-at-point 'word)))
      (shell-command-on-region (car bnds) (cdr bnds) "xargs echo")
      (display-buffer "*Shell Command Output*"))))

【讨论】:

  • 我之前试过'word。但这并不能解决问题。但我会在我的问题中更改它,因为它是更好的代码。
  • @newtothis 如果错误出现 'word also,这意味着 `"' got word-syntax. 所以改变这个。
  • 但是怎么做呢?我猜,"' 的单词语法来自 AUCTeX 字体锁定。我不知道该由谁来干预。 (并且仍然将引用的内容字体化。)
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2016-05-12
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多