indent-region + untabify + delete-trailing-whitespace
plus さんから昨日のuntabfy + indent-regionについてメールを貰いました.
こんな感じです.
# 一部コメントを削除してあります. plus さんの環境が書かれていたので.
# 毎回ブログに貼っつけてすいません m(_ _)m
(defun my-indent-region-and-untabify-or-change-tab-width (arg) "indent-region + untabify を実行する. 数値引数として 0 が与えられたならば, untabify のみを実行する. 1 以上の数値引数が与えられたならば, 与えられた値 * 4 を tab-width とする." (interactive "P") (setq arg (if arg (prefix-numeric-value arg) -1)) (save-excursion (save-restriction (if (and transient-mark-mode mark-active) (narrow-to-region (region-beginning) (region-end)) ;; (widen) ;; ↑この (widen) はちとやりすぎかも? ;; narrowing されている場合に見えていない部分にも ;; untabify, indent-region がかかってしまいます ) (cond ((> arg 0) (setq tab-width (* arg 4)) ;; (redraw-frame (car (frame-list))) ;; ↑私の環境では必要ありませんでした (message "tab-width %d" tab-width)) ((= arg 0) (untabify (point-min) (point-max))) (t (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max)))))))
リージョンが指定されていると, その範囲をナローイングして,
そこだけに適用するようになっています.
それを受けてこのように改造してみました.
関数名を変更してあります.
(defun my-correct-externals-of-code (arg) "コードの外観を修正する関数. 前置引数なし : indent-region + untabify + delete-trailing-whitespace. 前置引数として 0 (C-0) : untabify. 前置引数として 1 (C-1) : delete-trailing-whitespace. 前置引数として 11 (C-1 C-1) : untabify + delete-trailing-whitespace. 前置引数として 22 (C-2 C-2) : indent-region + delete-trailing-whitespace. 1 以上の前置引数(11, 22 を除く) : その数値 * 2 を tab-width の値とする. 通常は, カレントバッファ全体が適用範囲となる. ただし, region が指定されていた場合は, その範囲を適用範囲とする." (interactive "P") (setq arg (if arg (prefix-numeric-value arg) -1)) (save-excursion (save-restriction (if (and transient-mark-mode mark-active) (narrow-to-region (region-beginning) (region-end)) (widen)) (cond ((= arg 0) (untabify (point-min) (point-max)) (message "did untabify.")) ((= arg 1) (delete-trailing-whitespace) (message "did delete-trailing-whitespace.")) ((= arg 11) (untabify (point-min) (point-max)) (delete-trailing-whitespace) (message "did untabify + delete-trailing-whitespace.")) ((= arg 22) (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max)) (message "did indent-region + untabify")) ((> arg 1) (setq tab-width (* arg 2)) (redraw-frame (car (frame-list))) (message "tab-width %d" tab-width)) (t (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max)) (delete-trailing-whitespace))))))
変更点は, 大きくは, delete-trailing-whitespace も行うようにしたこと,
前置引数を指定したときの挙動が増えたことです.
前置引数を与えたときの挙動は, 次のようなものになります.
- C-0 M-x my-correct-externals-of-code とすると, untabify.
- C-1 M-x my-correct-externals-of-code とすると, delete-trailing-whitespace.
- C-1 C-1 M-x my-correct-externals-of-code とすると, untabify + delete-trailing-whitespace.
- C-2 C-2 M-x my-correct-externals-of-code とすると, indent-region + untabify.
- その他の数値引数を与えると, その値 * 2 を tab-width の値として設定します.
前置引数を与えないと, indent-region + untabify + delete-trailing-whitespace を行います.
また, C-0 とか何をやったのか, ひどく分かりづらいので,
行ったことを message でミニバッファに出すようにしました.
更新時刻
2007年, 2月28日, 2:27