Emacs cperl - отступ в константном блоке

Я использую Aquamacs 3.0a на основе GNU Emacs 24.3.50.2. cperl-версия - 6.2. Когда я редактирую блок констант Perl, я получаю дополнительные отступы, которые мне не нужны:-

use constant {
    ONE => 1,
        TWO => 2,
        THREE => 3,
    };

То, что я хочу, это:

use constant {
    ONE => 1,
    TWO => 2,
    THREE => 3,
};

Кажется, проблема в том, что добавляется cperl-continue-Statement-offset, потому что мы находимся внутри блока, а в конце предыдущей строки нет точки с запятой.

Есть ли способ сказать cperl, чтобы отступать константные блоки, используя правила "parens"? Я попытался настроить cperl-indent-parens-as-block, но это не помогло. Я не удивлен, думаю, мне нужно искать переменную cperl-indent-constant-block-as-parens:-)

1 ответ

Решение

Небольшое копание в коде говорит о том, что это ошибка в cperl-mode - он должен обрабатывать постоянный блок как анонимный хэш-код - в конце концов, это в основном то, что есть! Вот патч для cperl-block-p, который делает это так. Кто-нибудь хочет одобрить или отклонить это? Мой elisp немного ржавый:-)

$ diff -u cperl-mode.el.orig cperl-mode.el
--- cperl-mode.el.orig  2013-09-27 13:43:56.000000000 +0100
+++ cperl-mode.el   2014-06-30 18:02:30.000000000 +0100
@@ -4828,9 +4828,9 @@
       (and (memq (char-syntax (preceding-char)) '(?w ?_))
       (progn
         (backward-sexp)
-        ;; sub {BLK}, print {BLK} $data, but NOT `bless', `return', `tr'
+        ;; sub {BLK}, print {BLK} $data, but NOT `bless', `constant', `return', `tr'
         (or (and (looking-at "[a-zA-Z0-9_:]+[ \t\n\f]*[{#]") ; Method call syntax
-             (not (looking-at "\\(bless\\|return\\|q[wqrx]?\\|tr\\|[smy]\\)\\>")))
+             (not (looking-at "\\(bless\\|constant\\|return\\|q[wqrx]?\\|tr\\|[smy]\\)\\>")))
         ;; sub bless::foo {}
         (progn
           (cperl-backward-to-noncomment (point-min))
Другие вопросы по тегам