タブ・全角スペースに関する設定

AS3のコードをMeadowで書いていて、
その後サクラエディタで確認してみたらなんか行頭にタブが入ってるのを見つけた。
あれ?オートインデントでタブが入ることあるんだっけ?
と思い少し困惑しながら.emacsを開いてみたら、
僕の.emacsにはタブを使わないようにする設定が入っていませんでした。


むむむ。今までずっと設定してなかったのか・・・。
でもずっと気になることはなかったのになぁ。
javascriptモードがいけないのかな?
まあいいや。この機会に設定を書き加えよう。
ってことで以下の設定を追加しました。

;;; インデント時にタブを使わないでスペースを使う
(setq-default tab-width 2 indent-tabs-mode nil)

tab-widthは4にするのが一般的なようですが、
僕は2が好きなので2にしておきます。
Rubyを使い始めてからインデントのスペースは、
JavaScriptでもPerlでもActionScriptでもずっと2にしています。


あとついでにタブと全角スペースがコード中にあったら
目立つようにする設定も加えてみました。
全角スペース・タブを目立つように表示する - higepon blog

;;; タブと全角スペースを目立たせる
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
  (font-lock-add-keywords
   major-mode
   '(
     (" " 0 my-face-b-1 append)
     ("\t" 0 my-face-b-2 append)
     ("[ ]+$" 0 my-face-u-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))) t)

これは前にもたしか使ってみたことがあったのだけど、
そのときはどうも気に入らなくてすぐに使わなくなりました。
でも今は特に気にならないのでまた使ってみようと思います。


あーそういえば M-x untabify とか使ったの今日で3回目ぐらいな気がするなぁ。

追記

タブと全角スペースがあったら目立たせるelispですが、
これ、行末の半角スペースも目立たせるんですよね。
それで、何か文字が続いた後にある半角スペースは
目立たせてくれて全然OKなんですけど、
半角スペースだけの行が目立つのはすごく気になります。
改行+インデントをしたときに、
行頭に半角スペースだけがある行がたくさんできるので、
そいつら全部が目立つのです。
気になるようわーんヽ(`Д´)ノ


そういえば前に試したときもこれが嫌で使わなくなったんでした。
なのでそういう場合は目立たなくなるように改良してみました。

;;; タブと全角スペースを目立たせる
;; my-face-u2 は自分で作った (半角スペースだけからなる行は目立たせない)
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defface my-face-u-2 '((t (:underline nil))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defvar my-face-u-2 'my-face-u-2)
(defadvice font-lock-mode (before my-font-lock-mode ())
  (font-lock-add-keywords
   major-mode
   '(
     (" " 0 my-face-b-1 append)
     ("\t" 0 my-face-b-2 append)
     ("^[ ]+$" 0 my-face-u-2 append)
     ("[ ]+$" 0 my-face-u-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))) t)

font-lock-add-keywordsに登録したものの優先順位は、
登録した順(つまり上にあるほど強い)みたいです。
デフォルトの設定では、
行末の半角スペースにアンダーラインを付けて目立たせるようになっているので、
それの1つ上に、行頭から行末までが半角スペースだったら、
アンダーラインを引かないって設定を追加しました。
これで意図通りの挙動です(・∀・)ヤター


みんなは僕みたいなことは気にしないんだろうか?
僕はすごく気になってしょうがなかったのだけど。
半角スペースだけの行ができないように工夫しているのかもしれないなぁ。

追記の追記

clmemo開いてみたら行頭のタブが全部黒くそまっててびっくり!
そうか・・・gray26(灰色のけっこう濃いやつ)に設定してたんだっけ(・∀・;)


そして、プログラム書くときのメジャーモードでは、
全てのタブは半角スペースになるように設定してあるので、
タブの配色設定の効果が見られるのは、
clmemo開いたときだけだなぁと気付きました。


ChangeLogにメモを書き込んでいる人なら、
行頭のタブに色が付いたらどうなるかをイメージしてみて下さい。
そうです。色が付いたタブが帯のように伸びています。
僕のMeadowの背景色はデフォルトのままの淡い肌色のような色なので、
黒い帯はハッキリ言ってかなり目立ちます。


これじゃあんまりだからもう少し落ち着いた色にしよう・・・。
ってことで、M-x list-colors-display で色の一覧を出して、
吟味して吟味して moccasin にすることに決めました。
慣れない間は色々変えるかもしれません。

;;; タブと全角スペースを目立たせる
;; my-face-u2 は自分で作った (半角スペースだけからなる行は目立たせない)
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-2 '((t (:background "moccasin"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defface my-face-u-2 '((t (:underline nil))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defvar my-face-u-2 'my-face-u-2)
(defadvice font-lock-mode (before my-font-lock-mode ())
  (font-lock-add-keywords
   major-mode
   '(
     (" " 0 my-face-b-1 append)
     ("\t" 0 my-face-b-2 append)
     ("^[ ]+$" 0 my-face-u-2 append)
     ("[ ]+$" 0 my-face-u-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))) t)