summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThien-Thi Nguyen <ttn@gnu.org>2020-10-30 22:40:11 -0400
committerThien-Thi Nguyen <ttn@gnuvola.org>2020-10-30 22:40:11 -0400
commit73bc7b543bfad54d50eb15943800dce12834efd6 (patch)
treeca3f9dd04d2d4d85390b5821aba1b7e6f6d1df63
parent74c45a62e1e48d7c52dc513b6911e65dcc38aa23 (diff)
downloademacs-73bc7b543bfad54d50eb15943800dce12834efd6.tar.gz
Make hideshow.el work with Mhtml mode
Suggested by Ian Williams <norbekian9@gmail.com>. * lisp/textmodes/mhtml-mode.el: Require ‘pcase’ when compiling. (mhtml-forward): New func. * lisp/progmodes/hideshow.el (hs-special-modes-alist): Add entry for ‘mhtml-mode’.
-rw-r--r--lisp/progmodes/hideshow.el5
-rw-r--r--lisp/textmodes/mhtml-mode.el12
2 files changed, 16 insertions, 1 deletions
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index 625e08e4d79..2ad66ccc5e0 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -264,7 +264,10 @@ This has effect only if `search-invisible' is set to `open'."
(c++-mode "{" "}" "/[*/]" nil nil)
(bibtex-mode ("@\\S(*\\(\\s(\\)" 1))
(java-mode "{" "}" "/[*/]" nil nil)
- (js-mode "{" "}" "/[*/]" nil)))
+ (js-mode "{" "}" "/[*/]" nil)
+ (mhtml-mode "{\\|<[^/>]*?" "}\\|</[^/>]*[^/]>" "<!--" mhtml-forward nil)
+ ;; Add more support here.
+ ))
"Alist for initializing the hideshow variables for different modes.
Each element has the form
(MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC).
diff --git a/lisp/textmodes/mhtml-mode.el b/lisp/textmodes/mhtml-mode.el
index 54e20779bdc..329f3e7241d 100644
--- a/lisp/textmodes/mhtml-mode.el
+++ b/lisp/textmodes/mhtml-mode.el
@@ -22,6 +22,7 @@
;;; Code:
(eval-when-compile (require 'cl-lib))
+(eval-when-compile (require 'pcase))
(require 'sgml-mode)
(require 'js)
(require 'css-mode)
@@ -303,6 +304,17 @@ This is used by `mhtml--pre-command'.")
(flyspell-generic-progmode-verify)
t)))
+;; Support for hideshow.el (see `hs-special-modes-alist').
+(defun mhtml-forward (arg)
+ "Move point forward past a structured expression.
+If point is on a tag, move to the end of the tag.
+Otherwise, this calls `forward-sexp'.
+Prefix arg specifies how many times to move (default 1)."
+ (interactive "P")
+ (pcase (get-text-property (point) 'mhtml-submode)
+ ('nil (sgml-skip-tag-forward arg))
+ (submode (forward-sexp arg))))
+
;;;###autoload
(define-derived-mode mhtml-mode html-mode
'((sgml-xml-mode "XHTML+" "HTML+") (:eval (mhtml--submode-lighter)))