Emacs 点上事物的边界和AUCTeX字体锁定
我将LaTeX与Emacs一起使用,希望能够将我编写的内容传递给shell命令。(例如,我使用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
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是onTest
,而我使用命令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字体锁定。我不知道该由谁来干涉。(尽管如此,我还是引用了方化的内容。)