mirror of git://git.qorg11.net/kill9.git
some words on elisp
This commit is contained in:
parent
84d96a2a84
commit
dc3867c81e
|
@ -0,0 +1,76 @@
|
||||||
|
# A few words on emacs lisp
|
||||||
|
|
||||||
|
Emacs lisp is what makes Emacs as extensible as it is. Everything you
|
||||||
|
do in Emacs, is, in fact, written in emacs-lisp, even moving the cursor.
|
||||||
|
|
||||||
|
As it name says, Emacs lisp is part of the family of Lisp programming
|
||||||
|
languages. Meaning it has their "weird" syntax:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
(setq y 3)
|
||||||
|
(defun square (x) (* x x))
|
||||||
|
(square y)
|
||||||
|
~~~
|
||||||
|
|
||||||
|
This is a simple lisp function. which first, defines a variable using `setq`, in this case, sets y to 3.
|
||||||
|
|
||||||
|
Then, it defines a `square` function, which takes `x` as parameter, then, in the function body, it multiplies `x` by `x`.
|
||||||
|
|
||||||
|
In the third line, we call the `square` function with the value of the
|
||||||
|
variable `y`. which is the same as doing `(square 3)`. Calling this
|
||||||
|
function will return the value 9.
|
||||||
|
|
||||||
|
As Emacs is a Emacs Lisp interpeter, you can execute Emacs-lisp code
|
||||||
|
whenever which any of this functions:
|
||||||
|
|
||||||
|
* eval-buffer, this one evaluates the whole buffer, it's not really
|
||||||
|
useful
|
||||||
|
* eval-region, this one takes your region (selected with C-SPC, for
|
||||||
|
example) and evaluates it. This can be used in any mode.
|
||||||
|
* (eval-last-sexp), (Or C-x C-e), evaluates any emacs lisp
|
||||||
|
expression. for example (square y) is a emacs lisp expression. which
|
||||||
|
you can evaluate with C-x C-e, the return value will print the
|
||||||
|
returned value in the minibuffer.
|
||||||
|
|
||||||
|
You do not neet to save the file to evaluate.
|
||||||
|
|
||||||
|
## Hello world
|
||||||
|
|
||||||
|
If you want to use Emacs Lisp, open your scratch buffer, whith C-x b and select \*scratch\* and begin typing your emacs lisp expressions. For example:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
(princ "Hello world!")
|
||||||
|
~~~
|
||||||
|
|
||||||
|
This will print "Hello world" in the minibuffer. Which is what we wanted.
|
||||||
|
|
||||||
|
Now try:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
(insert "Hello world")
|
||||||
|
~~~
|
||||||
|
|
||||||
|
This will insert "Hello world" in the buffer you're in.
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
Emacs lisp has no types. Meaning you can use the same function to
|
||||||
|
define variables.
|
||||||
|
|
||||||
|
Emacs Lisp, like Common Lisp, has a gorillion ways to define a variable:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
(setq x 3)
|
||||||
|
(defvar y x)
|
||||||
|
~~~
|
||||||
|
|
||||||
|
You can also define variables with operations. Which have polish notation.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
(defvar z (+ 3 4)) ;; z = 7
|
||||||
|
~~~
|
||||||
|
|
||||||
|
### Exercises
|
||||||
|
|
||||||
|
4.1: Define z using (define) and operations, then insert the value in
|
||||||
|
the buffer, using (insert)
|
Loading…
Reference in New Issue