2009-04-16 1 views
4

Я пытаюсь написать новый режим для emacs, используя define-generic-mode. Я нашел несколько руководств, которые показывают, как вы можете добавлять ключевые слова (как строки), которые затем будут выделены. Можно ли дать define-generic-mode регулярное выражение, чтобы затем выделить все, что соответствует этому ключевому слову?Соответствовать регулярному выражению как ключевому слову в define-generic-mode

Я хотел бы иметь режим, в котором все, что соответствует дате в форме 15/01/09, отображается другим шрифтом (желательно подчеркнутым, но я принимаю другой цвет).

Любые идеи?

Робин

ответ

7

Вот пример define-generic-mode, который устанавливает регулярное выражение, чтобы иметь все даты fontified с помощью пользовательского лица с некоторыми атрибутами, выбранных в качестве примеров:

(make-face 'my-date-face) 
(set-face-attribute 'my-date-face nil :underline t) 
(set-face-attribute 'my-date-face nil :family "times") 
(set-face-attribute 'my-date-face nil :slant 'normal) 
(set-face-attribute 'my-date-face nil :height '340) 

(define-generic-mode my-date-mode 
    nil 
    nil 
    '(("\\([0-9]+/[0-9]+/[0-9]+\\)" 
    (1 'my-date-face))) 
    nil 
    nil) 

Ох, и, очевидно, установить режим, M-x my-date-mode. Это можно сделать автоматически с помощью auto-mode-alist (5-й аргумент define-generic-mode).

+0

Спасибо за ответ. Однако я не могу заставить эту работу работать. Я скопировал код, и eval-buffer работает нормально, но тогда правильные биты не выделяются. Любая идея, в чем проблема? – robintw

+1

(Нечетный, мой первый комментарий был утерян). Я только что отредактировал код для правильной работы. Я думал, что проверил предыдущую форму, но по какой-то неизвестной причине она не работает. Этот вариант использует вспомогательное выражение в регулярном выражении (требующее '(1 'my-date-face)'). Я не знаю, почему предыдущий не работал. –

+0

Спасибо, сейчас он отлично работает. :) – robintw

5

, например, с использованием шрифта блокировки надстройки типа ключевых слов для того, чтобы выделить FIXME, TODO и XXX в качестве предупреждения в основных режимах:

(dolist (mode '(c-mode 
    java-mode 
    cperl-mode 
    html-mode-hook 
    css-mode-hook 
    emacs-lisp-mode)) 
      (font-lock-add-keywords mode 
      '(("\\(XXX\\|FIXME\\|TODO\\)" 
      1 font-lock-warning-face prepend)))) 

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

  • Нет связанных вопросов^_^