;; --- web configuration file.---
;; Provides basic utility for web programming such as:
;; * Tag auto-pairing
;; * Switching major modes when entering different tags
;; Requires:
(require 'package-loader)
(defun my-sgml-insert-gt ()
"Inserts a `>' character and calls
`my-sgml-close-tag-if-necessary', leaving point where it is."
(interactive)
(insert ">")
(save-excursion (my-sgml-close-tag-if-necessary)))
(defun my-sgml-close-tag-if-necessary ()
"Calls sgml-close-tag if the tag immediately before point is
an opening tag that is not followed by a matching closing tag."
(when (looking-back "<\\s-*\\([^> \t\r\n]+\\)[^>]*>")
(let ((tag (match-string 1)))
(unless (and (not (sgml-unclosed-tag-p tag))
(looking-at (concat "\\s-*<\\s-*/\\s-*" tag "\\s-*>")))
(sgml-close-tag)))))
;; TODO: Disable autopair in HTML. Interferes with autoclose tab.
(use-package multi-web-mode
:init
(setq mweb-default-major-mode 'html-mode
mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>")
(js-mode "")
(java-mode "<%" "%>")
(java-mode "<%=" "%>")
(css-mode ""))
mweb-filename-extensions '("php" "htm" "html" "jsp" "ctp" "phtml" "php4" "php5"))
:config
(multi-web-global-mode 1)
(eval-after-load "sgml-mode"
'(define-key sgml-mode-map ">" 'my-sgml-insert-gt)))
(provide 'web)