#+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 * DONE Episode 1 - Introduction CLOSED: [2022-01-09 Sun 19:03] ** 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 * DONE Episode 2 - Survive on the first day CLOSED: [2022-02-11 Fri 10:28] ** 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 * 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