;; --- 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 "]*type=[\"']text/javascript[\"'][^>]*>" "") (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)