Та же проблема существовала в режиме csharp до последней недели. То, как я исправил это, было добавить новый матчи в настройке c-basic-matchers-after
для языка csharp. Новый согласовани выглядит следующим образом:
;; Case 2: declaration of enum with or without an explicit base type
,@(when t
`((,(byte-compile
`(lambda (limit)
(let ((parse-sexp-lookup-properties
(cc-eval-when-compile
(boundp 'parse-sexp-lookup-properties))))
(while (re-search-forward
,(concat csharp-enum-decl-re
"[ \t\n\r\f\v]*"
"{")
limit t)
(unless
(progn
(goto-char (match-beginning 0))
(c-skip-comments-and-strings limit))
(progn
(save-match-data
(goto-char (match-end 0))
(c-put-char-property (1- (point))
'c-type
'c-decl-id-start)
(c-forward-syntactic-ws))
(save-match-data
(c-font-lock-declarators limit t nil))
(goto-char (match-end 0))
)
)))
nil))
)))
где csharp-enum-decl-re
определяется как
(defconst csharp-enum-decl-re
(concat
"\\<enum[ \t\n\r\f\v]+"
"\\([[:alpha:]_][[:alnum:]_]*\\)"
"[ \t\n\r\f\v]*"
"\\(:[ \t\n\r\f\v]*"
"\\("
(c-make-keywords-re nil
(list "sbyte" "byte" "short" "ushort" "int" "uint" "long" "ulong"))
"\\)"
"\\)?")
"Regex that captures an enum declaration in C#"
)
Что это установлено текстовое свойство на скобка открыть после перечисления декларации строки. Это свойство text указывает cc-mode на то, чтобы поместить содержимое списка скобок по-разному. Как «список скобок». Установка этого свойства получает brace-list-open
в следующей строке.
Возможно, что-то подобное сработает для вас.
Вы можете настроить помощники для java самостоятельно, с чем-то подобным, и если вы откроете ошибку, вы можете отправить это как рекомендуемое исправление.
В C# перечисления могут быть получены из любого целочисленного типа. так,
public enum MyEnumType : uint
{
ONE = 1,
TWO,
THREE,
}
Я думаю, что в Java нет такой возможности. Если это так, регулярное выражение Java будет намного проще, чем регулярное выражение, которое я использовал для C#.
Огонь! Мне просто пришло в голову, что с более простым синтаксисом Java существует также возможность включить скобки-списки, просто установив ключевое слово enum в нужную константу языка. Если это так, то для вас решение может быть столь же просто, как:
(c-lang-defconst c-inexpr-brace-list-kwds
java '("enum"))
Это не работает для C# из-за его более сложного синтаксиса.
EDIT - нет, что не работает. Это сложнее, чем это.
Ошибка, отправленная через Emacs. Мы посмотрим, что произойдет, я думаю. – Masterofpsi
Да, это также удивительно, что поддержка emacs для Java просто остановилась, что, 2003? – Cheeso
Я работал над поддержкой java, на самом деле - я только что закончил (думаю) все, поэтому его нужно проверить в режиме CC довольно скоро. Это одна из проблем, которые она исправила. –