27 lines
860 B
EmacsLisp
27 lines
860 B
EmacsLisp
;; -*- lexical-binding: t; -*-
|
|
|
|
(use-package nxml-mode
|
|
:straight (:type built-in)
|
|
:defer t
|
|
:config
|
|
(defun xml-pretty-print ()
|
|
(interactive)
|
|
(let ((start (if (region-active-p) (region-beginning) (point-min)))
|
|
(end (if (region-active-p) (region-end) (point-max))))
|
|
(cond
|
|
((executable-find "tidy")
|
|
(shell-command-on-region start end "tidy -wrap 88 -q -i -xml" nil t))
|
|
((executable-find "xmllint")
|
|
(shell-command-on-region start end "xmllint --format -" nil t))
|
|
(t (sgml-pretty-print start end)))))
|
|
(general-def nxml-mode-map "C-M-\\" #'xml-pretty-print)
|
|
(add-to-list 'hs-special-modes-alist
|
|
'(nxml-mode
|
|
"<!--\\|<[^/>]*[^/]>" ;; regexp for start block
|
|
"-->\\|</[^/>]*[^/]>" ;; regexp for end block
|
|
"<!--"
|
|
nxml-forward-element
|
|
nil)))
|
|
|
|
(provide 'init-xml)
|