emacs: несмежная буферная область - PullRequest
1 голос
/ 20 сентября 2009

Я хочу, чтобы синтаксические функции движения Emacs игнорировали определенные области буфера; т.е. правильно анализировать несмежные области. Это может быть сделано эффективно, если вы можете определить регион, который нужно игнорировать, как комментарий и установить для переменной parse-sexp-ignore-comments значение true.

Вот проблема. Основной режим имеет комментарии, начинающиеся с '!' и заканчивая символом новой строки ('\ n') и областью буфера, которую я хочу игнорировать, так как комментарий начинается с "% {" и заканчивается "}%". Тем не менее, я не вижу способа определить их как комментарии. Механизм обработки многосимвольных разделителей комментариев в таблице синтаксиса слишком специфичен для C, чтобы использовать его здесь. У кого-нибудь есть другие предложения, например, свойства текста?

1 Ответ

1 голос
/ 20 сентября 2009

Да, вы можете изменить синтаксическую таблицу аналогично тому, что делает C. Вы можете прочитать о синтаксических таблицах здесь . По сути, вам нужно определить % как пунктуацию и символ комментария, то же самое с { и }.

Описание символа / в C:

        character: / (47, #o57, #x2f)
preferred charset: ascii (ASCII (ISO646 IRV))
       code point: 0x2F
           syntax: . 124b   which means: punctuation,
      is the first character of a comment-start sequence,
      is the second character of a comment-start sequence,
      is the second character of a comment-end sequence (comment style b)

Примечание: чтобы получить описание персонажа, введите M-x describe-char, и он расскажет вам все о персонаже после точки.

Аналогично, у символа * есть описание (на С):

        character: * (42, #o52, #x2a)
preferred charset: ascii (ASCII (ISO646 IRV))
       code point: 0x2A
           syntax: . 23 which means: punctuation,
      is the second character of a comment-start sequence,
      is the first character of a comment-end sequence

По сути, вам нужно настроить последовательности комментариев-начала и комментариев-конца, как описано в этой части информационных страниц .

Я думаю, вы захотите изменить синтаксические записи примерно так:

(modify-syntax-entry ?% ".14")
(modify-syntax-entry ?{ "(}2")
(modify-syntax-entry ?} "){3")

Хотя, я думаю, что сохранение { и } в качестве согласованной пары скобок может привести к путанице ...

...