Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

sh-mode の case 文のインデント

閲覧: 2 回
最初の未読メッセージにスキップ

HIROSE, Masaaki

未読、
2003/07/30 14:03:452003/07/30
To:
ひろせといいます

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 というのを使っていました。

ではでは

--
ひろせ

Katsumi Yamaoka

未読、
2003/07/30 19:55:402003/07/30
To:
こんにちは山岡と申します。

>>>>> 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>

HIROSE, Masaaki

未読、
2003/07/31 0:32:252003/07/31
To:
ひろせです

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)))))
))

--
ひろせ

新着メール 0 件