我使用LaTeX和Emacs,希望能夠將我寫入shell命令的文字傳遞給我。 (作爲例子,我用xargs echo
。)物體邊界和AUCTeX字體鎖定
爲此,我定義一個交互式的elisp功能:
(defun echo()
(interactive)
(let ((bnds (bounds-of-thing-at-point 'word)))
(shell-command-on-region (car bnds) (cdr bnds) "xargs echo")))
此方法適用於大多數的緩衝區,而不是LaTeX的緩衝區,使用AUCTeX字體鎖定。大多數單詞再次正常工作,但不會在單詞邊界處帶有引號的單詞。
小例子:
\documentclass{article}
\usepackage{german}
\begin{document}
test "`Test"'
\end{document}
首先,正如概念證明:如果點是test
在我的LaTeX的緩衝區,我盡我的命令(echo
)我得到test
作爲結果在小緩衝區。 (如預期)
現在的問題:如果點是在Test
而不是我用我的命令xargs抱怨不匹配的雙引號。
原因是shell-command-on-region不會將Test
傳遞給shell命令,而是Test"'
。這可以通過在我的elisp代碼xargs -0
中使用來驗證。然後我得到的結果是在迷你緩衝區:
Test"'
的問題來自AUCTeXs字體鎖定。 (我想用!)如果我設置font-latex-quotes
到nil
,我命令工作正常(它在迷你返回Test
),但當然引述內容將不會被fontified的...
任何想法如何我既可以更改我的elisp代碼以與AUCTeX一起工作,或者定製AUCTeX,以便使引用的內容形式化,但保留正確的單詞邊界?
可否請你澄清什麼可行,什麼不可行?應該用''測試「'和''測試」'引用不同的? – Chris
在這兩種情況下,我希望得到沒有任何引號的單詞。這當然適用於「測試」,因爲我最小的例子中沒有引號。它不適用於「測試」,它在我的最小示例中有引號。 (準確來說,它周圍有德國引號的LaTeX代碼,因此最後只有一個簡單的雙引號。) – newtothis
您的描述不清楚。在具體示例文本的不同位置給出使用命令'echo'的具體示例 - 無論您真的想要通信的情況如何。其次,如果這是sexp的話,那麼在點上的sexp會返回一個字符串。如果你不想讓它返回一個字符串,那麼可以考慮在點上找到這個詞或者你想要的任何東西。或者如果你真的想在點上選擇字符串,然後使用其內容的邊界,不包括'''字符,然後調整返回的邊界。沒有人可以幫助你,直到你說出你需要的。 – Drew