7

GNU Emacs 24.3.50.2 に基づいて Aquamacs 3.0a を実行しています。cperl バージョンは 6.2 です。Perl 定数ブロックを編集すると、不要な余分なインデントが表示されます:-

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

私が欲しいのはこれです: -

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

問題は、ブロック内にあり、前の行の末尾にセミコロンがないため、cperl-continued-statement-offset が追加されているようです。

「括弧」ルールを使用して定数ブロックをインデントするようにcperlに指示する方法はありますか? cperl-indent-parens-as-block を微調整してみましたが、役に立ちませんでした。私は驚かない、私は cperl-indent-constant-block-as-parens と呼ばれる変数を探すべきだと思う:-)

4

1 に答える 1

9

コードを少し掘り下げると、これは 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))
于 2014-06-30T17:09:19.553 に答える