xmlのfolding(折り畳み)をする

たまには更新しろよってことでemacs小ネタ。

一万行のxmlファイルの修正依頼に涙がぶち切れそうになったので
emacsの折り畳みについてさらっと調べてみたら、hs-minor-modeなるものが標準で入ってた。

ということでsgmlモードでxmlの折り畳みをする設定。
ついでに標準のキーバインド(C-c @ C-c とか)が使いづらいので、
sgml-modeで空いてそうなC-c系列に変更。

(add-hook 'sgml-mode-hook
          '(lambda()
             (hs-minor-mode 1)))
(add-to-list 'hs-special-modes-alist
             '(sgml-mode
               "<!--\\|<[^/>]>\\|<[^/][^>]*[^/]>"
               ""
               "<!--"
               sgml-skip-tag-forward
               nil))

;; key bind
(define-key sgml-mode-map (kbd "C-c C-o") 'hs-toggle-hiding)
(define-key sgml-mode-map (kbd "C-c C-l") 'hs-hide-level)
(define-key sgml-mode-map (kbd "C-c C-s") 'hs-show-all)