2008年3月22日土曜日

javascript.elと[:punct:]

javascript-modeで 行の先頭が$なんかのとき インデント1つ分ずれる。

function hoge() {
  fuga();
    $('hoge').empty();
}

これは、modify-syntax-entryかなと思ったら 効かず。 javascript-mode-hookで (setq c-echo-syntactic-information-p t) するもエコーされない。

javascript.elを読むと この人はindent-line-functionを cc-modeのをつかわず 自分で実装していた。

ずれる原因は

(let ((p (parse-partial-sexp (point-min) (point)))
      (brace-p (looking-at "[{}]"))
      (continued-expr-p (looking-at "[[:punct:]]")))

(looking-at "[[:punct:]]") の部分で 表示可能な記号文字が先頭のとき 余分にインデントされるようになっていた。

(let ((p (parse-partial-sexp (point-min) (point)))
      (brace-p (looking-at "[{}]"))
      (continued-expr-p (and (not (looking-at "['$_]"))
                             (looking-at "[[:punct:]]"))))

と['$_]のときはcontinued-expr-pと解釈されないようにして 修正。

コメント(0):