#+AUTHOR: Simponic #+DESCRIPTION: An emacs presentation #+STARTUP: fold inlineimages * XKCD [[./images/real_programmers.png]] * What is Emacs? ** Emacs history *** From the [[https://www.emacswiki.org/emacs/EmacsHistory][EmacsWiki]]: + Emacs began at the Artificial Intelligence Laboratory at MIT. Beginning in 1972, staff hacker CarlMikkelsen added display-editing capability to TECO, the text editor on the AI Lab’s IncompatibleTimeSharingSystem (ITS) “Display-editing” meant that the screen display was updated as the user entered new commands; compare the behavior of "ed". In 1974, Richard Stallman added macro features to the TECO editor. + In 1976, Stallman wrote the first Emacs (“Editor MACroS”), which organized these macros into a single command set and added facilities for SelfDocumentation and to be extensible. TecoEmacs soon became the standard editor on ITS. ** Emacs is a super extensible "editor" that is written in ELisp *** Why is editor in quotes? **** Emacs does much more than edit text - To show itself off, Emacs by default comes with a full game of tetris! + Let me assert my nerd dominance by showing my tetris skills :) #+BEGIN_SRC emacs-lisp :results silent (tetris) #+END_SRC + It even works in the terminal! Albeit kinda squished - Besides being a great tool for when you're bored and your boss is looking away, Emacs can also: 1. Write emails with the mu4e package 2. Write documents with Org Mode (more on this later) 3. Be your window manager with the exwm package * I've given this a try, but I'm gonna stick with dwm 4. Browse the internet with eww! #+BEGIN_SRC emacs-lisp :results silent (eww "https://gnu.org") #+END_SRC I'm not entirely certain why one would do this, but hey it's there! *** Some Emacs Jargon Before continuing, I want to define some terms that are common in emacs. **** Weird key-binding notation? * "C" is control * "M" is alt/meta * "S" is shift * When there is a "-" between two keys that means press them together. * When there is a space, seperate them * "C-x C-f" means press control and x together, then control and f. - Or hold down control, press x, then press f while still holding it down **** What is a "buffer"? * A buffer is like a "tab" in most editors. You can swap between them with "C-x C-b" **** What is a "window"? * A window is where a buffer is drawn to. They are like the window splits in Vim * Cycle between windows with "C-x C-o" * Close a window with "C-x 0" **** What is a "frame"? * A frame is a whole instance of emacs. These are what you'd regularly refer as windows in normal computer discussions. You can move them around, minimize them (if you're using a tiling window manager), close them, etc. * Not very commonly used, though every once in a while you might come across a post asking about them **** Good-to-know keybindings 1. Quit emacs with "C-x C-c" 2. Find a file with "C-x C-f" 3. Save a file with "C-x C-s" 4. Accidentally pressed a different command and you have no idea what you're looking at? "C-g" will probably get you out of it. 5. "C-x u" to undo your typing 6. "C-space" to select a region and "C-g" to stop selecting it 7. With a region selected, cut it with "C-w" (this is also known as "killing") 8. Paste with "C-y" (this is also known as "yanking") 9. Window/buffer keybindings described above 10. Movement keys 11. Searching for commands + "C-h a" to find the keybindings for a command, or to search for a command + "C-h k" to find the name of a function tied to a keybinding ** What is ELisp? Elisp is a dialect of Lisp specifically written for Emacs. It makes it super easy to configure Emacs if you know just a little bit of Lisp. Lovers of Erik's scheme talk will feel right at home with ELisp! (everything is defined in terms of elisp functions, even moving the cursor and entering text) In fact, let's take a look at an example. Here I will split this window into three sections: #+BEGIN_SRC emacs-lisp :results silent (split-window-right) (split-window-below) #+END_SRC To cycle through these windows, I press "C-x C-o". As you can see, I cycle through in the order they were created. * However, what if I wanted to go back a window? - Emacs doesn't provide a keybinding for this by default, so let's make it in Elisp ourselves! #+BEGIN_SRC emacs-lisp :results silent (defun go-back-window () (interactive) (other-window -1)) #+END_SRC - Let's add a key binding for this! #+BEGIN_SRC emacs-lisp :results silent (global-set-key (kbd "C-c u") 'go-back-window) #+END_SRC * Why is Emacs better than Vim? ** Org mode Org mode is notorious for taking over programmer's lives. It's motto is even "your life, in plain text". You can create calendars, make Latex documents, make websites and blog posts with your own CSS, export to Open Office formats, really anything you're creative enough to figure out. ** Amazing package support Yeah yeah, vim has packages too... but they're not as cool as Emacs :) The emacs community is full of useful packages that are super easy to install *** MELPA This resource makes it even easier to install user packages *** SLIME Get into a great Lisp interactive session! *** Magit Great for git interaction! *** Company-mode For completion *** Undo-tree For undoing your work *** LSP-mode For running language servers * First steps in going forward with Emacs ** Are you a vim user converting from the dark side? Check out [[https://github.com/hlissner/doom-emacs][Doom Emacs]] to get started on your journey! ** Want to learn ELisp? Check out "Writing GNU Emacs Extensions". It's a really good O'Reilly book that you can access for free through USU. ** Just want to get started with Emacs? Dive right into emacs by installing it with whatever package manager you use. Read the guide that is accessible on the default emacs start page! It will teach you the basics. From there, just scrounge around the internet for resources. There are plenty. If you need a recommendation, you can start [[https://www.emacswiki.org/emacs/EmacsNewbie][at the emacs wiki.]] * The compromise ** Can't decide which is better (it's emacs)? Good news! You don't have to! Let's take a look at the "evil-mode" package. This is pretty much vim emulation within emacs. It is the best vim emulator ever; whatever vim can do, Evil Mode can do it too.