Puppet で同じタイプのリソースを大量に記述する時には、
package { sudo:
ensure => latest
}
package { ntp:
ensure => latest
}
package { ssh:
ensure => latest
}
なんて書くのはだるいので、
package {
sudo:
ensure => latest;
ntp:
ensure => latest;
ssh:
ensure => latest;
}
と書きたいのですが、Emacs + "puppet-mode.el":https://reductivelabs.com/svn/puppet/trunk/ext/emacs/puppet-mode.el では、後者みたいな書き方だと、インデントが意図した通りにならなくて、イラっときてパッチ書いた。
=== puppet-mode.el
==================================================================
--- puppet-mode.el (revision 1800)
+++ puppet-mode.el (local)
@@ -106,7 +106,9 @@
(progn
(setq cur-indent (- (current-indentation) 2))
(setq not-indented nil))
- (setq cur-indent (- (current-indentation) 2))))
+ (setq cur-indent (- (current-indentation) 2)))
+ (if (looking-at "^.*;")
+ (setq cur-indent (- cur-indent 2))))
(if (< cur-indent 0) ; We can't indent past the left margin
(setq cur-indent 0)))
(save-excursion
@@ -125,6 +127,18 @@
(setq cur-indent (+ (current-indentation) 2))
(setq not-indented nil))
(if (bobp)
+ (setq not-indented nil)))
+ (if (looking-at "^.*:\s*$")
+ (progn
+ (setq cur-indent (+ (current-indentation) 2))
+ (setq not-indented nil))
+ (if (bobp)
+ (setq not-indented nil)))
+ (if (looking-at "^.*;")
+ (progn
+ (setq cur-indent (- (current-indentation) 2))
+ (setq not-indented nil))
+ (if (bobp)
(setq not-indented nil)))))))
(if cur-indent
(indent-line-to cur-indent)
他にもインデントまわりの動作で微妙なところはあるけど、ちょっとはましになった。インデントまわりの処理で参考になる emacs-lisp って何かないかな?