Изменить лицо простого текста между двойными кавычками в Emacs - PullRequest
1 голос
/ 23 августа 2011

Я ищу способ выделить или использовать другое лицо цитируемого текста в виде обычного текста.Кажется, что должен быть сложный / расширенный текстовый режим, но я не могу его найти.

Если нет простого решения, дайте мне знать, с чего мне начать писать функцию?

Большое спасибо!

Новичок, у которого естьиспользовал Emacs от 19.xx

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Я не уверен насчет основного режима, который уже делает это, но вы можете сделать его достаточно легко, используя define-производный-режим

(define-derived-mode rich-text-mode text-mode "Rich Text"
  "text mode with string highlighting."

  ;;register keywords
  (setq rich-text-font-lock-keywords
        '(("\"\\(\\(?:.\\|\n\\)*?[^\\]\\)\"" 0 font-lock-string-face)))
  (setq font-lock-defaults rich-text-font-lock-keywords)
  (font-lock-mode 1))

В качестве альтернативы, вы можете добавить хук в текстовый режим:

(defun add-quotes-to-font-lock-keywords ()
  (font-lock-add-keywords nil '(("\"\\(\\(?:.\\|\n\\)*?[^\\]\\)\"" 0 font-lock-string-face))))

(add-hook 'text-mode-hook 'add-quotes-to-font-lock-keywords)

Вообще говоря, хорошим режимом для редактирования любого текста является режим org. Однако по умолчанию он не блокирует шрифты.

0 голосов
/ 24 августа 2011

Для регулярного выражения, я думаю, вы хотите исключить " из содержимого строки, за исключением случаев экранирования. Примерно так --- ", за которым следует либо не ", либо экранированный символ, а затем ":

\"\\([^\"]\\|\\\\\\(.\\|[\n]\\)\\)*\"

Но имейте в виду, что сопоставление цитат "..." печально известно. Я делаю это точно в Info + , но есть несколько узлов Info, где это выделение сбрасывается случайным одиноким \" или ?\" в руководства, которые относятся к таким программным конструкциям.

...