Emacs is not just a powerful text editor; it is also an extensible platform that allows users to customize and enhance their workflow through Emacs Lisp (Elisp). If you are new to Emacs Lisp, this tutorial will help you write your first functions and understand basic customization.
Getting Started with Emacs Lisp
Emacs Lisp is a dialect of Lisp designed specifically for extending and customizing Emacs. You can evaluate Emacs Lisp code interactively, making it a great language for experimentation and learning.
Evaluating Lisp Expressions
To start working with Emacs Lisp, you can evaluate expressions in different ways:
M-:
(Meta key +:
) opens the minibuffer where you can type an expression and execute it.C-x C-e
(Control + x followed by Control + e) evaluates the expression before the cursor in an open buffer.
Try evaluating this simple expression:

After placing the cursor at the end of the expression, press C-x C-e
, and Emacs will display the result in the minibuffer.
Writing Your First Function
Emacs Lisp functions allow you to define reusable blocks of code. The basic syntax for defining a function is:

Example: A Simple Greeting Function
Here is a basic function that prints a greeting message:

To execute this function, type M-x greet
after defining it in an Emacs buffer.
Using Arguments in Functions
You can define functions that accept arguments to make them more flexible.

To run this function, evaluate:

This will display: Hello, Alice!
in the minibuffer.
Customizing Emacs with Interactive Functions
To make your functions callable with M-x
, you need to use the interactive
keyword.

Now you can call M-x greet-interactive
, enter your name when prompted, and see the greeting message.
Modifying Emacs Behavior with Hooks
Hooks allow you to execute functions when specific events occur in Emacs. For example, to display a message when opening a new buffer:

Conclusion
By learning Emacs Lisp, you can customize and enhance your Emacs experience to fit your workflow. Start small with simple functions and gradually explore more advanced topics like hooks and keybindings. Happy coding!