Emacs неправильные скобки - PullRequest
1 голос
/ 28 сентября 2011

Я написал небольшой мажорный режим для языка, подобного C ++ (поэтому я использую таблицу синтаксиса C ++):

(setq tacc-mode-syntax-table c++-mode-syntax-table)

однако, кажется, что символ "'" в комментариях перед связями может испортить соответствие скобок:

Foo {
    Bar {
        //This doesn't work - The } are not matched with the {
    }
} 

Урезанный режим, который все еще вызывает эту проблему:

(setq tacc-mode-syntax-table c++-mode-syntax-table)

(setq tacc-font-lock-keywords c++-font-lock-keywords)

(define-derived-mode tacc-mode nil "Tacc"
  "tacc"
  (set (make-local-variable 'font-lock-defaults)
       '(tacc-font-lock-keywords nil nil nil nil)))

(provide 'tacc)

Насколько я знаю, таблица синтаксиса должна контролировать это - как мне это исправить?

Результаты описанного синтаксиса в буфере:

C-j             > b which means: endcomment (comment style b)
RET             > b which means: endcomment (comment style b)
% .. &          .   which means: punctuation
'               "   which means: string
*               . 23    which means: punctuation,
      is the second character of a comment-start sequence,
      is the first character of a comment-end sequence
+               .   which means: punctuation
-               .   which means: punctuation
/               . 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)
< .. >          .   which means: punctuation
\               \   which means: escape
_               _   which means: symbol
|               .   which means: punctuation
                .   which means: punctuation

The parent syntax table is:
C-@ .. C-h      .   which means: punctuation
TAB .. C-j          which means: whitespace
C-k             .   which means: punctuation
C-l .. RET          which means: whitespace
C-n .. C-_      .   which means: punctuation
SPC                 which means: whitespace
!               .   which means: punctuation
"               "   which means: string
#               .   which means: punctuation
$ .. %          w   which means: word
&               _   which means: symbol
'               .   which means: punctuation
(               ()  which means: open, matches )
)               )(  which means: close, matches (
* .. +          _   which means: symbol
,               .   which means: punctuation
-               _   which means: symbol
.               .   which means: punctuation
/               _   which means: symbol
0 .. 9          w   which means: word
: .. ;          .   which means: punctuation
< .. >          _   which means: symbol
? .. @          .   which means: punctuation
A .. Z          w   which means: word
[               (]  which means: open, matches ]
\               \   which means: escape
]               )[  which means: close, matches [
^               .   which means: punctuation
_               _   which means: symbol
`               .   which means: punctuation
a .. z          w   which means: word
{               (}  which means: open, matches }
|               _   which means: symbol
}               ){  which means: close, matches {
~ .. DEL        .   which means: punctuation
 ..     w   which means: word

1 Ответ

1 голос
/ 28 сентября 2011

parse-sexp погружается в комментарии, если parse-sexp-ignore-comments не соответствует действительности.Режим C ++ устанавливает parse-sexp-ignore-comments в true, как и во многих других режимах программирования.

Кроме того, вам необходимо объявить использование таблицы синтаксиса (define-derived-mode не использует ее неявно).

(define-derived-mode tacc-mode nil "Tacc"
  "tacc"
  :syntax-table tacc-mode-syntax-table
  (set (make-local-variable 'parse-sexp-ignore-comments) t)
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...