Emacs Lisp

From WikEmacs
Revision as of 10:12, 30 March 2012 by 115.242.172.67 (talk)
Jump to navigation Jump to search

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
Library lisp-mode
Command emacs-lisp-mode
Builtin yes
Auto-activates for *.el, .emacs, _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.

Basic setup

You can customize the way Emacs edits and displays this and all other lisp languages with M-x customize-group RET lisp RET.

Helpful keybindings

<span title="Try `C-h k M-<tab>' for more information." style="border-bottom
1px dotted">[M-<tab>]
Complete at point
[C-M-q]
Indent the S-expression following point
[C-M-x]
Evaluate the defun at point

Common customizations

Outlining

For Org-style outlining, add the following snippet to your Emacs configuration file.

;; Turn on outline minor mode
(add-hook 'emacs-lisp-mode-hook  'outline-minor-mode)

;; Add key bindings for Org-style outline cycling
(add-hook 'outline-minor-mode-hook
  (lambda ()
    (define-key outline-minor-mode-map [(control tab)] 'org-cycle)
    (define-key outline-minor-mode-map [(shift tab)] 'org-global-cycle)))

Now visit any elisp file (say M-x find-library RET outline) and keep pressing [S-TAB] and see what happens. Experiment similarly with [C-TAB].

Indentation

Add the following snippet to your Emacs configuration file, so that you don't have to indent deliberately. See M-x reindent-then-newline-and-indent.

(add-hook 'emacs-lisp-mode-hook
	  (lambda nil
	    (local-set-key [(return)] 'reindent-then-newline-and-indent)))

Always keep parentheses balanced

See Skeleton#Keep some chars always balanced

Scope

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:

   ;;; -*- lexical-binding: t -*-

External links