GNU Emacs
Emacs
Dashboard

Major Modes for Programming Languages

Emacs has specialized major modes (Major Modes) for many programming languages. A programming language mode typically specifies the syntax of expressions, the customary rules for indentation, how to do syntax highlighting for the language, and how to find the beginning or end of a function definition. It often has features for compiling and debugging programs as well. The major mode for each language is named after the language; for instance, the major mode for the C programming language is c-mode. Emacs has programming language modes for Lisp, Scheme, the Scheme-based DSSSL expression language, Ada, ASM, AWK, C, C++, C#, Elixir, Fortran, Icon, IDL (CORBA), HEEx, IDLWAVE, Java, Javascript, Lua, M4, Makefiles, Metafont (TeX's companion for font creation), Modula2, Object Pascal, Objective-C, Octave, Pascal, Perl, PHP, Pike, PostScript, Prolog, Python, Ruby, Simula, SQL, Tcl, TypeScript, Verilog, and VHDL. The recommended mode for Perl is called CPerl mode. Modes are also available for the scripting languages of the common GNU and Unix shells, and MS-DOS/MS-Windows BAT files, JSON, DNS master files, CSS (Cascading Style Sheets), Dockerfiles, CMake files, and various sorts of configuration files. Ideally, Emacs should have a major mode for each programming language that you might want to edit. If it doesn't have a mode for your favorite language, the mode might be implemented in a package not distributed with Emacs (Packages); or you can contribute one. If Emacs has been compiled with the tree-sitter library, it offers several optional editing modes based on that library, which utilize the incremental parsing capabilities provided by tree-sitter. These modes have -ts- in their names; for example c-ts-mode, python-ts-mode, etc. In most programming languages, indentation should vary from line to line to illustrate the structure of the program. Therefore, in most programming language modes, typing =TAB= updates the indentation of the current line (Program Indent). Furthermore, =DEL= is usually bound to backward-delete-char-untabify, which deletes backward treating each tab as if it were the equivalent number of spaces, so that you can delete one column of indentation without worrying whether the whitespace consists of spaces or tabs. Entering a programming language mode runs the custom Lisp functions specified in the hook variable prog-mode-hook, followed by those specified in the mode's own mode hook (Major Modes). For instance, entering C mode runs the hooks prog-mode-hook and c-mode-hook. Hooks, for information about hooks. Separate manuals are available for the modes for Ada (Ada Mode), C/C++/Objective C/Java/Corba IDL/Pike/AWK (CC Mode), Octave, VHDL, and IDLWAVE (IDLWAVE).