untabfy + indent-region
最初は, untabify + indent-region だけで, マクロでも良いような関数作った.
でも, そうだ. タブ幅も変更できるようにしよう!とか考えたら, 妙に時間がかかった.
悩んだのは, 関数で (setq tab-width 8) とか変更しても, すぐに反映されないところ.
M-: でやるとすぐに反映されるのに, どうしてだーとか思って, 色々調べた.
最終的に 2ch のログを見つけて, (redraw-frame ...) ってやれば OK って分かってできた.
こんなの.
;; untabify & indent (defun my-indent-region-and-untabify-or-change-tab-width (arg) "indent-region + untabify を実行する. 1 以上の数値引数が与えられたならば, 与えられた値 * 4 を tab-width とする." (interactive "P") (if (and arg (> (prefix-numeric-value arg) 0)) (progn (setq tab-width (* (prefix-numeric-value arg) 4)) (redraw-frame (car (frame-list))) (message "tab-width %d" tab-width)) (save-excursion (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max)))))
前置引数を与えないと, untabify + indent-region.
save-excursion はイラナイと思うけど, なんかつけといた.
1 以上の数値前置引数を与えると, その与えられた値 * 4 を tab-width の値と変更する.
それだけ.
最初は, tab-width を変更した後,
indent-region + untabify もするように if でなくて when でやってた.
でも, どうにも上手くいかないから*1,
いいやってことでこんな関数におちついた.
追記
こんなのに変更した.
(defun my-indent-region-and-untabify-or-change-tab-width (arg) "indent-region + untabify を実行する. 数値引数として 0 が与えられたならば, untabify のみを実行する. 1 以上の数値引数が与えられたならば, 与えられた値 * 4 を tab-width とする." (interactive "P") (cond ((and arg (> (prefix-numeric-value arg) 0)) (setq tab-width (* (prefix-numeric-value arg) 4)) (redraw-frame (car (frame-list))) (message "tab-width %d" tab-width)) ((= (prefix-numeric-value arg) 0) (untabify (point-min) (point-max))) (t (save-excursion (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max))))))
数値引数 として, 0 が与えられたなら, untabify のみを実行するようにした.
delete-trailing-whitespace もやるべきか悩みどころ.
更新時刻
- 1かいめ 2007年, 2月26日, 23:21
- 2かいめ 2007年, 2月26日, 23:50
*1:タブ幅の変更がやっぱり反映されないんだよね.