Emacs 点上事物的边界和AUCTeX字体锁定

Emacs 点上事物的边界和AUCTeX字体锁定,emacs,elisp,auctex,font-lock,Emacs,Elisp,Auctex,Font Lock,我将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"))) 这适用于大多数缓冲区,但不适用于使用AU

我将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缓冲区中的point处于启用状态,并且我尝试我的命令(
echo
),我将在minibuffer中得到
test
。(正如所料。)

现在的问题是:如果point是on
Test
,而我使用命令xargs,则会抱怨双引号不匹配

这是因为区域上的shell命令没有将
Test
传递给shell命令,而是将
Test“
传递给shell命令。我可以在我的elisp代码
xargs-0
中使用来验证这一点。然后,我在微缓冲区中得到结果:

Test"' 测试“' 问题来自Auctex字体锁定。(我想使用!)如果我将
font-latex quotes
设置为
nil
,我的命令工作正常(它在minibuffer中返回
Test
),但是引用的内容当然不会被格式化

有什么想法可以改变我的elisp代码,使其也能与AUCTeX一起使用,或者定制AUCTeX,使其对引用的内容进行方化,但保留正确的单词边界

(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*")))
写下您的评论,使用函数
修改语法条目
临时更改语法表,或使用另一个类似的方法:

(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*"))))

你能澄清一下什么有效,什么无效吗?
“test”
“test”
是否应该以不同的方式引用?在这两种情况下,我都希望得到没有任何引号的单词。这当然适用于“test”,因为在我的示例中,它周围没有引号。它不适用于“Test”,在我的示例中,“Test”周围有引号。(准确地说,它周围有德国引号的LaTeX代码,因此在它的末尾有一个简单的双引号。)您的描述不清楚。给出在具体示例文本的不同位置使用命令
echo
的具体示例——不管您真正想要沟通的是什么情况。第二,如果sexp at point是sexp,则sexp at point返回一个字符串。如果你不希望它返回一个字符串,那么考虑在你想要的点或任何东西上寻找这个词。或者,如果您真的想在点处提取字符串,然后使用其内容的边界,不包括
chars,然后调整返回的边界。在你说出你需要什么之前,没有人能帮你。我希望问题现在更清楚了。在不知道实际问题的情况下——你是否尝试过在调用点处事物的
边界时,将
font-latex quotes
临时设置为
nil
?(你可以用一个外部的
let
)我以前试过
'word
。但这并不能解决问题。但是我会在我的问题中改为它,因为它是更好的代码。@newt如果错误出现在“word也,它的意思是,`”得到了word语法,那么就改一下。但是怎么改呢?我想,
得到的word语法来自AUCTeX字体锁定。我不知道该由谁来干涉。(尽管如此,我还是引用了方化的内容。)