Emacs: Set Default Major Mode

By Xah Lee. Date: . Last updated: .

Set Default Major Mode for New Empty Buffer

Put this in your init file:

(setq initial-major-mode 'js-mode)

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 Elisp: Association List]

Note: in the elisp code above, the double backslash in the string \\.js\\' is used to escape the backslash. So, the regex engine just got \.js\'. The \. 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 describe-variable.

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. (view-echo-area-messages)

;; check if js-mode is in the list.
(rassoc 'js-mode auto-mode-alist)

[see Evaluate Emacs Lisp Code]

Normally, you should not need to remove items in auto-mode-alist. Simply add to the front using add-to-list.

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.

  1. 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.
  2. Check the first line in the file for unix “shebang” syntax (For example, #!/usr/bin/perl) and match it with interpreter-mode-alist.
  3. Trys to match first line text with magic-mode-alist. (As of emacs 24.1.1, by default this list is empty.)
  4. Match the file name with auto-mode-alist.

(info "(emacs) Choosing Modes")

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.

Major Mode and Minor Mode

If you have a question, put $5 at patreon and message me on xah discord.
Or support me by Buy Xah Emacs Tutorial

Emacs Tutorial

Emacs Init

Emacs Keys


ELisp Examples

ELisp Write Major Mode

Emacs Init

Init Basics


text editing