Emacs 23.2にはjs-modeが含まれています。これは、名前が変更され、修正されたEspressoです。私はあなたの冗長なコードで「インデント領域」を実行し、これを取得しました:
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash( o
, { start: 0
, limit: 50
}
)
私はそれがあなたが望んでいるものではないと思います。カンマは、おそらくお好みとは異なる方法でオフセットされます。
(それは醜いです。)
編集
OK私はjs-modeを調べましたが、インデントはによって行われているようjs--proper-indentation
です。現在の行を見て、インデントする方法を決定しようとします。
さまざまな構文パターンについて、テストする一連の条件があります。カンマで始まる行をチェックすると、次の結果が得られます。
var o = { foo : 'bar'
, baz : 'foo'
}
, p
, q = new Squash( o
, { start: 0
, limit: 50
}
)
それはあなたが望むものだと思いますが、それでも私には完全に壊れているように見えます。とにかく、これは私がそれをした方法です。
この条件をリストの一番上に挿入しますjs--proper-indentation
:
(defun js--proper-indentation (parse-status)
"Return the proper indentation for the current line."
(save-excursion
(back-to-indentation)
(cond
((looking-at ",")
(let ((spos
(save-excursion
(while (looking-back "}[\t\n ]*")
(backward-sexp)
(if (looking-back ",[\t\n ]*")
(re-search-backward ",[\t\n ]*")))
(cond
((looking-back "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*")
(re-search-backward "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*" (point-min) t)
(+ (current-column) 2))
((re-search-backward "\\<\\([^:=\n\t ]+\\)[ \t]*\\(:\\|=\\)" (point-min) t)
(current-column))
(t
nil)))))
(if spos
(- spos 2)
(+ js-indent-level js-expr-indent-offset))))
....
残りの条件は、その楽しい状態に保つようにしてください。それらが何をするのかはわかりませんが、おそらく重要です。
これが堅牢かどうかはわかりません。1つのテストケースを除いて、テストしていません。しかし、このはずがあなたを始めさせます。