some words on elisp
authorqorg11 <qorg@vxempire.xyz>
Fri, 31 Jul 2020 12:52:53 +0000 (14:52 +0200)
committerqorg11 <qorg@vxempire.xyz>
Fri, 31 Jul 2020 12:52:53 +0000 (14:52 +0200)
emacs/1_Introduction/4_Emacs_Lisp/4.1.md [new file with mode: 0644]

diff --git a/emacs/1_Introduction/4_Emacs_Lisp/4.1.md b/emacs/1_Introduction/4_Emacs_Lisp/4.1.md
new file mode 100644 (file)
index 0000000..decc74c
--- /dev/null
@@ -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)