I'm using web-mode and yasnippet for coding PHP and HTML.

To use yasnippet in web-mode, will have to install php-mode, php-auto-yasnippets, emmet-mode and ac-emmet as suggested in web-mode.org. But I prefer to make it happen just with web-mode and yasnippet.

Part of my web-mode configuration is like this:

(defadvice yas-expand-from-trigger-key (before web-mode-before-yas-expand activate)
        (run-hooks 'web-mode-cur-language-mode-hook))

(add-hook 'web-mode-cur-language-mode-hook
      '(lambda ()
         (let ((web-mode-cur-language
           (if (string= web-mode-cur-language "php")
               (yas-activate-extra-mode 'php-mode)
             (yas-deactivate-extra-mode 'php-mode))
           (if (string= web-mode-cur-language "html")
                (yas-activate-extra-mode 'html-mode)
              (yas-deactivate-extra-mode 'html-mode))

And following is my yasnippet configuration:

(add-to-list 'load-path (expand-file-name "elpa/yasnippet" user-emacs-directory))

(require 'yasnippet)

(yas-global-mode 1)

It works very well when edit php file in web-mode.

Then open a html file in emacs, input "form" then "tab", everything works fine. But if input "href" then "tab", nothing happened. It supposed to call the "href" snippet in nxml-mode as written in html-mode's .yas-parents.

How could I make this right? I really don't want copy all those snippets from nxml-mode to html-mode.

1 Answer 1


Code changes was made to yasnippet.el (with 1 addition and 2 deletions), to let it find parents for extra-modes too. Here is the link fix #619

Around line 744:

                     append (funcall dfs neighbour explored)))))
 (remove-duplicates (if mode
                        (funcall dfs mode)
-                    (append yas--extra-modes
-                            (funcall dfs major-mode))))))
+                    (apply #'append (mapcar dfs (cons major-mode yas--extra-modes)))))))
  • 1
    Please make this a complete answer by putting the necessary code in the post rather than just a link.
    – Dan
    Oct 9, 2015 at 9:44
  • Sorry about that, made another answer, is that OK now?
    – Jasondf
    Oct 9, 2015 at 14:35
  • please edit your original post rather than posting a new answer. Also, please clarify what one is supposed to do. It's hard to tell what the answer is without more explanation.
    – Dan
    Oct 9, 2015 at 15:00
  • Roger. Edited the original answer. I'm new to stackechange, sorry for the blurred answer before, and thanks for your advice.
    – Jasondf
    Oct 10, 2015 at 5:25
  • Not a problem. Thanks for updating.
    – Dan
    Oct 10, 2015 at 9:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.