Linux で自分でソースからコンパイルした Emacs 21.3 を X で使っています。
付属の sh-mode (sh-script.el) で X と非 X とで case 文のインデントが違
うのですが、そろえる方法はないのでしょうかという質問です。
例えば
case "$1" in
foo)
bar
baz
;;
esac
をインデントした場合、
emacs で X な emacs だと
case "$1" in
<TAB>foo)
<TAB><TAB>bar
<TAB><TAB>baz
<TAB><TAB>;;
esac
となるのですが、
emacs -nw で kterm の中の emacs だと
case "$1" in
<TAB>foo)
<TAB>bar
<TAB>baz
<TAB>;;
esac
となってしまいます。
# 個人的には前者にそろえたい。
-nw ありでもなしでも sh-indent-for-case-alt の値は ++ なのですが、bar
のところで sh-show-indent すると X なときは「sh-indent-for-case-alt is
++」なのですが、非 X だと「line has default indentation」とミニバッファ
に表示されます。
余計なものを読まないように emacs -q でやってみても同様の結果でした。
また、6/20 ぐらいに CVS からもってきた 21.3.50 でも同様でした。
# どちらも sh-script.el のバージョンは 2.0f
//
X と非 X とでインデントが違うのは気持悪いのでそろえたいのですが、何か
アドバイスないでしょうか?
もしくは他のおすすめの shell script 支援モードないでしょうか?
# ちょっと前までは ksh-mode.el というのを使っていました。
ではでは
--
ひろせ
>>>>> In <yf1d6fr7uym.wl%hiro...@t3.rim.or.jp> ひろせさん wrote:
> 付属の sh-mode (sh-script.el) で X と非 X とで case 文のインデントが
> 違うのですが、そろえる方法はないのでしょうかという質問です。
これは X と非 X ではなくて、font-lock を使っているかどうかが関係
しているようですね。
> 例えば
> case "$1" in
> foo)
> bar
> baz
> ;;
> esac
sh-script.el を追ってみると、二行目の ")" に syntax-tabel という
text-property が付いていることを期待しているように見えます。それ
を付けるのは font-lock なので、sh-script.el は font-lock の併用
を前提にしているのではないでしょうか。そうだとすれば、あまり良い
仕様ではありませんね。
ぼくは非 X だったら font-lock は要らないと思って、.emacs ファイ
ルに例えば以下のようなものを書いていたのですが、
(if window-system
(global-font-lock-mode t))
これを単に
(global-font-lock-mode t)
または
(if window-system
(global-font-lock-mode t)
(add-hook 'sh-mode-hook 'turn-on-font-lock))
のようにした方が良いのかもしれません。
もし色が適切でなければ (ぼくの場合は実際そうだったのですが)、色
が着かない TERMCAP や TERMINFO を使うか、または
sh-font-lock-keywords で使われている face の色を、非 X の場合だ
け逐一変更すれば良いです。ちょっと面倒ですけれどね。
--
Katsumi Yamaoka <yam...@jpl.org>
on "Re: sh-mode の case 文のインデント"
<b9y8yqf...@jpl.org>
at Thu, 31 Jul 2003 08:55:40 +0900
Katsumi Yamaoka <yam...@jpl.org> wrote:
> > 付属の sh-mode (sh-script.el) で X と非 X とで case 文のインデントが
> > 違うのですが、そろえる方法はないのでしょうかという質問です。
>
> これは X と非 X ではなくて、font-lock を使っているかどうかが関係
> しているようですね。
なるほど… 確かに、私も
> (if window-system
> (global-font-lock-mode t))
と同等のことをしていました。
> これを単に
>
> (global-font-lock-mode t)
>
> または
>
> (if window-system
> (global-font-lock-mode t)
> (add-hook 'sh-mode-hook 'turn-on-font-lock))
>
> のようにした方が良いのかもしれません。
後者の方法でうまくいきました。ありがとうございました。m(_ _)m
(add-hook 'sh-mode-hook
'(lambda ()
(setq sh-indent-comment t)
(turn-on-font-lock)
(custom-set-faces
'(sh-heredoc-face
((((class color) (background light)) (:foreground "dark cyan"))
(((class color) (background dark)) (:foreground "cyan"))
(t (:bold t)))))
))
--
ひろせ