ずれる。
<?php
function hoge () {
}
?>
となる。
php-mode.el
cc-*.el
を読んだり
debugでトレースしたりして
わかったのは
<?php
の部分が原因のようであること。
<?php
を
<?
にすれば ずれない。
前へさかのぼってサーチしていって
phpがワードで
その前の?がデリミタになって
バッファの先頭までいってサーチが終了し
サーチが終了したひとつ前にポイントがどこだったか
でインデントが決まり
<?php
の3文字目がそれにあたるので
それまでの2文字分インデントされてしまう
ということらしい。
つまり、 関数宣言部分が 本来はfunctionの頭から始まるわけだが php function となっていっていて phpとfunctionの間が改行されている と解釈されているよう。
cc-mode.el
はC系の言語のことしか考えてくれてないみたいで
php-mode-hook
で外から変数いじっても
<?php
を無視するようにできそうになかった。
しかたがないので
php-mode-hookで
(setq indent-line-function 'my-php-indent-line)
と indent-line-function を上書きして
my-php-indent-lineでは
(defun my-php-indent-line ()
(save-restriction
(let ((here (point)))
(if (not (search-backward "<?php" nil t))
(funcall 'php-cautious-indent-line)
(goto-char here)
(narrow-to-region (match-end 0) (point-max))
(funcall 'php-cautious-indent-line)
))))
と
php-cautious-indent-lineする前に
narrow-to-regionで <?php
を 隠したら
うまくインデントされるようになった。
php-cautious-indent-lineを2回書いているのが汚い。
コメント(0):
コメントを投稿