MuleとMeadow

Windows上でもEmacs系のエディタであるMuleとMeadowが使えます。
私もMuleを使っていますが、あまり使いこなしているとは言えません。(^^;)
高機能ゆえに落とし穴もあります。その1つにタブとインデントがあります。
Emacs系のエディタを使っている人でも、タブとインデントの関係について、
正しく理解されている人は少ないように思います。

Emacsの落とし穴

Emacs系のエディタは、タブ幅とインデント幅の設定を別々に設定できます。
Emacsのタブ幅のデフォルトは8で、tcl-mode.elのインデント幅のデフォルトは4です。
多くの人は、デフォルトの設定のままで使われているのではないでしょうか?

さて、それのどこが問題かと言うと、
実は、Emacs系のエディタを使っている仲間同志では気づかないのですが、
それ以外のエディタを使っている人とは相性が悪いのです。

以下の例を見てください。
Emacs系のエディタで「タブ8、インデント4」の設定(デフォルト)で
以下のスクリプトを記述したとします。

set a 1
if {$a == 1} {
    set b 2 ;# 最初のインデント
    if {$b == 2} {
        set c 3 ;# 次のインデント
    }
}

最初のインデントは、スペースが4つ挿入されますが、
次のインデントは、タブが1つ挿入されます。
見た目には正しいように思えますが、
このファイルをEmacs系のエディタ以外で開くと以下の様に見えます。

set a 1
if {$a == 1} {
    set b 2 ;# 最初のインデント
    if {$b == 2} {
    set c 3 ;# 次のインデント
    }
}

"次のインデント"の行のインデントが期待通りになっていません。
これはEmacs系のエディタのタブ設定が8なので、
2つインデントしたところにタブが1つ挿入されるために起こります。
自分では正しくインデントしていても、他の人からインデントが変である
という指摘を受けるかもしれません。

もう1つの問題は、
最初のインデントにおいて、スペースが4つ挿入されることです。
これは知らず知らずのうちに、ファイルサイズを大きくしています。

それでは、どうしたらよいのでしょうか?

解決策(その1)

インデントをタブと同じ8に設定する。
.emacsに以下の設定を行います。

; Tclモード
(setq tcl-indent-level 8)

でも、インデントは4の方が見やすいですよね。

解決策(その2)

インデントは4で、すべてのインデントにスペースを挿入する。
.emacsに以下の設定を行います。

; Tclモード
(add-hook 'tcl-mode-hook '(lambda () (setq tab-width 1)))

でも、ファイルサイズが大きくなりますね。

解決策(その3)

インデントは4で、すべてのインデントにタブを挿入する。
.emacsに以下の設定を行います。

; Tclモード
(add-hook 'tcl-mode-hook '(lambda () (setq tab-width 4)))

最もファイルサイズが小さくなるベストな設定です。

これでEmacs系以外のエディタと問題なくファイル交換ができそうですね。