2021-12-21 21:18:32 +00:00
|
|
|
#+TITLE: How to build an editor with Emacs Lisp
|
|
|
|
#+SEQ_TODO: TODO(t/!) NEXT(n/!) BLOCKED(b@/!) | DONE(d%) CANCELLED(c@/!) FAILED(f@/!)
|
|
|
|
#+TAGS: READER(r) MISC(m)
|
|
|
|
#+STARTUP: logdrawer logdone logreschedule indent content align constSI entitiespretty overview
|
|
|
|
|
2022-01-09 20:14:50 +00:00
|
|
|
* DONE Episode 1 - Introduction
|
|
|
|
CLOSED: [2022-01-09 Sun 19:03]
|
2021-12-21 21:18:32 +00:00
|
|
|
** What is it all about?
|
|
|
|
- Create an editor, development environment and Window Manager (yeah window manager) and ...
|
|
|
|
- GNU/Emacs is amazing
|
|
|
|
- Spread the joy
|
|
|
|
- Guide for contributors
|
|
|
|
- A guide for people who wants to learn some Lisp
|
|
|
|
|
|
|
|
** The Plan
|
|
|
|
- Parallel video series to *How to build a compiler with LLVM and MLIR*
|
|
|
|
- Git branches
|
|
|
|
- No live coding
|
|
|
|
- Start from Emacs and Jump to FG42
|
|
|
|
- Feel free to contribute
|
|
|
|
|
|
|
|
** FG42 and a bit of history
|
|
|
|
- It's my:
|
|
|
|
+ Editor/IDE
|
|
|
|
+ Email client
|
|
|
|
+ Window Manager
|
|
|
|
+ File Manager
|
|
|
|
+ Terminal Emulator
|
|
|
|
+ IRC client (at some point)
|
|
|
|
+ TODO manager
|
|
|
|
+ "Office suit" (air qoute)
|
|
|
|
+ ....
|
|
|
|
- Started on 2010 in a train
|
|
|
|
- I'm working on the V3
|
|
|
|
- Requirements
|
|
|
|
+ Emacs >= 27.1
|
|
|
|
|
|
|
|
- Website: https://fg42.org/
|
|
|
|
- Repository: https://devheroes.codes/FG42
|
|
|
|
- Website: https://lxsameer.com
|
|
|
|
- Email: lxsameer@gnu.org or lxsameer@lxsameer.com
|
2022-02-14 10:15:37 +00:00
|
|
|
* DONE Episode 2 - Survive on the first day
|
|
|
|
CLOSED: [2022-02-11 Fri 10:28]
|
2022-01-09 20:14:50 +00:00
|
|
|
** Why bother?
|
|
|
|
** Why GNU/Emacs?
|
|
|
|
*** People might say because of
|
|
|
|
- Org-mode
|
|
|
|
- LSP support
|
|
|
|
- Support for many many languages
|
|
|
|
- It's lightweight
|
|
|
|
- Tons of plugins
|
|
|
|
- ...
|
|
|
|
*** I'd say
|
|
|
|
- Coz it's a lisp environment with an editor attached to it
|
|
|
|
- Lisp is the difference
|
|
|
|
+ It's super easy to extend/hack emacs
|
|
|
|
+ In compare to other editors
|
|
|
|
- You can do pretty much whatever your like in ELisp
|
|
|
|
- It's like a framework for building an editor
|
|
|
|
|
|
|
|
** FAQ
|
|
|
|
*** What is the difference between Doom, Spacemacs, FG42 and ...?
|
|
|
|
Different editors based on Emacs
|
|
|
|
*** Which one should I use?
|
|
|
|
*** How to install Emacs packages?
|
|
|
|
|
|
|
|
** UI Basics & Basic Concepts
|
|
|
|
- Window
|
|
|
|
- Frame
|
|
|
|
- Mode line
|
|
|
|
- Buffers
|
|
|
|
- Mini buffer/Echo area
|
|
|
|
- Point
|
|
|
|
- Major mode
|
|
|
|
- Minor mode
|
|
|
|
|
|
|
|
** Basic Keybindings
|
|
|
|
How to read key bindings? Here is an example =C-x M-e 4=, it means press =x= key while
|
|
|
|
holding =Control= and then press =e= key while pressing down =Alt= and finally press =4=.
|
|
|
|
|
|
|
|
- Emacs tutorial =C-h t= (or https://www.gnu.org/software/emacs/tour/)
|
|
|
|
- Quit emacs =C-x C-c=
|
|
|
|
- Abort =C-g=
|
|
|
|
- Get Help =C-h= family
|
|
|
|
+ =C-h f=
|
|
|
|
+ =C-h v=
|
|
|
|
+ =C-h m=
|
|
|
|
+ =C-h k=
|
|
|
|
+ =C-h a=
|
|
|
|
|
|
|
|
- Run a command (function) =M-x=
|
|
|
|
- Visit a file =C-x C-f=
|
|
|
|
- Search in Buffer =C-s=
|
|
|
|
- Save buffer =C-x C-s=
|
|
|
|
- Select region =C-SPC=
|
|
|
|
- Copy =M-w=
|
|
|
|
- Cut(killing) =C-w=
|
|
|
|
- Paste(yanking) =C-y=
|
|
|
|
- Kill buffer =C-x k=
|
|
|
|
- Switch buffer =C-x b=
|
|
|
|
- Undo =C-/=
|
|
|
|
- Eval expression =C-x C-e=
|
|
|
|
- =describe-mode=
|
|
|
|
** Lisp basics
|
|
|
|
- Expressions everywhere
|
|
|
|
- Code a data structure
|
|
|
|
- Almost everything in Lisp evaluates to themselves except:
|
|
|
|
+ lists
|
|
|
|
+ Symbols
|
|
|
|
+ ...
|
|
|
|
- Lisp laws:
|
|
|
|
1. Everything in Lisp is an expression and evaluation of an expression
|
|
|
|
means replacing it with its value
|
|
|
|
|
|
|
|
2. Almost everything in Lisp evaluates to themselves except:
|
|
|
|
- Lists
|
|
|
|
- Symbols
|
|
|
|
- Quotes
|
|
|
|
- ...
|
|
|
|
-
|
|
|
|
3. List evaluation
|
2022-02-14 10:15:37 +00:00
|
|
|
* Episode 3 - Lisp Basics
|
|
|
|
** FAQ:
|
|
|
|
- How to install Emacs?
|
|
|
|
+ Just make sure to have *Emacs >= 27.1*
|
|
|
|
- What's the routine to use Emacs ?
|
|
|
|
+ Don't use Emacs like how you use other Editors.
|
|
|
|
+ There is no limits(Almost).
|
|
|
|
|
|
|
|
- How evaluate forms?
|
|
|
|
+ *C-x C-e* at the end of any expression and anywhere
|
|
|
|
+ ielm
|
|
|
|
+ Batch mode
|
|
|
|
|
|
|
|
** So Fare:
|
|
|
|
|
|
|
|
*** Lisp rules:
|
|
|
|
1. Lisp is made of Expressions and they evaluate to a value.
|
|
|
|
2. All the expression types evaluates to themselves with some exceptions.
|
|
|
|
3. List evaluation
|
|
|
|
|
|
|
|
*** We will continue with Lisp basics for few episodes
|
|
|
|
** Variables
|
|
|
|
- How to define variables and constants
|
|
|
|
- Set the value of a variable
|
|
|
|
- Global and local scope
|
|
|
|
- Lexical bindings vs Dynamic bindings
|
|
|
|
+ =-*- lexical-binding: t; -*-=
|
|
|
|
|
|
|
|
** Functions
|
|
|
|
- How to define functions
|
|
|
|
- vs macros
|
|
|
|
- vs special forms
|