我将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
),我会在迷你缓冲区中得到test
。 (正如预期的那样。)
现在出现问题:如果点在Test
上,我使用我的命令xargs抱怨无法匹配的双引号。
原因是shell-command-on-region不会将Test
传递给shell命令,而是Test"'
。我可以使用我的elisp代码xargs -0
进行验证。然后我得到迷你缓冲区的结果:
Test"'
问题来自AUCTeXs字体锁定。 (我想使用它!)如果我将font-latex-quotes
设置为nil
,我的命令工作正常(它会在迷你缓冲区中返回Test
),但当然引用的内容不会被证实。 ..
任何想法如何改变我的elisp代码以使用AUCTeX,或者自定义AUCTeX以便它能够引用引用内容但保留正确的单词边界?
答案 0 :(得分:0)
(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*")))
WRT您的评论,暂时使用函数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*"))))