2014-01-28 4 views
0

Я использую LaTeX с Emacs и хочу иметь возможность передавать слова того, что я пишу, в команду оболочки. (В качестве примера я использую 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"))) 

Это хорошо работает для большинства буферов, но не для латексных буферов, используя замок шрифта AucTeX. Большинство слов снова работают нормально, но не слова с кавычками на границе их слов.

Минимальный пример:

\documentclass{article} 
\usepackage{german} 

\begin{document} 
test "`Test"' 
\end{document} 

Во-первых, так же, как доказательство концепции: Если точка находится на test в моем LaTeX буфере, и я стараюсь мою команду (echo) я получаю test как результат в минибуфере. (Как и ожидалось.)

Теперь проблема: если точка указана на Test, и я использую свою команду, xargs жалуется на несогласованные двойные кавычки.

Причина этого в том, что командная оболочка оболочки не передает Test команде оболочки, а Test"'. Это я могу проверить, используя код elisp xargs -0. Затем я получаю результат в минибуфере:

Test"' 

Проблема возникает из-за блокировки шрифта AUCTeXs. (Что я хочу использовать!) Если я устанавливаю font-latex-quotes к nil, моя команда отлично работает (она возвращает Test в минибуфере), но, конечно, цитируемый содержание не будет fontified ...

Любые идеи, как я мог либо изменить мой код elisp для работы с AUCTeX или настроить AUCTeX так, чтобы он выделял цитируемый контент, но сохранял правильные границы слов?

+0

Не могли бы вы уточнить, что работает, а что нет? Должны ли '' test "и' "Test" 'цитироваться по-другому? – Chris

+0

В обоих случаях я хотел бы получить слово без кавычек. Это работает, конечно, для «теста», поскольку в моем минимальном примере нет кавычек. Это не работает для «Тест», который имеет кавычки вокруг него в моем минимальном примере. (Чтобы быть точным, у него есть код LaTeX для немецких кавычек вокруг него, и по этой причине простая двойная кавычка в конце.) – newtothis

+0

Ваше описание нечеткое. Приведите конкретные примеры использования вашей команды 'echo' на разных позициях конкретного текста примера - в каких случаях вы действительно пытаетесь общаться. Во-вторых, sexp в точке возвращает строку, если это sexp в точке. Если вы не хотите, чтобы он возвращал строку, тогда подумайте о поиске слова в точке или о том, что вы действительно хотите. Или, если вы действительно хотите поднять строку в точке, а затем использовать границы своего содержимого, не считая символов '' ', а затем отрегулировать возвращаемые границы. Никто не сможет вам помочь, пока вы не скажете, что вам нужно. – Drew

ответ

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*")))) 
+0

Я уже пробовал' 'слово'.Но это не решает проблему. Но я перейду к нему в своем вопросе, потому что это лучший код. – newtothis

+0

@newtothis Если ошибка появляется вместе с «word», это означает, что '' 'получил текстовый синтаксис. Поэтому измените это. –

+0

Но как? Этот '' '' получил синтаксис слова из блокировки шрифта AUCTeX, я думаю. Я не знаю, кому это мешать. (И тем не менее процитировал контент, который был зашифрован.) – newtothis

Смежные вопросы