#+title: Emacs Workshop #+author: Simon Erfurth * Welcome [[./emacs-user.jpg]] * Plan 1. Emacs 101 2. Sådan træner du din +drage+ emacs 3. The power of emacs * Emacs 101 ** Hvorfor Emacs? 1. Det er ikke *bare* en text editor 2. Fuldstændig og naturligt keyboard baseret 3. Fuldstændig personaliserbart udseende og opførsel 4. org-mode <3 <3 <3 ** Emacs' Notation Hvad pokker er ~C-x C-f~? | Prefix | Meaning | |--------+---------| | C | Control | | M | Alt | | S | Shift | | s | super | | H | Hyper? | [[./keyboard.jpg]] ** Fem Fremragende Funktioner 1. Åben en fil: ~C-x C-f~ 2. Gem en fil: ~C-x C-s~ 3. Sæt mærke: ~C-SPC~ 4. +Copy/paste+ kill/yank: ~C-w, M-w, C-y, M-y~ 5. Undo ~C-/~ Og en knap så fremragende funktion: 6. Luk emacs: ~C-x C-c~ #+ATTR_ORG: :width 800 [[./8fingers.png]] ** Buffer-window-frame-mode - A Frame contains Windows showing Buffers - Major mode and minor modes #+ATTR_ORG: :width 800 [[./buffer-window-frame.jpg]] ** Flere Forrygende Funktioner *** Navigation | Keybinding | Action | |------------+---------------------------------| | C-f/C-b | forward/backward-char | | C-n/C-p | next/previous-line | | C-a/C-e | beginning/end-of-line | | M-f/M-b | forward/backward-word | | M-}/M-{ | forward/backward-paragraph | | C-v/M-v | page-up/down | | M- | beginning/end-of-buffer | | C-s/C-r | isearch-forward/isarch-backward | *** Filer | Keybinding | Action | |------------+---------------| | C-x C-w | Write-to-file | *** Windows | Action | Keybinding | |--------+----------------------| | C-x 2 | split-horizontally | | C-x 3 | split-vertically | | C-x 0 | delete-window | | C-x 1 | delete-other-windows | | C-x o | other-window | *** Buffers | Keybinding | Action | |------------+------------------| | C-x b | switch-to-buffer | | C-x C-b | list-buffers | | C-x k | kill-buffer | *** Editing | Keybinding | Action | |-------------+-----------------------------| | C-k | kill-line | | M-l/M-u/M-c | down/upcase/capitalize-word | | M-%/M-S-5 | query-replace | *** Kommandoer og hjælp | Keybinding | Action | |------------+--------------------------| | M-x | execute-extended-command | | C-h f | describe-function | | C-h k | describe-keybinding | | C-h v | describe-variable | Prøv M-x + * Sådan træner du din +drage+ emacs Alt er lige til, når baaare lige du har lært lidt elisp. ** Theme Lige nu ligner Emacs noget fra forrige årtusinde. *** Skift dit tema ~M-x load-theme RET wombat RET~ *** Behold dit tema ved en genstart - Brug din init file! ~/.emacs.d/init.el - Emacs-lisp som bliver kørt ved opstart #+begin_src emacs-lisp (load-theme 'wombat) #+end_src ~C-x C-e~ for at evaluere en sexp ** Create your own functions! *** open-line-above En funktion der starter en blank linje over den nuværende - Ide: gå til start af linjen, derefter indsæt et linjeskift - Funktionsdefinitions template i emacs-lisp: #+begin_src emacs-lisp (defun fun (args) "docstring" (interactive "P") ;; Indsæt kode her! ) #+end_src *** duplicate-line En funktion der laver en kopi af den nuværende linje - copy-from-above-command - save-excursion *** key-bindings Global key bindings er super nemme! #+begin_src emacs-lisp (global-set-key (kbd "C-c d") 'my-duplicate-line) #+end_src og det er lokale key bings også! #+begin_src emacs-lisp (define-key org-mode-map (kbd "C-c v") 'emacs-version) #+end_src ** Pakker På nuværende tidspunkt kan i jo passende gå i gang med at programmere alle de funktioner i godt kunne tænke jer. Eller i kunne finde en pakke der gør det for jer. *** M-x list-packages Viser pakker fra GnuELPA, men rigtige mange ligger kune i mepla #+begin_src emacs-lisp (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) #+end_src *** Bedre M-x! - Installer Helm Enten fra pakke-menuen eller bruge ~M-x install-package RET helm RET~ - Bind ~helm-M-x~ til ~M-x~ #+begin_src emacs-lisp (require 'helm) (global-set-key (kbd "M-x") 'helm-M-x) #+end_src - Se hvad Helm har af kommandoder: ~M-x helm~ - helm-buffers-list - helm-find-files * The power of emacs #+ATTR_ORG: :width 300 [[./workflow.png]] ** Org-mode - markup - lists *** tables [[~/Dropbox/PhD/administration/administration.org]] *** exporting ~C-c C-e~ *** litterate configuration [[~/.emacs.d/config.org]] ** magit Måske den bedtes gitclient der er? - ~C-x g~ - tryk ~?~ for hjælp - git-gutter #+ATTR_ORG: :width 300 [[./git.png]] ** AUCTeX + cdLaTeX + reftex - og pdf-tools ** Keyboard-macros F3 + F4 ** alt det din anden tekst editor kan - og så noget mere - projectile - minimap (https://github.com/dengste/minimap) - snippets (YAS-snippets) - highlight-region - multiple-cursors - tree-style navigation bar (neotree) - Rainbow-delimiters - expand-region - avy - lsp-mode ** games and +Obama+ RMS-care - ~M-x tetris~ - hanoi, - snake, - bubbles, - dunnet, - ... - ~M-x doctor~ ** Church of Emacs #+ATTR_ORG: :width 300 [[./St_IGNUcius.jpg]] ** mx-butterfly #+ATTR_ORG: :width 800 [[./real_programmers.png]] * Spørgsmål? #+ATTR_ORG: :width 500 [[./vim-is-too-mainstream-im-switching-to-emacs.jpg]] * COMMENT Notes ** Emacs 101 *** Hvorfor emacs 1. Det er en lisp oversætter, så der er ingen grænser på hvad den kan. Bedste git client, org-mode, email, eller spil! Giver også mulighed for at efterligne vim, en ide, osv 2. Baser på modes, og dejlig nemt at lave om på. discoverable med describe-bindings or which-key 3. Fonts udseende osv, men også hooks, advice, og overskrivelse 4. Literate programming, spreadsheets, tables, latex, exporting *** Emacs' Notation *** Fem Fremragende Funktioner - Kopierings historik - Undo er fra US tastatur, så lav det om (hvis ikke det allerede er på C-_?) *** Buffer-windows-frame-mode *** Flere Forrygende Funktion - Fungere som en cheat-sheet. - Kun for hele emacs, mode-specific kommer senere **** Kommandoer og Hjælp - Brug M-x og så tryk tab for at se nogle funktioner. Muligvis er IVY inkluderet som standard? ** Sådan træner du din emacs *** Theme *** open-line-above #+begin_src emacs-lisp (defun open-line-above () "Inserts a clear line above" (interactive) (save-excursion (move-beginning-of-line 1) (newline-and-indent))) #+end_src ** Description Denne workshop giver en kort introduktion til hvordan man bruger emacs, demonstrere hvor nemt det er at begynde at tilpasse emacs til at være ens ideelle editor, og endeligt så demonstreres nogle af de alle lækreste grunde til at bruge emacs. Emacs er snart 45 år gammel, men ikke desto mindre er der stadig en stor brugerbase, som ikke kun består af gamle støvede COBOL-programmøre. Faktisk har langt størstedelen af emacs brugere brugt emacs i under 10 år [https://emacssurvey.org/2020/]. Måske skyldes det at ingen andre editors kan tilpasses ligeså meget og ligeså nemt som emacs? Eller måske er det fordi at emacs kan ting som ingen andre editors kan? Eller er det i virkeligheden begge dele, og meget, meget mere? Målet med denne workshop er ikke at deltagerne bliver 100 meteres mestre i emacs, men at deltagerne bliver komfortable nok med emacs til at de selv kan arbejde videre med emacs, og selv kan begynde at tilpasse emacs. Deltagelse i workshoppen har ingen forudsætninger, men det anbefales at medbringe en computer med emacs installeret, så man har mulighed for at efterprøve nogen af dagens resultater. ** Discarded To start evaluate #+begin_src emacs-lisp (beacon-mode 0) (read-only-mode 1) (text-scale-increase 2) (org-tree-slide-mode) #+end_src and to finish (assuming presentation was quit with q) #+begin_src emacs-lisp (beacon-mode 0) (read-only-mode 0) (text-scale-increase 0) #+end_src This was incorporated into configuration