【发布时间】: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