***** DONE My Emacs and Org-mode Workshops at the GLT26 :blog:emacs:pim:software:education:open: CLOSED: [2026-03-26 Thu 15:56] SCHEDULED: <2026-04-10 Fri> :PROPERTIES: :CREATED: [2026-04-10 Fri 22:00] :ID: 2026-04-10-GLT26-Emacs-Workshops :END: :LOGBOOK: - State "DONE" from "STARTED" [2026-04-10 Fri 22:00] :END: Here are the shownotes of my [[https://www.linuxtage.at/en/][GLT]] 2026 workshops to Emacs and Org-mode: - [[https://pretalx.linuxtage.at/glt26/talk/ZDZNEX/][Einführung in die GNU Emacs Plattform]] - [[https://pretalx.linuxtage.at/glt26/talk/BAGVK7/][Einführung in GNU Emacs Org-mode]] There is no recording of this four hour session. - Surveys - Who is using Emacs already? a third - Who is totally new to Emacs? the rest ****** Introduction to the GNU Emacs Platform ******* History and Basics - https://en.wikipedia.org/wiki/Emacs - Emacs development began during the 1970s at the MIT AI Lab - Text Editor and Corrector (TECO) - E editor, written by Fred Wright - [[https://en.wikipedia.org/wiki/Richard_Stallman][Richard Stallman]] added a macro feature to the TECO display-editing mode - Steele and Stallman's finished implementation - The new version of TECO quickly became popular at the AI Lab and soon accumulated a large collection of custom macros whose names often ended in MAC or MACS, which stood for macro. - 1976: The resulting system was called EMACS, which stood for Editing MACroS or, alternatively, E with MACroS. Later, the use of EMACS as a recursive acronym for "EMACS Makes All Computing Simple" became popular; this fit in with the growing use of recursive acronyms for other versions of EMACS. - later: GNU Emacs, XEmacs, Aquamacs, Meadow, JOVE, edwin, ... - based on [[https://en.wikipedia.org/wiki/Emacs_Lisp][Emacs Lisp]] - does't use modes: https://www.nomodes.com/ → [[https://interactions.acm.org/archive/view/july-august-2012/a-personal-history-of-modeless-text-editing-and-cut-copy-paste][A personal history of modeless text editing and cut/copy-paste | ACM Interactions]] - the other editor beneath [[https://en.wikipedia.org/wiki/Vi_(text_editor)][vi]] (1976) or [[https://en.wikipedia.org/wiki/Vim_(text_editor)][Vim]] (1988) or [[https://en.wikipedia.org/wiki/Neovim][Neovim]] (2015) → that's really just an editor - Emacs = Emacs + modes → minor and major - Emacs is /old/. Therefore: it contains usage patterns that precedes Ctrl-X, Ctrl-V, Alt-F4, ... or [[https://en.wikipedia.org/wiki/Common_User_Access][IBM Common User Access]] (F1 for help, F5 for refresh, Menu with F10, ESC for Cancel, ...) - Different names for "Window", "File", ... → https://www.emacswiki.org/emacs/Window#window - Window → [[https://www.emacswiki.org/emacs/Frame][Frame]] - "File views" → [[https://www.emacswiki.org/emacs/Window][Windows]] (displaying [[https://www.emacswiki.org/emacs/Buffer][buffers]]) - Menu Bar → Menu Bar :-) - Task bar? → [[https://www.emacswiki.org/emacs/ModeLine][Mode Lines]] - *Emacs is not comparable to (almost) anything I've come across* so far. - And this is also a very good thing! - [[https://karl-voit.at/2017/02/10/evolution-of-systems/][Evolutional Steps of Computer Systems]] → "Information-Centric Systems" ******* Start Emacs - [[file:~/share/sting/2026-04-10 Emacs Workshops]] : emacs --init-directory=. -q ******* Emacs Tutorial - provided on the Emacs startup screen or =M-x help-with-tutorial= or =C-h t= - quick references - https://quickref.me/emacs.html - https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf → a classic ******* Manual Customization - start of the week 1. =M-x customize= → browse in menu: Parent groups: Environment Editing ... 2. =M-x customize= → search for "week" 3. =C-h v calendar-week-start-day= 4. in =init.el= : (setq-default calendar-week-start-day 1) - outdated double space after each sentence : (setq-default sentence-end-double-space nil) - Options → Customize Emacs → Custom Themes - =C-h k C-x s= → "save-some-buffers" - access code - copy code - add =(message "Hello GLT")= - evaluate and execute ******* Init File - create init file: : (find-file (expand-file-name "init.el" user-emacs-directory)) - open init file: : (find-file emacs-init-file) - learning Elisp - https://www.emacswiki.org/ official resource - https://bzg.fr/en/learn-emacs-lisp-in-15-minutes/ - Tips for the learning process: https://sachachua.com/blog/2013/03/learn-emacs-lisp-by-reading-emacs-lisp/ - =M-x functionname= → call defined Elisp functions - =M-: (message "Hi!")= → evaluate Elisp code - help on variables: =C-h v foobar= - help on functions: =C-h f foobar= - activate Elisp code/settings - mark region + =M-x eval-region= - =M-x eval-buffer= for whole buffer - restart Emacs ;-) - debugging issues in =init.el=: : emacs --debug-init - my configuration: https://github.com/novoid/dot-emacs/blob/master/config.org ******* Packages - package install: [[https://codeberg.org/martianh/mastodon.el][mastodon]] mpv #+BEGIN_SRC emacs-lisp (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (use-package mastodon :ensure t :config (setq mastodon-instance-url "https://graz.social" mastodon-active-user "graz_social_demo") ) #+END_SRC - start Mastodon demo (PW for encrypting the demo key in session = foobar9472!) - update all packages: =M-x list-packages= + =U x= ******* MISC - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Undo.html][Undo is special]] - Undo within region - [[https://www.masteringemacs.org/article/keyboard-macros-are-misunderstood][Keyboard macros]] - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Rectangles.html][Rectangle editing]] - [[https://www.masteringemacs.org/article/displaying-interacting-processes-proced][proced]] - process manager - [[https://en.wikipedia.org/wiki/Language_Server_Protocol][Language Server Protocol - Wikipedia]] - [[https://github.com/emacs-lsp/lsp-mode][lsp-mode]] - [[https://www.gnu.org/software/emacs/manual/html_mono/eglot.html][Eglot]] - [[https://magit.vc/][Magit]] - git made awesome - =my-title-capitalization()= - Emacs window management via [[https://depp.brause.cc/eyebrowse/][eyebrowse]] - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html][Emacs shell]] - [[https://www.gnu.org/software/tramp/][TRAMP (“Transparent Remote (file) Access, Multiple Protocol”)]] - Seamless SSH, SCP, sudo, and Docker file access within dired - Edit and manage remote files as if local - [[https://github.com/zk-phi/spray][Spray]] speed reading: =M-x spray-mode= - [[https://en.wikipedia.org/wiki/ELIZA][ELIZA - Wikipedia]] (1966!) → =M-x doctor= - all sorts of LLM integration modes ******* File Management - [[https://en.wikipedia.org/wiki/Dired][Dired]] - the very first file manager! - editing names as text: =C-x C-q= and confirm changes with =C-c C-c= - Deep integration with Emacs buffers and shell commands - (similar: [[https://linux.die.net/man/1/vidir][vidir]]) - [[https://github.com/jojojames/dired-sidebar][Dired-sidebar]] — Dired in a persistent sidebar - Leverages all existing dired keybindings and extensions - Tree-explorer feel with full dired power underneath - [[https://github.com/Fuco1/dired-hacks][Dired-hacks]] — Modular dired extension collection - dired-subtree for inline subdirectory expansion, dired-filter for dynamic filtering - dired-narrow for live fuzzy/regex narrowing of listings - [[https://github.com/kickingvegas/casual-dired][Casual Dired]] — Discoverable transient menus for dired - Transient-based UI that surfaces dired operations via menus - Lowers learning curve for dired's extensive keybindings - [[https://github.com/alexluigit/dirvish][Dirvish]] — Modern dired replacement - File preview, icons, and git integration out of the box - Extensible via dirvish extensions (fd-find, media preview) - [[https://github.com/sunrise-commander/sunrise-commander][Sunrise Commander]] — Orthodox dual-pane file manager - Inspired by Midnight Commander with tabs and tree navigation - Background file operations and batch processing - [[https://github.com/ralesi/ranger.el][Ranger.el]] — Miller-columns file navigation - Multi-pane parent/current/preview layout modeled after terminal ranger - Integrates with dired as a minor mode; includes minimal ~deer~ picker - [[https://github.com/Alexander-Miller/treemacs][Treemacs]] — Project-focused tree sidebar - Workspace/project grouping with deep LSP and Magit integration - Supports icons, follow-mode, and file watching - [[https://github.com/jaypei/emacs-neotree][Neotree]] — Simple sidebar tree browser - Lightweight toggleable display inspired by Vim's NERDTree - Icon support and minimal configuration needed ******* Web Browsers - [[https://www.gnu.org/software/emacs/manual/html_mono/eww.html][EWW (Emacs Web Wowser)]] — built-in text-based browser; renders HTML without CSS or JS, tightly integrated with Emacs buffers. - [[https://emacs-w3m.github.io][emacs-w3m]] — Emacs interface to the external =w3m= text browser; supports tabs, bookmarks, and async page loading. - [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Embedded-WebKit-Widgets.html][xwidget-webkit]] — built-in full WebKit rendering embedded in a buffer; requires Emacs compiled =--with-xwidgets=. - [[https://github.com/canatella/xwwp][xwwp]] — enhances =xwidget-webkit= with link-hinting (ace-jump style), smarter URL handling, and completion-framework integration. - [[https://github.com/emacs-eaf/emacs-application-framework][EAF (Emacs Application Framework)]] — embeds a full Chromium-based browser (and other apps) via Python/Qt6; supports ad-blocking and JS. - [[https://github.com/akirakyle/emacs-webkit][emacs-webkit]] — dynamic module approach to embedding WebKitGTK, with more control than xwidgets; now largely superseded by improved xwidgets in Emacs 29+. - [[https://thelambdalab.xyz/elpher][Elpher]] — client for Gopher, Gemini, and Finger protocols; not the regular web, but covers the "small web" from within Emacs. - [[https://www.gnu.org/software/w3][W3]] — the original Emacs browser written entirely in Elisp; largely obsolete but historically significant. - Interesting: [[https://nyxt.atlas.engineer/][Nyxt]] — not within GNU Emacs but as an independent GUI application that follows Emacs patterns deeply! ******* Emails - [[https://www.djcbsoftware.nl/code/mu/mu4e.html][mu4e]] - Search-based frontend to the =mu= indexer; fast, polished UI - Strong org-mode integration; composes HTML emails via org - Requires external sync tool (e.g. mbsync/offlineimap) + msmtp for sending - [[https://www.gnus.org][Gnus]] - Built into Emacs; handles both email and newsgroups (NNTP) - Monolithic or split-MUA capable; highly configurable - Steeper learning curve; can back notmuch as a search engine - [[https://notmuchmail.org][Notmuch (notmuch.el)]] - Tag-based, search-oriented; conversation/thread view - Does *not* send or move mail itself — pairs with msmtp/afew - Inspired by Gmail's philosophy; fast global search - [[http://www.gohome.org/wl/][Wanderlust]] - Pure Elisp; native IMAP support without external sync tools - Good for Windows users where mbsync is unavailable - Considered powerful but notoriously tricky to configure - [[https://www.gnu.org/software/emacs/manual/html_node/rmail/][Rmail]] - Oldest MUA, ships with GNU Emacs - Simple and minimal; limited modern protocol support - Uses the BABYL/mbox format; mostly for local/legacy use - [[https://mh-e.sourceforge.net][MH-E]] - Emacs frontend to the MH and nmh message-handling systems - Folder-based; each message is a separate file - Mature but niche; requires MH/nmh installed separately - [[https://www.mew.org][Mew]] - Secure email focus; built-in S/MIME and PGP support - Fast; designed around Emacs conventions - Less actively maintained than mu4e or notmuch - [[https://launchpad.net/vm][VM (View Mail)]] - Emacs-native; supports IMAP, POP, and local spool - Folder-based with threading; predates most alternatives - Development is slow; mostly legacy use today ******* Selected Resources - my Emacs articles: https://karl-voit.at/tags/emacs/ - [[https://karl-voit.at/2015/10/23/Emacs-is-not-just-an-editor][Emacs is Not Just An Editor]] - [[https://karl-voit.at/2017/06/03/emacs-history][My Personal Emacs History]] - [[https://karl-voit.at/2017/06/03/emacs-org][My Emacs Configuration In Org-mode]] - https://emacsconf.org/ → yearly online Emacs conference - https://www.masteringemacs.org/ → awesome book about Emacs → *recommended* ****** Introduction to GNU Emacs Org-mode :PROPERTIES: :END: ******* Org-mode History and Basics - https://en.wikipedia.org/wiki/Org-mode - initial release 2003 by [[https://staff.science.uva.nl/c.dominik/][Carsten Dominik]] for Emacs → around the same time as Markdown and [[https://en.wikipedia.org/wiki/Lightweight_markup_language#Comparison_of_language_features][other LMLs]] were introduced - https://orgmode.org/ - Current maintainer: Ihor Radchenko - social media: https://fosstodon.org/@yantar92 - his Emacs config: https://github.com/yantar92/emacs-config/blob/master/config.org - Ihor donations: https://liberapay.com/yantar92/ - Org-mode donations: https://liberapay.com/org-mode - Consists of two different things: 1. [[https://gitlab.com/publicvoit/orgdown/-/blob/master/doc/Tool-Support.org][Orgdown]]: a lightweight markup language 2. Org-mode: Elisp code within GNU Emacs to work with Orgdown information - it's important to differ between those two things! - [[https://karl-voit.at/2021/11/27/orgdown/][Orgdown - a New Lightweight Markup Standard for Text Documents]] ******* Orgdown - Syntax - The syntax is supported by *many* tools outside of GNU Emacs - [[https://gitlab.com/publicvoit/orgdown/-/blob/master/doc/Tool-Support.org][selection]]: [[https://pandoc.org/][pandoc]] being the most important one - https://gitlab.com/publicvoit/orgdown/ - https://gitlab.com/publicvoit/orgdown/-/blob/master/doc/Orgdown1-Syntax-Examples.org - file:/home/shared/shares/src/orgdown/doc/Orgdown1-Syntax-Examples.org ******* Org-mode - Features of the Elisp Implementation - https://github.com/novoid/org-mode-workshop/blob/master/featureshow/org-mode-teaser.org - file:/home/shared/shares/src/org-mode-workshop/featureshow/org-mode-teaser.org ******* Org-mode Demos :PROPERTIES: :END: *Disclaimer:* I've invested many years into my personal PIM setup. Most demos here are not considered to teach *how* it's done. Instead, they should teach you how to get creative to [[https://karl-voit.at/2021/01/18/tool-choices/][adapt the computer to your personal requirements]] yourself. - [[https://orgmode.org/worg/orgcard.html][Org-Mode Reference Card]] - Visibility cycling - =fill-or-unfill()= → =ESC q= - [[https://orgmode.org/manual/Properties-and-Columns.html][Properties]] - [[https://orgmode.org/manual/Column-View.html][Column View]] - =C-c C-x C-c= → =org-columns()= - =q= = quit - Contact mangement - =my-org-region-to-property()= - [[https://orgmode.org/manual/Refile-and-Copy.html][refiling]] - [[https://orgmode.org/manual/Capture.html][Capture]] - =org-tree-to-indirect-buffer()= → =C-c C-x b= - [[https://orgmode.org/manual/Sparse-Trees.html][Sparse trees]] - =my-add-description()= → =mymap u= - Firefox: https://github.com/kuanyui/copy-as-org-mode - Todo management - [[https://karl-voit.at/2021/03/06/task-lifecycle/][UOMF: My Current Life-Cycle of an Org Mode Task]] - =my-mark-as-project()= - =my-create-business-appointment-surrogate()= - progress indicators: [3/6] [50%] - [[https://orgmode.org/manual/Agenda-Views.html][Agenda]] - [[https://orgmode.org/manual/Tags.html][Tags]] - [[https://karl-voit.at/2022/01/29/How-to-Use-Tags/][How to Use Tags]] - [[https://karl-voit.at/2019/09/25/categories-versus-tags/][UOMF: Using Org Mode Categories Versus Tags]] - =my-dwim-insert-stuff()= - =my-rocketchat-insert-message-from-url()= - Example: I copy the link of the message to the system clipboard, invoke my Emacs shortcut and then it inserts: - [2026-03-26 Thu 09:06] [[https://chat.example.com/direct/5Y9if68XdLjkF6YDnCD2kwDBmNCyT?msg=DDSr03cnrhOJh][Message from firstname.lastname]]: This is the body of the mesasge in our Rocket.Chat. - =my-mastodon-insert-message-from-url()= → the process is similar to Rocket.Chat - same for email headers - Example: [[messageid:abcde12345@example.com][2026-04-07 08:45 First Last : Example subject]] from the clipboard snippet: #+BEGIN_EXAMPLE From: First Last To: me@example.com Subject: Example subject Date: Tue, 7 Apr 2026 10:45:31 +0200 Message-Id: #+END_EXAMPLE - Tables with spreadsheets - [[https://orgmode.org/manual/Org-Crypt.html][org-crypt]] - =org-copy-as-visible()= - [[https://orgmode.org/manual/Exporting.html][Exporting]] - PDF export - pandoc - slides export with reveal: file:/home/shared/shares/src/pim-lv/pim-slides.org - example chapter: "Basics of PIM 3 • Choosing A Tool" - Export → R B (in my setup) - [[https://github.com/abo-abo/hydra][hydra]] - [[https://github.com/joaotavora/yasnippet][yasnippet]] + [[https://github.com/Kungsgeten/yankpad][yankpad]] - [[https://plantuml.com/][PlantUML]] - =my-convert-region-from-markdown-to-orgdown()= - [[https://orgmode.org/worg/org-contrib/babel/][Org-babel]] - https://orgmode.org/manual/Working-with-Source-Code.html - Template: tbrief → LaTeX letter template via Org-mode template and babel 1. create new Org-mode file 2. insert yankpad template "tbrief" 3. provide letter data 4. =make pdf= in shell generates PDF of letter - Template of lecture - Bi-directional links between headings: [[https://karl-voit.at/2020/07/22/org-super-links][UOMF: Linking Headings With org-super-links (Poor-Man's Zettelkasten)]] - [[https://karl-voit.at/2019/11/16/UOMF-Linking-Headings/][UOMF: Linking Headings]] → =my-id-get-or-generate()= - [[https://karl-voit.at/2021/01/23/org-linker-edna/][UOMF: Easy Dependency Creation With org-linker-edna]] - [[https://gitlab.com/publicvoit/orgmode-link-demo][Karl Voit / GNU Emacs Org mode - link demo · GitLab]] - =my-bidirectional-link-to-parent-heading()= → links current heading with parent (before potential refiling) - [[https://karl-voit.at/2022/02/10/lfile][UOMF: Path-Independent Links to Local Files Via Locate]] - Links to emails, instant messenger, ... - [[https://karl-voit.at/tags/lazyblorg][lazyblorg]] → https://Karl-Voit.at as example page - [[https://github.com/novoid/Memacs][Memacs]] - [[https://github.com/novoid/org-contacts2vcard][org-contacts2vcard]] - [[https://codeberg.org/publicvoit/orgheadingnetwork][visualize sub-heading]] - mention only - file attachments - [[https://orgmode.org/manual/Embedded-LaTeX.html][embed LaTeX]] - [[https://orgmode.org/manual/Citation-handling.html][Citations]] - [[https://code.tecosaur.net/tec/emacs-everywhere][tec/emacs-everywhere: System-wide popup Emacs windows for quick edits - Code by TEC]] ******* Selected Resources - Motivation: - [[https://karl-voit.at/orgmode][Organize Your Life With Org-Mode]] - [[https://karl-voit.at/2019/09/25/using-orgmode][Blog Series: Using Org Mode Features (UOMF)]] - [[https://karl-voit.at/2020/01/20/start-using-orgmode][UOMF: How to Start With Emacs Org Mode]] - [[https://karl-voit.at/2021/08/30/the-org-mode-way][UOMF: The Right Way to Use Org Mode]] - [[https://karl-voit.at/2020/05/03/current-org-files/][UOMF: My Current Org Mode Files and Heading Structure]] - [[https://karl-voit.at/2017/01/15/org-clone-subtree-with-time-shift][UOMF: Recurring Events with Org Mode]] - [[https://orgmode.org/worg/][Hello Worg, the Org-Mode Community!]]