Emacs propose plusieurs modes majeurs alternatifs, chacun personnalisant Emacs pour éditer du texte d'un type particulier. Les modes majeurs sont mutuellement exclusifs, et chaque tampon a à chaque moment un mode majeur. La ligne de mode indique normalement le nom du mode majeur en cours, entre parenthèses (Section 5.3).
Le mode majeur le moins spécialisé est appelé Fundamental mode. Ce mode n'a aucune redéfinition spécifique au mode ou définition de variable, ainsi chaque commande d'Emacs fonctionne de la manière la plus générale, et chaque option est dans son état par défaut. Pour éditer du texte d'un type spécifique connu par Emacs, comme du code Lisp ou du texte français, vous devez passer dans le mode approprié, comme le mode Lisp ou le mode Texte.
La sélection d'un mode majeur change la signification de quelques touches pour qu'elles soient plus particulièrement adaptées au langage édité. Celles modifiées fréquemment sont TAB, DEL, et C-j. La touche préfixe C-c contient normalement les commandes spécifiques au mode. De plus, les commandes qui travaillent sur les commentaires utilisent le mode pour déterminer comment les commentaires doivent être délimités. Plusieurs modes majeurs redéfinissent les propriétés syntaxiques des caractères apparaissant dans le tampon. Section 32.6.
Les modes majeurs tombent dans trois groupes majeurs. Le mode Lisp (qui a plusieurs variantes), le mode C, le mode Fortran et autres sont utilisés pour des langages de programmation spécifiques. Le mode Texte, le mode Nroff, le mode SGML, le mode TeX et le mode Profil sont pour du texte normal, brut ou balisé. Les autres modes majeurs ne sont pas prévus pour être utilisés sur des fichiers d'utilisateurs ; ils sont utilisés dans des tampons créés par Emacs pour un usage spécifique, comme le mode Dired pour les tampons créés par Dired (Chapter 30), le mode Mail pour les tampons créés par C-x m (Chapter 28), et le mode Shell pour les tampons utilisés pour communiquer avec un processus shell fils (Section 31.15.2).
La plupart des modes majeurs pour langage de programmation spécifient que seules les lignes vierges séparent les paragraphes. Cela permet de rendre utilisables les commandes relatives aux paragraphes. (Section 23.3.) Ils indiquent aussi au mode Auto Fill d'utiliser la définition de TAB pour indenter les nouvelles lignes qu'il crée. Cela car la plupart des lignes d'un programme sont habituellement indentées (Chapter 22.)