Emacs Lisp is a dialect of the Lisp programming language used by GNU Emacs. Most of the editing functionality built into Emacs is written in Emacs Lisp, with the remainder being written in C (as is the Lisp interpreter itself). Users of Emacs commonly write Emacs Lisp code to customize and extend Emacs.

+

{{Infobox major-mode

+

|title = Emacs Lisp

+

|library = lisp-mode

+

|command = emacs-lisp-mode

+

|builtin = yes

+

|auto activates = *.el, .emacs, _emacs

+

}}

+

'''Emacs Lisp''' is a dialect of the [[Lisp]] programming language used by GNU Emacs. Most of the editing functionality built into Emacs is written in Emacs Lisp, with the remainder being written in C (as is the Lisp interpreter itself). Users of Emacs commonly write Emacs Lisp code to customize and extend Emacs.

Emacs Lisp is also commonly referred to as "elisp" or "Elisp". Files containing Emacs Lisp code use the <tt>.el</tt> filename suffix; when [[byte-compile]]d, the same filename prefix is used but with the <tt>.elc</tt> filename suffix.

Emacs Lisp is also commonly referred to as "elisp" or "Elisp". Files containing Emacs Lisp code use the <tt>.el</tt> filename suffix; when [[byte-compile]]d, the same filename prefix is used but with the <tt>.elc</tt> filename suffix.

−

= Basic setup =

+

Emacs Lisp is a [https://hornbeck.wordpress.com/2009/07/05/lisp-1-vs-lisp-2/ Lisp-2], which means that a single identifier (in Lisp terminology, "symbol") can simultaneously exist as ("be bound to") both a function and a variable.

−

You can customize this and all other [[:Category:Lisp|lisp languages]] with {{CustomizeGroup|lisp}}.

+

== Basic setup ==

−

= Helpful keybindings =

+

You can customize the way Emacs edits and displays this and all other [[:Category:Lisp|lisp languages]] with {{CustomizeGroup|lisp}}.

−

; {{Keys|M-<tab>}}

+

== Helpful keybindings ==

+

+

; {{Keys|M-TAB}}

: Complete at point

: Complete at point

; {{Keys|C-M-q}}

; {{Keys|C-M-q}}

−

: Indent the [[sexp]] following [[point and mark|point]]

+

: Indent the [[S-expression]] following [[point and mark|point]]

−

;{{Keys|C-M-x}}

+

; {{Keys|C-M-x}}

: Evaluate the <code>defun</code> at [[point and mark|point]]

: Evaluate the <code>defun</code> at [[point and mark|point]]

−

= Common customizations =

+

== Common customizations ==

−

== Outlining ==

+

=== Outlining ===

For [[Org]]-style outlining, add the following snippet to your {{EmacsConfigFile}}.

For [[Org]]-style outlining, add the following snippet to your {{EmacsConfigFile}}.

Line 37:

Line 46:

Now visit any elisp file (say {{Command|find-library RET outline}}) and keep pressing {{Keys|S-TAB}} and see what happens. Experiment similarly with {{Keys|C-TAB}}.

Now visit any elisp file (say {{Command|find-library RET outline}}) and keep pressing {{Keys|S-TAB}} and see what happens. Experiment similarly with {{Keys|C-TAB}}.

−

== Indentation ==

+

=== Indentation ===

−

Add the following snippet to your <tt>[[init.el]]</tt> or <tt>[[.emacs]]</tt> file, so that you don't have to indent deliberately. See {{Command|reindent-then-newline-and-indent}}.

+

Add the following snippet to your {{EmacsConfigFile}}, so that you don't have to indent deliberately. See {{Command|reindent-then-newline-and-indent}}.

Latest revision as of 13:35, 29 April 2013

Emacs Lisp

Library

lisp-mode

Command

emacs-lisp-mode

Builtin

yes

Auto-activates for

*.el, .emacs, _emacs

Emacs Lisp is a dialect of the Lisp programming language used by GNU Emacs. Most of the editing functionality built into Emacs is written in Emacs Lisp, with the remainder being written in C (as is the Lisp interpreter itself). Users of Emacs commonly write Emacs Lisp code to customize and extend Emacs.

Emacs Lisp is also commonly referred to as "elisp" or "Elisp". Files containing Emacs Lisp code use the .el filename suffix; when byte-compiled, the same filename prefix is used but with the .elc filename suffix.

Emacs Lisp is a Lisp-2, which means that a single identifier (in Lisp terminology, "symbol") can simultaneously exist as ("be bound to") both a function and a variable.

By default elisp uses dynamic scope. Since Emacs 24 lexical scope has been added.
To use lexical binding, an Emacs-lisp source file must set a file-variable lexical-binding to t in the file header, e.g., by using a first line like: