by shigemk2

当面は技術的なことしか書かない

less-css-modeのインデント幅を修正しようとしてハマった

Emacsユーザーのための LESS 導入。 - 日々、とんは語る。
less-css-modeを使っていて、インデント幅を2にしたいなあと思い、

.emacs

(defun less-css-mode-hooks ()
  (flymake-mode-off)
  (setq indent-tabs-mode nil)
  (setq c-basic-offset 2))
(add-hook 'less-css-mode-hook 'less-css-mode-hooks)

ってやってless-css-modeを実行してもインデント幅は4のままだった。

なんか散々いろいろ調べまわったあげく、公式のドキュメント(less-css-mode.el)を読んでたら、

;; `less-css-mode' is derived from `css-mode', and indentation of
;; nested blocks may not work correctly with versions of `css-mode'
;; other than that bundled with recent Emacs.

うーん、less-css-modeのインデントはcss-modeのインデントに支配されているっぽいな(違うかもしれないが)
だが待て。そもそも僕はどのcss-modeを使っているのだ?

僕の.emacsにはcss-modeに関する記述はない。
よく考えたら、僕は特別なcss-modeを使わず、標準のものを利用している。

Emacsのcss-modeが複数ある件 - 牌語備忘録 - pygo

とすると、Emacs標準のcss-modeのインデント幅を弄ればよいのではないか。

(defun semicolon-ret ()
  (interactive)
  (insert ";")
  (newline-and-indent)
  )
(defun brace-ret-brace ()
  (interactive)
  (insert "{") (newline-and-indent)
  (newline-and-indent)
  (insert "}") (indent-for-tab-command)
  (newline-and-indent) (newline-and-indent)
  (previous-line) (previous-line) (previous-line)
  (indent-for-tab-command)
  )
(add-hook 'css-mode-hook
              (lambda ()
                (setq css-indent-offset 2)
                (define-key css-mode-map ";" 'semicolon-ret)
                (define-key css-mode-map "{" 'brace-ret-brace)
                ))

less-hookのうえに上のコードを記述すると、きちんとインデント幅は2になりました。

これでいいのかなあ…