Emacs: Set File to Open in a Major Mode
This page tells you how emacs determine what major mode to load when you open a file, and how you can change the setup.
Associate Major Mode by File Name Extension
Use auto-mode-alist to associate a major mode with file name extension.
;; setup files ending in “.js” to open in js2-mode (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
auto-mode-alist is a built-in variable. Its value is a association list. Each key is a regex string, and value is mode name symbol.
〔►see Emacs Lisp: Association List〕
Note: in the elisp code above, the double backslash in the string
is used to escape the backslash. So, the regex engine just got
\. is to match a period. The
\' is one of emacs special regex syntax, to match end of a string (not including end of a line that's not end of string. End of line is
$). (See also: emacs regex tutorial.) (info "(elisp) Regexp Backslash")
You can see the value of auto-mode-alist by Alt+x
Remove File Extension Association
You can remove file name association with a major mode. Example:
;; remove any file name suffix associated with js-mode (setq auto-mode-alist (rassq-delete-all 'js-mode auto-mode-alist))
To check if a mode is in the list, eval the following and look at the output. (
;; check if js-mode is in the list. (rassoc 'js-mode auto-mode-alist)
Normally, you should not need to remove items in
auto-mode-alist. Simply add to the front using
Associate Major Mode by First Line in File
The magic-mode-alist is for associating first line of a file with a mode. (when the line otherwise isn't the unix shebang
#!… or embedded elisp variable.) Use it like this:
;; if first line of file matches, activate nxml-mode (add-to-list 'magic-mode-alist '("<!DOCTYPE html .+DTD XHTML .+>" . nxml-mode) )
The magic-mode-alist is variable. Its value is a list of pairs. The first element is a regex string, the second is a mode name (of type symbol). Emacs tries to match the first line of a file to values in magic-mode-alist. If there's a match, it sets the buffer to that mode.
How Emacs Determines Which Major Mode to Load
Emacs determines what mode to activate by the following mechanisms, in order. If a match is found, the process stops.
- Look for a special emacs-specific syntax in the file. For example: if first line in the file contains
-*- mode: xyz-*-, emacs will load “xyz-mode”. This is from a general mechanism for emacs to load elisp variables. (See: (info "(emacs) File Variables").) This has the top priority, but this mechanism is not the usual way for programing language files to associate with a major mode.
- Check the first line in the file for unix “shebang” syntax (For example,
#!/usr/bin/perl) and match it with interpreter-mode-alist.
- Trys to match first line text with magic-mode-alist. (As of emacs 24.1.1, by default this list is empty.)
- Match the file name with auto-mode-alist.
Note that when you install a new package, some has the file association setting code within the package, while others ask you to put a few lines in your emacs init file instead.
Emacs Customize Topic
- How to Set Emacs's User Interface
- Emacs: How to Install Packages Using ELPA, MELPA
- How to Install Emacs Package Manually
- Emacs: How to Define Keys
- Emacs: M-x customize Tutorial
- Emacs: Set File to Open in a Major Mode
- Organize Emacs Init File in 5 Minutes
- Emacs: Byte Compile Elisp Files
- Emacs: What's Hook?
- Emacs: Set Environment Variables within Emacs