выделить "" в строках для Emacs - PullRequest
2 голосов
/ 01 ноября 2011

Я немного новичок в Emacs, но не совсем уверен, как его найти Я использую цветную тему Солярный свет , низкоконтрастную тему с интеллектуальными акцентами для удобства чтения. В версии vim они выделяют разделители строк (что означает двойные кавычки и одинарные кавычки в некоторых языках) иначе, чем остальная часть строки, чтобы выделить их больше.

В порте emacs темы этого нет, однако я видел довольно странные вещи с механизмом блокировки шрифтов (например, http://www.emacswiki.org/emacs/HexColour),, поэтому я подумал, что это возможно.

Так можно ли выделить строковые разделители? если да, где мне искать дополнительную информацию о том, как это сделать?

EDIT:

пытаясь заставить ответ Джона О. работать. Сначала я попробовал

(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")

(add-hook 'after-change-major-mode-hook 
          (lambda () 
            (font-lock-add-keywords nil '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t)))))

в попытке добавить его в каждый режим (не работает)

Итак, я попытался заменить выражение ловушки на

(font-lock-add-keywords 'emacs-lisp '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t)))

В попытке просто заставить вещи работать, то же самое (не работало)

1 Ответ

4 голосов
/ 01 ноября 2011

Вы можете использовать font-lock-add-keywords, чтобы выделить разделители строк, выполнив что-то вроде следующего:

(font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t)))

Регулярное выражение "\\s\"\\|\\s|" соответствует одному символу, который должен иметь синтаксический класс "строковая кавычка" (\\s\" part) или "общий разделитель строк" (\\s| part).\s соответствует различным синтаксическим классам символов, о которых вы можете прочитать в руководстве по Elisp под (elisp)Syntax Tables и (elisp)Regexp Backslash.

Немного легче читать, если вы видите его без экранирования строки: \s"\|\s|

0 означает применение грани ко всей совпадающей строке, а t в конце заставляет эту грань переопределять любые грани, которые уже присутствуют в строке (поскольку во многих режимах будет выделеновся строка, включая разделители с font-lock-string-face или подобным)

'foo-mode может быть в кавычках именем любого режима (например, 'emacs-lisp-mode, 'php-mode) или nil, чтобы сделать этот буфер измененияЛокально только в текущем буфере.(В этом случае вам, вероятно, следует поместить это в ловушки режимов тех режимов, к которым вы хотите применить его)

my-string-delimiter-face может быть любым существующим лицом, или вы можете определить его, выполнив что-то вроде следующего:

(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...