├── .emacs
├── README.md
├── README.org
├── images
├── image-0-font-picker.png
├── image-0-set-font-size.png
├── image-1-first-launch.png
├── image-10-agenda-launcher.png
├── image-11-agenda-view-small.png
├── image-11-agenda-view.png
├── image-12-agenda-in-use.png
├── image-13-changing-todo-state.png
├── image-14-adding-state-change-note.png
├── image-15-work-in-progress.png
├── image-16-blocked-by-bob.png
├── image-17-link-to-doc.png
├── image-18-todo-2-is-done.png
├── image-19-agenda-views.png
├── image-2-installing-icons.png
├── image-20-agenda-log-view.png
├── image-21-set-deadline.png
├── image-22-todo-3-in-progress.png
├── image-23-new-todo.png
├── image-24-creating-check-boxes.png
├── image-25-adding-tables.png
├── image-3-fonts-installed.png
├── image-4-org-default.png
├── image-40-better-defaults.png
├── image-41-standard-defaults.png
├── image-5-better-defaults.png
├── image-6-blank-slate.png
├── image-7-capture-template.png
├── image-8-new-meeting.png
└── image-9-filling-out-a-meeting.png
└── org-better-defaults.org
/.emacs:
--------------------------------------------------------------------------------
1 | (setq custom-file "~/.emacs.d/custom.el")
2 | (if (file-exists-p custom-file)
3 | (load custom-file))
4 |
5 | (require 'package)
6 | (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
7 | (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") )
8 | (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/") )
9 |
10 | ;; Added by Package.el. This must come before configurations of
11 | ;; installed packages. Don't delete this line. If you don't want it,
12 | ;; just comment it out by adding a semicolon to the start of the line.
13 | ;; You may delete these explanatory comments.
14 | (package-initialize)
15 |
16 | (unless (package-installed-p 'use-package)
17 | (package-refresh-contents)
18 | (package-install 'use-package))
19 |
20 | ;; Enable use-package
21 | (eval-when-compile
22 | (require 'use-package))
23 |
24 | (setq use-package-always-ensure t)
25 |
26 | (use-package emacs
27 | :init
28 | (set-language-environment "UTF-8")
29 | (set-default-coding-systems 'utf-8-unix)
30 | (setq confirm-kill-processes nil) ; Stop confirming the killing of processes
31 | (setq use-short-answers t) ; y-or-n-p makes answering questions faster
32 | (setq read-process-output-max (* 1024 1024)) ; Increase the amount of data which Emacs reads from the process
33 | (setq gc-cons-threshold 100000000)
34 | (setq lsp-idle-delay 0.500)
35 | (setq inhibit-startup-screen t)
36 | )
37 |
38 | (add-to-list 'image-types 'svg)
39 |
40 | (use-package all-the-icons
41 | :if (display-graphic-p))
42 |
43 | (use-package auto-highlight-symbol
44 | :config
45 | (global-auto-highlight-symbol-mode t)
46 | )
47 |
48 | (use-package better-defaults)
49 |
50 | ;; Comment tags become colorized when followed by a colon.
51 | ;; Example: // BUG: We don't check for null return values
52 | (use-package comment-tags)
53 | (autoload 'comment-tags-mode "comment-tags-mode")
54 | (setq comment-tags-keymap-prefix (kbd "C-c t"))
55 | (with-eval-after-load "comment-tags"
56 | (setq comment-tags-keyword-faces
57 | `(("TODO" . ,(list :weight 'bold :foreground "Cyan"))
58 | ("FIXME" . ,(list :weight 'bold :foreground "Red"))
59 | ("BUG" . ,(list :weight 'bold :foreground "Red"))
60 | ("HACK" . ,(list :weight 'bold :foreground "Yellow"))
61 | ("INFO" . ,(list :weight 'bold :foreground "LimeGreen"))
62 | )
63 | )
64 | (setq comment-tags-comment-start-only t
65 | comment-tags-require-colon t
66 | comment-tags-case-sensitive t
67 | comment-tags-show-faces t
68 | comment-tags-lighter nil))
69 | (add-hook 'prog-mode-hook 'comment-tags-mode)
70 |
71 | (use-package compat)
72 |
73 | ;; auto format on save
74 | (use-package format-all)
75 | (format-all-mode)
76 |
77 | ;; Highlight matching parens
78 | (use-package highlight-parentheses)
79 |
80 | ;; To make viewing your exported markdown code easier
81 | (use-package markdown-mode)
82 |
83 | ;; Makes your modeline prettier
84 | (use-package mode-icons
85 | :config
86 | (mode-icons-mode)
87 | )
88 |
89 | (use-package org-bullets) ;; TODO: Move this to the org section
90 |
91 | ;; Makes installing packages easier
92 | (use-package paradox)
93 | (paradox-enable)
94 |
95 | (use-package paredit)
96 |
97 | ;; Colorize your parens for easier viewing
98 | (use-package rainbow-delimiters)
99 | (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
100 |
101 | (use-package which-key
102 | :config
103 | (which-key-mode)
104 | )
105 |
106 | (use-package helm
107 | :init
108 | (helm-mode 1)
109 | (progn (setq helm-buffers-fuzzy-matching t))
110 | :bind
111 | (("C-c h" . helm-command-prefix))
112 | (("M-x" . helm-M-x))
113 | (("C-x b" . helm-buffers-list))
114 | (("C-c b" . helm-bookmarks))
115 | (("C-c g" . helm-grep-do-git-grep)) ;; Search using grep in a git project
116 | )
117 |
118 | ;;Describe keyboard bindings
119 | (use-package helm-descbinds
120 | :bind ("C-h b" . helm-descbinds)
121 | )
122 |
123 | (if (not (file-directory-p (substitute-in-file-name "$HOME/org")))
124 | (let ((org-dir (substitute-in-file-name "$HOME/org")))
125 | (make-directory org-dir))
126 | )
127 |
128 | (setq org-agenda-files '("~/org"))
129 |
130 | (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
131 |
132 | (use-package treemacs
133 | :hook (after-init . treemacs)
134 | :bind
135 | (:map global-map
136 | ("M-0" . treemacs-select-window)
137 | ("C-x t t" . treemacs)
138 | ("C-x t C-t" . treemacs-find-file)
139 | ("C-x t M-t" . treemacs-find-tag))
140 | )
141 |
142 | (use-package doom-modeline
143 | :ensure t
144 | :hook (after-init . doom-modeline-mode)
145 | )
146 |
147 | ;; Start with the window maximized
148 | (toggle-frame-maximized)
149 |
150 | ;; show the menu bar
151 | (menu-bar-mode t)
152 |
153 | ;; show columns in addition to lines
154 | (setq column-number-mode t
155 | initial-scratch-message nil
156 | visible-bell t
157 | show-paren-mode 1)
158 |
159 | ;; show line numbers
160 | (when (version<= "26.0.50" emacs-version )
161 | (global-display-line-numbers-mode))
162 |
163 | ;; make PC keyboard's Win key or other to type Super or Hyper, for emacs running on Windows.
164 | (setq w32-pass-lwindow-to-system nil)
165 | (setq w32-lwindow-modifier 'super) ; Left Windows key
166 |
167 | ;; Navigate split windows using SHIFT + ARROW KEY
168 | (windmove-default-keybindings)
169 |
170 | ;; Default to y/n instead of yes/no
171 | (defalias 'yes-or-no-p 'y-or-n-p)
172 |
173 | ;; Cleanup whitespace
174 | (add-hook 'before-save-hook 'delete-trailing-whitespace)
175 |
176 | (define-key global-map "\C-cl" 'org-store-link)
177 | (define-key global-map "\C-ca" 'org-agenda)
178 | (define-key global-map "\C-cc" 'org-capture)
179 |
180 | ;; Better indents
181 | (use-package org-indent
182 | :ensure nil
183 | :diminish
184 | :hook (org-mode . org-indent-mode)
185 | :custom
186 | (org-indent-indentation-per-level 4))
187 |
188 | (use-package org-autolist
189 | :hook (org-mode . org-autolist-mode)
190 | )
191 |
192 | (setq org-log-done 'time)
193 |
194 | (setq light-mode nil)
195 |
196 | (if light-mode
197 | (setq
198 | ;; TODO States
199 | todo-color "DarkOrange"
200 | in-progress-color "DeepSkyBlue3"
201 | blocked-color "Firebrick1"
202 | done-color "Green3"
203 | wont-do-color "Green3"
204 |
205 | ;; Tags
206 | critical-color "red1"
207 | easy-color "turquoise4"
208 | medium-color "turquoise4"
209 | hard-color "turquoise4"
210 | work-color "royalblue1"
211 | home-color "mediumPurple2"
212 | )
213 | (setq
214 | ;; TODO States
215 | todo-color "GoldenRod"
216 | in-progress-color "Cyan"
217 | blocked-color "Red"
218 | done-color "LimeGreen"
219 | wont-do-color "LimeGreen"
220 |
221 | ;; Tags
222 | critical-color "red1"
223 | easy-color "cyan3"
224 | medium-color "cyan3"
225 | hard-color "cyan3"
226 | work-color "royalblue1"
227 | home-color "mediumPurple1"
228 | )
229 | )
230 |
231 | (use-package org
232 | :pin gnu
233 | :custom
234 | (org-confirm-babel-evaluate nil) ;; Don't prompt before running code in org
235 | (org-src-fontify-natively t) ;; Use syntax highlighting in source blocks while editing
236 | (org-src-tab-acts-natively t) ;; Tabs act as 4 spaces in source blocks
237 | (org-src-preserve-indentation t) ;; Preserving indentation in source blocks
238 | )
239 |
240 | (setq org-return-follows-link t)
241 |
242 | (setq org-todo-keywords
243 | '((sequence "TODO(t)" "IN-PROGRESS(i@/!)" "BLOCKED(b@/!)" "|" "DONE(d@/!)" "WONT-DO(w@/!)" ))
244 | )
245 |
246 | (setq org-capture-templates
247 | '(
248 | ("t" "TODO Item"
249 | entry (file "~/org/todos.org")
250 | "* TODO [#B] %? %^g\n"
251 | :empty-lines 0)
252 |
253 | ("j" "Journal Entry"
254 | entry (file+datetree "~/org/journal.org")
255 | "* %?"
256 | :empty-lines 1)
257 |
258 | ("m" "Meeting"
259 | entry (file+datetree "~/org/meetings.org")
260 | "* %? :meeting:%^g \n** Attendees\n - \n** Notes\n** Action Items\n*** TODO [#A] "
261 | :tree-type week
262 | :clock-in t
263 | :clock-resume t
264 | :empty-lines 0)
265 |
266 | ("n" "Note"
267 | entry (file+headline "~/org/notes.org" "Random Notes")
268 | "** %?"
269 | :empty-lines 0)
270 | ))
271 |
272 | (setq org-tag-alist
273 | '(
274 | (:startgroup . nil)
275 | ("easy" . ?e)
276 | ("medium" . ?m)
277 | ("difficult" . ?d)
278 | (:endgroup . nil)
279 |
280 | (:startgroup . nil)
281 | ("@work" . ?w)
282 | ("@home" . ?h)
283 | ("@anywhere" . ?a)
284 | (:endgroup . nil)
285 |
286 | ("CRITICAL" . ?c)
287 | ))
288 |
289 | (defun air-org-skip-subtree-if-priority (priority)
290 | "Skip an agenda subtree if it has a priority of PRIORITY.
291 |
292 | PRIORITY may be one of the characters ?A, ?B, or ?C."
293 | (let ((subtree-end (save-excursion (org-end-of-subtree t)))
294 | (pri-value (* 1000 (- org-lowest-priority priority)))
295 | (pri-current (org-get-priority (thing-at-point 'line t))))
296 | (if (= pri-value pri-current)
297 | subtree-end
298 | nil)))
299 |
300 | ;; This is a function used by the daily agenda function
301 | (defun air-org-skip-subtree-if-habit ()
302 | "Skip an agenda entry if it has a STYLE property equal to \"habit\"."
303 | (let ((subtree-end (save-excursion (org-end-of-subtree t))))
304 | (if (string= (org-entry-get nil "STYLE") "habit")
305 | subtree-end
306 | nil)))
307 |
308 | (setq org-agenda-skip-deadline-if-done t)
309 |
310 | ;; Additional Agenda configurations can be defined here, right now there is only this one
311 | (setq org-agenda-custom-commands
312 | '(
313 | ;; Daily Agenda - most used
314 | ("d" "Daily agenda and all TODOs"
315 | ((tags "PRIORITY=\"A\""
316 | ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
317 | (org-agenda-overriding-header "High-priority unfinished tasks:")))
318 | (agenda "" ((org-agenda-span 7)))
319 | (alltodo ""
320 | ((org-agenda-skip-function '(or (air-org-skip-subtree-if-priority ?A)
321 | (air-org-skip-subtree-if-priority ?C)
322 | (org-agenda-skip-if nil '(scheduled deadline))))
323 | (org-agenda-overriding-header "ALL normal priority tasks:")))
324 | (tags "PRIORITY=\"C\""
325 | ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
326 | (org-agenda-overriding-header "Low-priority Unfinished tasks:")))
327 | )
328 | ((org-agenda-compact-blocks nil)))
329 | ))
330 |
331 | (setq org-todo-keyword-faces
332 | `(
333 | ("TODO" . (:weight bold :foreground ,todo-color ))
334 | ("IN-PROGRESS" . (:weight bold :foreground ,in-progress-color ))
335 | ("BLOCKED" . (:weight bold :foreground ,blocked-color ))
336 | ("DONE" . (:weight bold :foreground ,done-color ))
337 | ("WONT-DO" . (:weight bold :foreground ,wont-do-color ))
338 | )
339 | )
340 |
341 | (setq org-tag-faces
342 | `(
343 | ("CRITICAL" . (:weight bold :foreground ,critical-color ))
344 | ("easy" . (:weight bold :foreground ,easy-color ))
345 | ("medium" . (:weight bold :foreground ,medium-color ))
346 | ("hard" . (:weight bold :foreground ,hard-color ))
347 | ("@work" . (:weight bold :foreground ,work-color ))
348 | ("@home" . (:weight bold :foreground ,home-color ))
349 | )
350 | )
351 |
352 | (setq org-hide-emphasis-markers nil)
353 | (add-hook 'org-mode-hook 'visual-line-mode)
354 |
355 | (let* ((variable-tuple
356 | (cond ((x-list-fonts "ETBembo") '(:font "ETBembo"))
357 | ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro"))
358 | ((x-list-fonts "Lucida Grande") '(:font "Lucida Grande"))
359 | ((x-list-fonts "Verdana") '(:font "Verdana"))
360 | ((x-family-fonts "Sans Serif") '(:family "Sans Serif"))
361 | (nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro."))))
362 | (base-font-color (face-foreground 'default nil 'default))
363 | (headline `(:inherit default :weight bold :foreground ,base-font-color)))
364 |
365 | (custom-theme-set-faces
366 | 'user
367 | `(org-level-8 ((t (,@headline ,@variable-tuple))))
368 | `(org-level-7 ((t (,@headline ,@variable-tuple))))
369 | `(org-level-6 ((t (,@headline ,@variable-tuple))))
370 | `(org-level-5 ((t (,@headline ,@variable-tuple))))
371 | `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1))))
372 | `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25))))
373 | `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5))))
374 | `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75))))
375 | `(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil))))
376 | )
377 | )
378 |
379 | (defun my/modify-org-done-face ()
380 | (setq org-fontify-done-headline t)
381 | (set-face-attribute 'org-done nil :strike-through t)
382 | (set-face-attribute 'org-headline-done nil
383 | :strike-through t))
384 |
385 | (eval-after-load "org"
386 | (add-hook 'org-add-hook 'my/modify-org-done-face))
387 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Table of Contents
3 |
4 | 1. [Quick Start Guide](#org405689e)
5 | 2. [A Quick Overview](#org877af4e)
6 | 1. [Welcome New Org Mode Users](#orgd45b7ca)
7 | 2. [Org Mode with Default Settings](#orgdb5fd99)
8 | 3. [Org Mode with Better Defaults](#org01cf8f1)
9 | 3. [What Is This And Why Do I Need It?](#org09db159)
10 | 1. [Learning Org Mode is Hard](#org9d7938e)
11 | 2. [About This Repo](#org4304a37)
12 | 3. [Summary of Features](#org7c47c76)
13 | 4. [Installation](#org6f909fb)
14 | 1. [Installing the File](#org2ea7ba3)
15 | 2. [Selecting the Treemacs Project Root](#org32ec711)
16 | 3. [Light or Dark Mode](#org707644f)
17 | 4. [Increasing the Font Size](#org66f9d73)
18 | 5. [Installing Icons](#org55fd410)
19 | 5. [I've Installed It, Now What?](#orgab0012f)
20 | 1. [A Brief Overview of Org Mode Syntax](#org001f06d)
21 | 2. [An Intro to this Org Mode Tutorial](#org1f63fef)
22 | 3. [Tracking Work with TODOs](#org466104d)
23 | 4. [Understanding the Agenda](#org19d02b8)
24 | 5. [Using Capture Templates](#org282fbee)
25 | 6. [A Practical Walkthrough](#orgba2d40d)
26 | 1. [Monday Morning Meeting](#org68416b1)
27 | 2. [Filling in the Action Items](#org3733fec)
28 | 3. [View the Agenda](#org0967950)
29 | 4. [Start Working on TODO #1](#org084c72b)
30 | 5. [Start Working on TODO #2](#org1320e31)
31 | 6. [Start Working on TODO #3](#orga718600)
32 | 7. [A New TODO](#orga1464af)
33 | 8. [Working the TODO](#org39781e3)
34 | 9. [Make a note](#orgd2bf779)
35 | 10. [Record a journal entry](#org6288e81)
36 | 11. [Filtering Tags](#org0e2fbe3)
37 | 7. [Keyboard Shortcuts List](#orgccea809)
38 | 8. [Beyond This Tutorial](#orgc4eb3b9)
39 | 9. [Further Reading](#org6f3ad5a)
40 |
41 |
42 |
43 |
44 |
45 | # Quick Start Guide
46 |
47 | For more details see below, but this is the minimum you need to make this work.
48 |
49 | 1. Backup your `.emacs` file if you have one (`mv ~/.emacs ~/.emacs.bak`)
50 | 2. Download the `.emacs` file from this repo
51 | 3. Move it to your home directory (`mv ~/Downloads/.emacs ~/`)
52 | 4. You are done, now restart `emacs` and take a look at the shortcut guide below
53 |
54 |
55 |
56 |
57 | # A Quick Overview
58 |
59 |
60 |
61 |
62 | ## Welcome New Org Mode Users
63 |
64 | So you want to use Org Mode, but you don't have 2 years to devote to teaching yourself Lisp? No problem. This repo was created just for you. Here you will find a simple solution that requires no additional lisp configuration on your part to work. It is ideal for users who are completely new to both Emacs and Org Mode. Simply drop this config file into your home directory, restart Emacs, and you are ready to go.
65 |
66 |
67 |
68 |
69 | ## Org Mode with Default Settings
70 |
71 | What Org Mode looks like with the default settings:
72 |
73 | 
74 |
75 |
76 |
77 |
78 | ## Org Mode with Better Defaults
79 |
80 | And what Org Mode looks like with these Better Defaults:
81 |
82 | 
83 |
84 |
85 |
86 |
87 | # What Is This And Why Do I Need It?
88 |
89 |
90 |
91 |
92 | ## Learning Org Mode is Hard
93 |
94 | A lot of Emacs related documentation assumes you already know quite a bit about the system and the documentation that is geared for new users is often so densely packed with information that it can be difficult to orient yourself. In short, it can be overwhelming. This is especially true for new users who don't care about "THE POWER OF EMACS(™)" but instead just want to try out Org Mode.
95 |
96 | The good news is that Org Mode works well right from the start. The bad news is that its default settings aren't particularly user-friendly, and without significant customization, its usefulness may not be immediately apparent. I experienced this firsthand while assisting a new user with Org Mode. My Emacs configuration file is over a thousand lines long, with several hundred lines dedicated solely to Org Mode. When this new user compared their basic Org Mode setup to mine, they were disappointed by the lack of features and customization. They wondered why their setup was so plain compared to mine and how they could achieve similar results.
97 |
98 | I sent them the link to my other Org Mode tutorial on designing your Org Mode configuration from scratch, but they didn't want that. In fact, they had no idea what they wanted. The only thing they were sure of was that they wanted it to be functional now. Not in a year, not after they had learned lisp, right now.
99 |
100 | After some thought I decided that rather than suggesting they spend a year experimenting to understand what they needed, which would likely lead them to seek other solutions, I decided to simplify the process. I stripped down my Emacs configuration to focus solely on Org Mode—removing all unrelated features like code completion, language servers, linters, and git integration. I then streamlined this setup to be as user-friendly as possible.
101 |
102 | After helping the new user install this pared-down configuration and providing minimal instructions, they were thrilled with the results. This experience made me realize that many others could benefit from straightforward guidance in getting started with Org Mode. If you're in the same boat, this repository might be just what you need.
103 |
104 |
105 |
106 |
107 | ## About This Repo
108 |
109 | This repo aims to help new Emacs users become productive with Org Mode. It includes two main components: a tutorial in this README that guides you through using Org Mode with a real-world example, and a `.emacs` file that enables all the features discussed in the tutorial.
110 |
111 | Please note, this is not a comprehensive Emacs or Org Mode tutorial. It focuses on the basics to get you started and does not cover every feature of Org Mode. There are too many features and I simply can't cover them without turning this into a small textbook. For a more in-depth understanding, I recommend referring to the [Official Org Mode Manual](https://orgmode.org/manual/).
112 |
113 |
114 |
115 |
116 | ## Summary of Features
117 |
118 | The `.emacs` file has two main parts to it. The first part deals with improving how Org Mode looks and functions at a basic level. The second part of this configuration is the default values provided. For more info and specific implementation details, look over the `org-better-defaults.org` file in this repo. Here is a list of most of the primary enhancements provided:
119 |
120 | **Improvements**
121 |
122 | - sets up default package repos
123 | - performance enhancements
124 | - auto completion
125 | - minor usability tweaks
126 | - treemacs (helps visualize headings in org files)
127 | - defines default org mode directory to be `~/org`
128 | - improved Keybindings
129 | - default indentation
130 | - auto lists
131 | - auto timestamps
132 | - expanded TODO options
133 | - 4 custom capture templates
134 | - 7 custom tags
135 | - 1 custom agenda
136 | - colorized TODOs
137 | - colorized Tags
138 | - better fonts
139 | - better bullets
140 |
141 |
142 |
143 |
144 | # Installation
145 |
146 | These steps will walk you through how to make your version of Emacs look and feel exactly like the version shown in all the screen shots here. I would recommend new users follow these steps so everything looks the same as the tutorial to minimize confusion. However, afterwards feel free to install additional themes, fonts, or UI packages.
147 |
148 |
149 |
150 |
151 | ## Installing the File
152 |
153 | To make your version of Emacs and Org Mode look like the screenshots below, download the `.emacs` file in this repo and either copy the contents into your existing `.emacs` file or overwrite it entirely, then restart Emacs. The first time you do this Emacs is going to download and install a bunch of files. There will be lots of install and configuration messages printed to various buffers and the entire thing might look a bit intimidating. Once you've installed everything it might look something like this:
154 |
155 | 
156 |
157 | Don't worry if yours looks different. Just let the install finish (it will stop print log messages when its done) and then close it and restart Emacs. Things should look much better at that point.
158 |
159 |
160 |
161 |
162 | ## Selecting the Treemacs Project Root
163 |
164 | You will get a Treemacs dialog box when you launch Emacs for the first time with this new configuration. Don't be alarmed, Treemacs is just a nice file browser. Select the `org` directory located in your home directory and click OK. Don't worry if you don't already have an `org` directory, Emacs will create one for you. This is where Emacs is going to expect to find all of your `.org` files.
165 |
166 | Treemacs is incredibly useful not only because it displays your files, but because it also shows you the headings contained within any Org files it finds. This is a wonderful way to easily scan through an Org document. You will see the Treemacs file browser on the left hand side of all the screenshots here.
167 |
168 |
169 |
170 |
171 | ## Light or Dark Mode
172 |
173 | I have found that most users prefer their text editor to have a dark theme and so all the screenshots here will reflect that. The theme used in this tutorial is called `deeper-blue` and it is one of the default themes that come with Emacs. To change the theme follow these steps:
174 |
175 | 1. From the top menu select: **Options -> Customize Emacs -> Custom Themes**
176 | 2. Check the box beside `deeper-blue`
177 | 3. Click **Save Theme Settings**
178 | 4. Type `q` to quit that menu
179 | 5. Restart Emacs to properly load the theme
180 |
181 | The font colors defined in the `.emacs` file of this repo are different for light or dark modes. By default it is set to dark mode, however if you would like to change it simply open up your `.emacs` file and find this line:
182 |
183 | (setq light-mode nil)
184 |
185 | and change it to this:
186 |
187 | (setq light-mode t)
188 |
189 | Then restart Emacs. The colors should now be more in keeping with a light mode style.
190 |
191 |
192 |
193 |
194 | ## Increasing the Font Size
195 |
196 | The last UI option that you might want to change is the font size. By default Emacs sets the font size to 10 point. That is pretty small. If, like me, you are old enough that your eyes don't like that, then here is how you increase the font.
197 |
198 | 1. From the top menu select: **Options -> Set Default Font…**
199 | 2. Select `Source Code Pro Regular` as the font
200 | 3. Increase the font size to however large you would like
201 | 4. Press the **Select** button
202 | 5. From the top menu select: **Options -> Save Options**
203 |
204 | That's it. From now on Emacs should default to your larger font selection.
205 |
206 |
207 |
208 |
209 | ## Installing Icons
210 |
211 | Part of the new defaults you have installed is support for All The Icons. This allows Emacs to add pretty icons to various parts of your UI to make things look nicer. However, before this will work you need to download the icons it will display. To do that follow these steps:
212 |
213 | 1. Press the `Alt` key and the `x` key to bring up the command buffer
214 | 2. Type `all-the-icons-install-fonts` and press return
215 | 3. That's it, just give it a minute while the files download
216 |
217 | That is it. Now your system should look like the one used in this tutorial.
218 |
219 |
220 |
221 |
222 | # I've Installed It, Now What?
223 |
224 | Once you've installed the config file and restarted Emacs, you're ready to start being productive! Follow these steps: First, read through this section to grasp the key concepts. Next, go through the tutorial to see how these concepts are applied in real-world scenarios. Finally, apply what you've learned to your own notes to boost your productivity.
225 |
226 |
227 |
228 |
229 | ## A Brief Overview of Org Mode Syntax
230 |
231 | Before we get much further we need to review Org Mode's syntax and highlight how it differs from Markdown. For example, Org Mode uses stars (`*`) to show indentation while Markdown uses the hash sign (`#`). In both cases more stars or hashes indicates deeper levels. To better illustrate this I've included a table showing the most common formats in each style.
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 | | FORMAT |
246 | ORG MODE |
247 | MARKDOWN |
248 |
249 |
250 |
251 |
252 |
253 | | 1st level heading |
254 | * heading 1 |
255 | # heading 1 |
256 |
257 |
258 |
259 |
260 | | 2nd level heading |
261 | ** heading 2 |
262 | ## heading 2 |
263 |
264 |
265 |
266 |
267 | | 3rd level heading |
268 | *** heading 3 |
269 | ### heading 3 |
270 |
271 |
272 |
273 |
274 | | Bold |
275 | *bold* |
276 | **bold** |
277 |
278 |
279 |
280 |
281 | | Italic |
282 | /italic/ |
283 | *italic* |
284 |
285 |
286 |
287 |
288 | | Strike-through |
289 | +strike+ |
290 | ~~strike~~ |
291 |
292 |
293 |
294 |
295 | | Code |
296 | ~code~ |
297 | `code` |
298 |
299 |
300 |
301 |
302 | | Quote |
303 | =quote= |
304 | > quote |
305 |
306 |
307 |
308 |
309 | | Bullet |
310 | - bullet |
311 | - bullet |
312 |
313 |
314 |
315 |
316 | | Link |
317 | [[link][title]] |
318 | [title](link) |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 | ## An Intro to this Org Mode Tutorial
327 |
328 | In this tutorial, I will use the example of managing work tasks to demonstrate Org Mode. I’ve found that realistic examples help make tutorials less abstract and more understandable. Throughout this section, I’ll explain three core concepts:
329 |
330 | — TODO Items
331 |
332 | - The Agenda
333 | - Capture Templates
334 |
335 | Within the context of a typical job. By the end of this tutorial, you'll know how to create TODOs, track them using the Agenda, set up custom capture templates, and use tags to organize your tasks.
336 |
337 | We’ll start by discussing these three essential concepts, and by the end, you should have a solid grasp of Org Mode’s basics.
338 |
339 |
340 |
341 |
342 | ## Tracking Work with TODOs
343 |
344 | TODOs are the fundamental building blocks of Org Mode. They represent tasks you want to accomplish and can include various details such as creation date, current status, priority, descriptions, checklists, and tags. TODO items help you manage work tasks, personal chores, or project steps.
345 |
346 | By default, TODO items have two states: TODO and DONE. However, this configuration adds several additional states to support a wider range of use cases.
347 |
348 | Here’s an example of what a TODO item entry might look like in your `todos.org` file. This is how it appears in raw text if you were to view it in a different text editor.
349 |
350 | * TODO Create 3rd Quarter Presentation :finance:gary:
351 | I need to create a presentation detailing the end of quarter numbers. The regional manager Gary will be there so it should be impressive. This presentation also needs to include projections for the next two quarters.
352 |
353 | Here is what it looks like with the Org Mode Better Defaults:
354 |
355 | 
356 |
357 |
358 |
359 |
360 | ## Understanding the Agenda
361 |
362 | The Agenda provides a comprehensive view of all your TODOs in one place. It consolidates TODOs from various files, such as `work.org` and `personal.org`, and organizes them by status, upcoming tasks, and completed items. The Agenda also includes a calendar to show TODO deadlines and completion dates.
363 |
364 | Here is an example of the agenda in action.
365 |
366 | 
367 |
368 | To access the Agenda, press `C-c a` and choose the view you want. For this tutorial, select the `Daily Agenda and All TODOs` option by typing `d` at the prompt. Don't worry if this seems unclear now; detailed instructions on using Org Mode will be provided in the Practical Walkthrough section.
369 |
370 |
371 |
372 |
373 | ## Using Capture Templates
374 |
375 | To quickly recap: TODOs hold your data, and the Agenda helps you view it. But how do you enter your data efficiently? There are two methods:
376 |
377 | 1. Manual Entry: Open the file, scroll to the end, press Return, type `* TODO`, and then enter your information. This method works and the Agenda view will display your manually entered TODOs without issue.
378 |
379 | 2. Capture Templates: This method is more efficient, especially if you have multiple TODOs to enter. Instead of repeatedly typing the same format for each TODO, Capture Templates streamline the process.
380 |
381 | Capture Templates allow you to quickly enter data using predefined formats, eliminating the need to manually input repetitive boilerplate text. By default, Org Mode includes only one generic task template, but this configuration offers four useful templates:
382 |
383 | - TODO (`t`)
384 | - Journal Entry (`j`)
385 | - Meeting (`m`)
386 | - Note (`n`)
387 |
388 | Each template captures a specific type of data into a designated Org file. To use a Capture Template, press `C-c c` to open the list of available templates. Then, press the corresponding letter for the template you want to use, as indicated in the list above.
389 |
390 |
391 |
392 |
393 | # A Practical Walkthrough
394 |
395 | By now, you should have installed the new configuration file and reviewed the summary of Org Mode’s core features. In this walkthrough, we’ll put it all together to help you get the most out of Org Mode by managing a sample workload.
396 |
397 | In this scenario, it’s Monday morning and you have a meeting scheduled to discuss a potential new purchase order for components needed for the next quarter. Depending on the meeting's outcome, you may need to consult with others, gather data, write a report, and submit your findings to your boss by Thursday for her review, so she can place the order by Friday. We’ll guide you through each step of this work week and demonstrate how to use Org Mode to organize your tasks and track your progress.
398 |
399 | To start, launch Emacs. You don't need to open a specific file because the Org Mode Capture Template can be accessed from anywhere. Once Emacs opens, you’ll see two panes: Treemacs on the left showing a folder named `org`, and the `*scratch*` window on the right displaying "Welcome to Emacs!" Click in the scratch window—this is where you’ll perform most of the actions in this tutorial.
400 |
401 | 
402 |
403 |
404 |
405 |
406 | ## Monday Morning Meeting
407 |
408 | It's Monday morning, and you’re about to attend a meeting with your boss and a few coworkers to discuss a potential purchase order. Your company needs to ensure that certain expensive and complex parts are ordered on time. If there aren’t enough parts available when needed, production will halt for a month while more are made. Conversely, ordering too many parts will be costly to store until they’re needed. The meeting will help determine the best course of action. Before the meeting starts, you decide to track the details in Org Mode by creating a new meeting entry.
409 |
410 | Here’s how to get started:
411 |
412 | **Open Capture Template**
413 | Press `Control` and while holding it, press `c`, then release both keys. Next, press `c` again. This launches the Capture Template. In Emacs notation, this is written as `C-c c` which is read as "press Control and c, then release both keys, and press c again".
414 |
415 | 
416 |
417 | **Select Meeting Template**
418 | After launching the Capture Template, you’ll see four options. Press `m` to choose the Meeting template. This will open a meeting template and activate the mini buffer with the label `:Tags:`. For this example, type `planning` and press Return.
419 |
420 | 
421 |
422 | **Fill in Meeting Details**
423 | Enter a title for your meeting. Since this is a planning meeting, type `Purchase Planning`. Under the heading Attendees, list the names of the people present. Type `Alice` (your boss), press Return, then type `Bob`, press Return, and finally type `Carla`. Press Return twice to finish the list.
424 |
425 | **Take Meeting Notes**
426 | Navigate to the `Notes` section and begin filling in details discussed in the meeting. For example:
427 |
428 | `Alice needs to have a report by Thursday at 11am at the latest. Talk to Bob first, he can find out how many parts we have. Carla knows how many parts we will need for next quarter's projects. I can find out how much of our budget is left for future expenditures by looking at our accounts.`
429 |
430 | Of course you can take whatever notes you want in whatever structure you want, but for the moment we are keeping it simple since this is a quick meeting.
431 |
432 | **Record Action Items**
433 | At the end of the meeting, Alice assigns you tasks: get numbers from Bob and Carla, check available funds, and write a recommendation by Thursday at 11am. These tasks should be entered under the `Action Items` heading in the template. Not every meeting will have `Action Items`, so you can delete this section if it's not applicable before saving your meeting notes.
434 |
435 |
436 |
437 |
438 | ## Filling in the Action Items
439 |
440 | For our first action item we are going to create a TODO for finding out the current stock levels. Fill out the rest of the first action item with this `Get current stock levels from Bob` and then hit `return`. On this new line let's add some details such as `I need to talk to Bob and get a detailed breakdown of how many parts we have used this quarter as well as how many are left.`. We now have our first action item filled out.
441 |
442 | For the next TODO type `C-return` to start a new heading and then type in `TODO [#A]` to create the TODO. Call this action item `Get projected orders from Carla` and then hit return. The details of this will be `Talk to Carla to get the next quarter's projections. I need to know how any parts we are projected to use as well as how many we can lose and still meet our critical orders.` and upon typing that, hit `C-return` one last time to create the final TODO.
443 |
444 | Once again type in the TODO template that you used for the previous item. The title of this TODO will be `Compile results and send final report to Alice`. Hit return to get to the details of this TODO and add the lines `Collect all relevant data, summarize it, add my recommendations, and then email it to Alice before 11am on Thursday.` By the end you should have something that looks like this:
445 |
446 | 
447 |
448 | Now that all the action items have been finished and the meeting is over, we can save this meeting. To do that hit `C-c C-c` and it will file it away. Once you do that you will see a new file appear underneath the org folder on the left. This new file called `meetings.org` was created when you saved your new meeting.
449 |
450 |
451 |
452 |
453 | ## View the Agenda
454 |
455 | At this point we have created a meeting and 3 TODOs, which means our Agenda View will now have something to display. Let's open up the Agenda View and see what it looks like. To launch the Agenda hit `C-c a` to bring up the Agenda selector.
456 |
457 | 
458 |
459 | Press `d` to activate the Daily Agenda view. Your screen should now look like this:
460 |
461 | 
462 |
463 | As you can see, the new TODO items we just created are there. Click into the Agenda view and move your cursor onto the line with your first TODO. Once it is there, hit the `TAB` key and it should jump you to the source of the TODO.
464 |
465 | 
466 |
467 | Any item in the Agenda view can always be followed back to its source. Remember, the Agenda View isn't really for editing things, it just compiles a list of things that already exist.
468 |
469 | You might be wondering where the meeting you just created is. After all, you see the 3 action items, but where is the meeting that you were just in? Well, the meeting won't show up by default for reasons that you don't care about right now. However, there is a really useful setting we can turn on to show extra details. Navigate to the `Week-agenda` and put your cursor anywhere within the calendar. This won't work if your cursor is in the TODO sections as this is strictly a calendar setting. Once there, hit `v` to bring up the View options in the mini buffer. We want to enable the log view, so to do that, hit the `l` key. Now we see our meeting~ And as a bonus we also see the time we spent in this meeting. When you first started the capture template for the meeting a clock was started. When the meeting was saved (or filed) the clock stopped and the elapsed time was computed. The agenda view can then take this info and display it in a nicely formatted view. This is especially helpful when you have a week full of meetings. You can see at a glance how much time you spent in meetings and what those meetings involved. Hitting the `tab` key when on the same line as a meeting will take you to that entry.
470 |
471 |
472 |
473 |
474 | ## Start Working on TODO #1
475 |
476 | You should now have 3 different TODOs to visible in your Agenda. Let's start with the first one, requesting info from Bob. If it isn't open already, go ahead and open up the `meetings.org` file and navigate to the first TODO. Right now it is still in the `TODO` state, but since we are now working it, we need to change it's state. While your cursor is on that TODO heading (it can be anywhere on the line) hit `C-c C-t` to change the state. The mini buffer will pop up and give you a bunch of options you can change it to. In our case we want to set it to `IN-PROGRESS` so hit the `i` key.
477 |
478 | 
479 |
480 | When that happens a new buffer will appear asking you to insert a note for the state change. At the prompt enter the text `Reaching out to Bob first` and hit `C-c C-c` to save the note.
481 |
482 | 
483 |
484 | Once you do this you should be returned to your original buffer where you can see that the TODO named `Get current stock levels from Bob` looks a lot different now. The state has changed from `TODO` to `IN-PROGRESS`, there is a timestamp denoting the state change, and now your note appeared too. Let's add some more details by navigating to the end of this TODO and hit return twice. On this new line we can add more notes. So enter our latest note `Emailed Bob and requested more info.` which describes the work we are doing. For the sake of this example we are going to assume you then opened up your company's email client and sent Bob an email asking for the specific data you needed for your report.
485 |
486 | 
487 |
488 | So far so good. We are making progress! Alas for us we get an auto generated email from Bob alerting us to the fact that Bob is out for the rest of the day due to a medical procedure. Since he won't return until tomorrow, we can't do anything else on this front. That shouldn't be a big problem though, since it is only Monday, he will be back on Tuesday, and the report is due Thursday, we still have time. Before we move on to another TODO item, we should really mark this to indicate what happened. To do that put your cursor back on the `IN-PROGRESS` line and hit `C-c C-t` to bring up the state change buffer. Now we are going to hit `b` to set it to blocked. Once again a we are going to add a note to describe this state change. So add the text `Bob is out of the office until tomorrow` and then hit `C-c C-c` to save it. Now our task is set to `BLOCKED` and we have a nice note describing why.
489 |
490 | 
491 |
492 | If you click in the Org Agenda pane on the right and then press `r` it will refresh your view. Doing so will now show that your first TODO is blocked while the others remain in their default state. Since we can't do anything more here, let's move on to our next TODO item.
493 |
494 |
495 |
496 |
497 | ## Start Working on TODO #2
498 |
499 | We hit a dead end on our first TODO so now we are moving on to the second task. Just like in the previous TODO we want to change the state from `TODO` to `IN-PROGRESS` and add a note. Reread the previous section if you forgot how to do that. For the note you can use `Talking to Carla since Bob is gone` and then save it like you did the last one. So at this point we have 3 TODOs that are all in different states. Click over to your Agenda pane (if you closed it you can easily reopen it with `C-c a d`) and then type `r` to refresh the view. You should now see that your 3 TODOs are indeed all in different states.
500 |
501 | As we did before, navigate to the end of the body of this TODO, hit return twice, and update it with what you are currently doing. Here we could add something like `Emailing Carla for her data while I wait for Bob to get back to me.` which summarizes the steps you are taking. Once again we assume that you contacted Carla over your company's email system and requested the information you require. However this time we are in luck because Carla responds fairly quickly with a link to the company's intranet where the data you want is stored. You click on the link, view the data, extract what you need, and add it to the Word document you working on. Of course, you could write everything in Org Mode and then export it to one of a dozen formats (and in fact this is what I do for my job) but for beginners I would use Org to track my notes and then something like Word to format the actual document.
502 |
503 | 
504 |
505 | It is important to note that Carla sent us a very important piece of information (the URL to the document) that is only contained in her email. While this is fine for today's task, this might be a document we want to reference later. We could save it to our local file system, bookmark it in our browser, or flag the email, but all of those solutions lack context. It is incumbent on you to remember the details of why you have this file saved. We could just copy and past the URL into our notes, but there is a better solution.
506 |
507 | The URL in question is `http:intranet.company.com/financial/reports/Q3-reports.xls` and we want to save this to our current TODO. Start by copying the URL and then navigating to the end of the TODO. Hit return twice to start a new line and then type `C-c C-l` to create a new link. The mini buffer will appear with link options, but you are going to type `C-y` to paste your copied URL in. Once it is pasted, hit return. Now the mini buffer will prompt you to enter a description. Here you can type `Intranet link to Carla's planning document` and hit return. This is now a functioning URL that can be clicked on to open the link in your default web browser.
508 |
509 | Since Carla has responded with the information we needed and we logged the results of that conversation, this TODO is complete. All we should have to do is mark it as `DONE` and we can move to something else. To mark it as done go to the `IN-PROGRESS` line and hit `C-c C-t` to open up the state selector. From here type `d` to select done. Enter a note such as `Got everything I needed from Carla` and then hit `C-c C-c` to save it.
510 |
511 | 
512 |
513 | At this point if you look in the Agenda view and press `r` you will see your 1st TODO that is blocked and your 3rd TODO that you haven't started, but where is your 2nd TODO? The completed item is there, it just isn't shown by default. Move your cursor to somewhere in the Calendar (it won't work if you are in one of the TODO lists) and press `v` to bring up the view buffer.
514 |
515 | 
516 |
517 | From there hit `l` to enable the log view. Now you will see two things. First, you will see your TODO item that you recently completed and second you will notice that your meeting has appeared! And as a bonus, the time you spent in this meeting appears beside it. You can easily filter your meetings to see how your week looks like as well as produce reports showing how much time you spend in meetings.
518 |
519 | 
520 |
521 |
522 |
523 |
524 | ## Start Working on TODO #3
525 |
526 | Before we do any work on this task we need to update the meta data associated with it. If you recall from the description this is due on Thursday (remember in this example it is Monday) at 11am. And while it is good that we recorded this deadline in the body of this TODO, it would be even better if there was a way of integrating this information into our TODO so it could be tracked in the Agenda View. Well good news for us, there is a way of handling deadlines.
527 |
528 | 
529 |
530 | Start by navigating to the third and final action item called `Compile results and send final report to Alice` and hit `C-c C-d` to bring up the deadline selector. Now there are several different ways we could enter a date. We could type it out in one of several formats or we could click on the desired day in the calendar up top. However, we are lazy so we are going to specify the deadline in the easy manner possible. Since it is Monday and we want to make our deadline for Thursday at 11am, when the mini buffer appears so we can select a date, simply enter `+3d 11am` and hit return. This creates a deadline 3 days in the future at 11am. Now when we refresh the Agenda View we will see that this TODO is special! Because it has a deadline marked on it.
531 |
532 | We are going to assume that Bob has returned on Tuesday and gotten us the information we need. So in that case we can change the first TODO from `BLOCKED` and to `DONE`. At this point we can actually start work on the 3rd TODO.
533 |
534 | So, the deadline has been added so go ahead and set the state to `IN-PROGRESS` just like we've done twice before. Add a note of your choice explaining what you started working on. After the state has been changed we could add additional notes to this TODO that might describe the order we wanted our report to be in, a list of graphs and tables to include, or links to templates that should be used for these types of company reports. You can also make new subheadings by hitting `C=return` and then hitting `tab` to move the heading over. Subheadings should be labeled in ways that make sense to your task. You can easily rearrange headings by holding the `alt` key and pressing the `up` or `down` arrow.
535 |
536 | 
537 |
538 |
539 |
540 |
541 | ## A New TODO
542 |
543 | At this point in the tutorial we will assume that two days have passed and you completed your report and sent it to Alice. You can now close those remaining TODOs and then refresh your Agenda to verify that they are closed. Now that all of our current tasks are complete we can focus on a new email from Alice. In it she tells us that she liked our report so much that she wants us to generate another report that forecasts the purchasing requirements of the next fiscal year. It also needs to have more details, more graphics, and should be presented to management in a week at the end of the month planning meeting. Since this new task didn't come in a meeting we are going to create a new TODO using the TODO capture template.
544 |
545 | Fire up the Capture Template with `C-c c` only this time hit `t` to create a new TODO. For the tags in the mini buffer put `report` and hit return. You will now see a new TODO template and your cursor will be on the heading line. Now we can enter a heading. Type in `Create yearly report and presentation` as your title. You can now press the down key or press `C-n` to go to the next line. Here you are going to enter the details `I need to create another forecasting report as well as a presentation and present my findings to management in one week.` Once you've added your description it is time to save your TODO. Press `C-c C-c` to save it.
546 |
547 | 
548 |
549 | As soon as you save your new TODO entry a file will appear on the left hand side of your screen under the `org` folder. This new file is called `todos.org` and it has been created in the `org` directory, which itself is helpfully located in your home directory. Go ahead and click on the `todos.org` file in Treemacs and hit `tab`. It will expand the file in Treemacs and show you the headings. At the moment there is only one heading, the TODO you created. We want to get a closer look at this TODO, so with the `todos.org` file still highlighted, hit return. This will open the file `todos.org` in the other window and allow you to edit it.
550 |
551 | 
552 |
553 |
554 |
555 |
556 | ## Working the TODO
557 |
558 | This TODO is going to behave in the same way that the action items worked. You can change the state, set a deadline, add notes, etc. I encourage you to set it to `IN-PROGRESS`, add your own note, and add a few lines describing what you are going to do. After you do that we are going to look at some more advanced ways of organizing your notes.
559 |
560 | At this point you have set your TODO to a state showing that you are currently working on it. You have added a note explaining the state change, now you can add some more details. Let's start with a new subheading called `Subtasks`. Press `C-Return` to get a new heading and then press `tab` once to make it a 2nd level heading. From here, type `Subtasks [/]` and then hit return. We are going to create an auto-incrementing list. On the line after your heading, type `- [ ] Create Tasks` and press return. Two interesting things should have happened. A new check box item should have appeared on the next line, and the `Subtasks` heading should now have a count of the check box items we created. To get out of the auto checkbox mode just hit return twice. Don't worry if the count looks wrong, that will get fixed shortly.
561 |
562 | Go ahead and fill out a few more check box items until your list looks like the image below. We want our subtasks to include `Create Tasks`, `Gather Notes`, `Find Sources`, `Create Graphics`, `Create Rough Draft`, `Create Final Draft`, and `Test Presentation`.
563 |
564 | Once you've finished adding all the subtasks, go back to the first subtask called `Create Tasks`. With your cursor anywhere on that line hit `C-c C-c`. Look at that! There is now an `X` next to our completed subtask and the progress counter has incremented. This is useful!
565 |
566 | Things are really starting to take shape. We now have one sub heading that tracks all of our subtasks, now we need another heading for our presentation notes. So hit `C-Return` and then `tab` to create a new 2nd level sub heading and name this one `Presentation Notes`. Here you would add notes on what you want to say in your presentation. Slides to use, people to thank, etc. Each subheading should relate to a different part of this project.
567 |
568 | Additional subheadings can be created as needed to further reflect other sources, ideas, or notes you wish to take. I've added a simple table as an example of how Org Mode treats tabular data. Read up on tables in the Org Manual to see all the amazing things it can do.
569 |
570 | 
571 |
572 |
573 |
574 |
575 | ## Make a note
576 |
577 | At this point in the Tutorial we have covered most of the major concepts so I'm going to just end on a few simple things Org Mode can do for you. Perhaps the simplest thing is just a basic note. This note doesn't have a TODO associated with it, nor does it have a deadline, or even a tag. It is just a simple way of remembering something. I like to keep a notes file filled with random things that don't really belong anywhere. Since you can setup Emacs to search your org files (go look up Projectile among others) it is easy to find a specific note once you know what you are looking for.
578 |
579 | In this case start the capture template with `C-c c` and then hit `n` to create a new note. You can give it a tag, but you don't need to. For this note call it `Office Supplies`, hit return, and then add the note `The code for the supply closet is 223344`. File your note with the usual `C-c C-c` and you have created a simple note. While it is hardly as exciting as the other features we've covered, it is still a useful thing to have.
580 |
581 |
582 |
583 |
584 | ## Record a journal entry
585 |
586 | Lastly, the journal entry capture template. This feature is meant to be a quick and easy way to log accomplishments at your job. If you find it useful consider looking up some of the Org Mode journal packages that offer more features. But for this case, this is meant as a very simple solution that allows you to jot down what you are doing on any given day. You can add as little or as much detail as you want. The goal is only to have an easy to reference record of what you do each day on the job. I personally have found this to be very useful at the end of the year when writing up my accomplishments for a performance review. It is very helpful to see what I've done throughout the year.
587 |
588 |
589 |
590 |
591 | ## Filtering Tags
592 |
593 | So far we have only talked about creating content in Org Mode and then viewing it in the Agenda. However, the Agenda View has quite a bit of hidden functionality that we never talked about. For example, it has a very nice filtering capability. To filter your TODOs by tag you would navigate to the Agenda View and type `/` followed by the tag you wished to search for. If you wanted to reset the Agenda View and clear the search you would type `|`. The Agenda supports some very advanced filtering options which is far beyond the scope of this simple tutorial, but I encourage you to checkout the Org Manual's page on [filtering/limiting agenda items](https://orgmode.org/manual/Filtering_002flimiting-agenda-items.html).
594 |
595 |
596 |
597 |
598 | # Keyboard Shortcuts List
599 |
600 | There are a lot of keyboard shortcuts you can use with Emacs, several of which were mentioned in this guide. Veteran Emacs users will have already picked up on most of them or otherwise know how to find them, however new users will need a little help. That's why I'm including a all the shortcuts mentioned in this tutorial as well as other useful shortcuts in a handy table below.
601 |
602 | There are two ways to activate each task mentioned in the table below. The easiest way is to use the keyboard shortcut. As a reminder, the first letter will always be either a `C` for the `Ctrl` key or an `M` for the `Alt` key. (I realize that `Alt` doesn't start with `M` but most modern keyboards don't come with a `Meta` key, so it has been remapped to the `Alt` key.) The letter that follows after the dash is the key you hit while holding the first key. A space means to release all the keys you are holding down. So the shortcut `C-c c` means "hold the Control key and press c, then release the keys and press c again".
603 |
604 | The second way of activating a task is to call the function directly. To do this press `M-x` and type in the function name. This is very useful because as you type, the list of available functions narrows. This is a great way to discover new functionality. Additionally you can type words separated by a space to see every function that matches those words. For example, after hitting `M-x` if you were to type `org time` you would get 18 results. Such as `org-timer`, `org-timestamp-up`, and `org-clone-subtree-with-time-shift` just to name a few. If a function has a shortcut, you will see it beside the function name. I encourage you to play around with this to discover new ways of using the various packages installed here.
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 | | TASK |
621 | SHORTCUT |
622 | FUNCTION |
623 | NOTES |
624 |
625 |
626 |
627 |
628 |
629 | | Open the Capture Template |
630 | C-c c |
631 | org-capture |
632 | Create a new TODO, Meeting, etc. |
633 |
634 |
635 |
636 |
637 | | Open the Agenda |
638 | C-c a |
639 | org-agenda |
640 | View your calendar and all TODOs |
641 |
642 |
643 |
644 |
645 | | Save your new TODO, Meeting, etc. |
646 | C-c C-c |
647 | N/A |
648 | Do this to save your item |
649 |
650 |
651 |
652 |
653 | | Discard your new TODO, Meeting, etc. |
654 | C-c C-k |
655 | N/A |
656 | Cancel out of the capture template |
657 |
658 |
659 |
660 |
661 | | Change the TODO state |
662 | C-c C-t |
663 | org-todo |
664 | Use this to go from TODO to IN-PROGRESS |
665 |
666 |
667 |
668 |
669 | | Select a deadline for a TODO |
670 | C-c C-d |
671 | org-deadline |
672 | This accepts syntax like +3d 11am |
673 |
674 |
675 |
676 |
677 | | Turn Treemacs on/off |
678 | C-x t t |
679 | treemacs |
680 | The file browser on the left side |
681 |
682 |
683 |
684 |
685 | | Maximize the current pane |
686 | C-x 1 |
687 | delete-other-windows |
688 | Make this pane the only one I see |
689 |
690 |
691 |
692 |
693 | | Split window top and bottom |
694 | C-x 2 |
695 | split-window-below |
696 | Make two panes, one above and below |
697 |
698 |
699 |
700 |
701 | | Split window left and right |
702 | C-x 3 |
703 | split-window-right |
704 | Make two panes, one on the right and left |
705 |
706 |
707 |
708 |
709 | | Save your file |
710 | C-x C-s |
711 | save-buffer |
712 | Saves your current file |
713 |
714 |
715 |
716 |
717 | | Close Emacs |
718 | C-x C-c |
719 | save-buffers-kill-terminal |
720 | Save your files and close Emacs |
721 |
722 |
723 |
724 |
725 | | Hide/Show Heading |
726 | TAB |
727 | N/A |
728 | Keep hitting the TAB key to hide/show headings |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 | # Beyond This Tutorial
737 |
738 | I hope you found this simple tutorial useful. Emacs and Org Mode combine to make a very versatile piece of software that has many unique uses. I encourage everyone who finds this interesting to explore more of Org Mode's functionality. This tutorial only touched on the very basics so as not to overwhelm new users, but if this interests you, please keep digging. There are still so many secrets to find!
739 |
740 | Likewise I want to stress to all new users that everything contained in this repo is just one way you can use Org Mode to organize your life. This isn't the **right** way because there is no universal **right** way, only a way that works for you. If you find some of these features useful but not others, then only use what you want. If you want to tweak the configurations listed here to better suite your tastes, then do so with my blessing. I sincerely hope that this software improves your life to the same degree it has improved mine. With that I leave you to go forth and do great things.
741 |
742 |
743 |
744 |
745 | # Further Reading
746 |
747 | If you came here looking for a more in depth explanation of some of Org Mode's core features, please check out the very detailed write up I did in my [Emacs Org Mode Tutorial](https://github.com/james-stoup/emacs-org-mode-tutorial/). For the new people, you don't need to read that document (it is huge and can be daunting) as it is designed for people who want to really customize their Org Mode configurations. However, it does provide a lot of useful explanations with screenshots, so maybe come back to it once you've gotten some more experience with Org Mode.
748 |
749 |
--------------------------------------------------------------------------------
/README.org:
--------------------------------------------------------------------------------
1 | #+title: README
2 | #+author: James Stoup
3 | #+date: <2024-01-12 Fri>
4 |
5 | * Quick Start Guide
6 | For more details see below, but this is the minimum you need to make this work.
7 |
8 | 1. Backup your ~.emacs~ file if you have one (~mv ~/.emacs ~/.emacs.bak~)
9 | 2. Download the ~.emacs~ file from this repo
10 | 3. Move it to your home directory (~mv ~/Downloads/.emacs ~/~)
11 | 4. You are done, now restart ~emacs~ and take a look at the shortcut guide below
12 |
13 | * A Quick Overview
14 | ** Welcome New Org Mode Users
15 | So you want to use Org Mode, but you don't have 2 years to devote to teaching yourself Lisp? No problem. This repo was created just for you. Here you will find a simple solution that requires no additional lisp configuration on your part to work. It is ideal for users who are completely new to both Emacs and Org Mode. Simply drop this config file into your home directory, restart Emacs, and you are ready to go.
16 | ** Org Mode with Default Settings
17 | What Org Mode looks like with the default settings:
18 |
19 | ![[file:images/image-41-standard-defaults.png][standard org mode settings]]
20 | ** Org Mode with Better Defaults
21 | And what Org Mode looks like with these Better Defaults:
22 |
23 | ![[file:images/image-40-better-defaults.png][org mode with better defaults]]
24 |
25 | * What Is This And Why Do I Need It?
26 | ** Learning Org Mode is Hard
27 | A lot of Emacs related documentation assumes you already know quite a bit about the system and the documentation that is geared for new users is often so densely packed with information that it can be difficult to orient yourself. In short, it can be overwhelming. This is especially true for new users who don't care about "THE POWER OF EMACS(™)" but instead just want to try out Org Mode.
28 |
29 | The good news is that Org Mode works well right from the start. The bad news is that its default settings aren't particularly user-friendly, and without significant customization, its usefulness may not be immediately apparent. I experienced this firsthand while assisting a new user with Org Mode. My Emacs configuration file is over a thousand lines long, with several hundred lines dedicated solely to Org Mode. When this new user compared their basic Org Mode setup to mine, they were disappointed by the lack of features and customization. They wondered why their setup was so plain compared to mine and how they could achieve similar results.
30 |
31 | I sent them the link to my other Org Mode tutorial on designing your Org Mode configuration from scratch, but they didn't want that. In fact, they had no idea what they wanted. The only thing they were sure of was that they wanted it to be functional now. Not in a year, not after they had learned lisp, right now.
32 |
33 | After some thought I decided that rather than suggesting they spend a year experimenting to understand what they needed, which would likely lead them to seek other solutions, I decided to simplify the process. I stripped down my Emacs configuration to focus solely on Org Mode—removing all unrelated features like code completion, language servers, linters, and git integration. I then streamlined this setup to be as user-friendly as possible.
34 |
35 | After helping the new user install this pared-down configuration and providing minimal instructions, they were thrilled with the results. This experience made me realize that many others could benefit from straightforward guidance in getting started with Org Mode. If you're in the same boat, this repository might be just what you need.
36 |
37 | ** About This Repo
38 | This repo aims to help new Emacs users become productive with Org Mode. It includes two main components: a tutorial in this README that guides you through using Org Mode with a real-world example, and a ~.emacs~ file that enables all the features discussed in the tutorial.
39 |
40 | Please note, this is not a comprehensive Emacs or Org Mode tutorial. It focuses on the basics to get you started and does not cover every feature of Org Mode. There are too many features and I simply can't cover them without turning this into a small textbook. For a more in-depth understanding, I recommend referring to the [[https://orgmode.org/manual/][Official Org Mode Manual]].
41 |
42 | ** Summary of Features
43 | The ~.emacs~ file has two main parts to it. The first part deals with improving how Org Mode looks and functions at a basic level. The second part of this configuration is the default values provided. For more info and specific implementation details, look over the ~org-better-defaults.org~ file in this repo. Here is a list of most of the primary enhancements provided:
44 |
45 | *Improvements*
46 | - sets up default package repos
47 | - performance enhancements
48 | - auto completion
49 | - minor usability tweaks
50 | - treemacs (helps visualize headings in org files)
51 | - defines default org mode directory to be ~~/org~
52 | - improved Keybindings
53 | - default indentation
54 | - auto lists
55 | - auto timestamps
56 | - expanded TODO options
57 | - 4 custom capture templates
58 | - 7 custom tags
59 | - 1 custom agenda
60 | - colorized TODOs
61 | - colorized Tags
62 | - better fonts
63 | - better bullets
64 | * Installation
65 | These steps will walk you through how to make your version of Emacs look and feel exactly like the version shown in all the screen shots here. I would recommend new users follow these steps so everything looks the same as the tutorial to minimize confusion. However, afterwards feel free to install additional themes, fonts, or UI packages.
66 |
67 | ** Installing the File
68 | To make your version of Emacs and Org Mode look like the screenshots below, download the ~.emacs~ file in this repo and either copy the contents into your existing ~.emacs~ file or overwrite it entirely, then restart Emacs. The first time you do this Emacs is going to download and install a bunch of files. There will be lots of install and configuration messages printed to various buffers and the entire thing might look a bit intimidating. Once you've installed everything it might look something like this:
69 |
70 | ![[file:images/image-3-fonts-installed.png][initial Emacs install]]
71 |
72 | Don't worry if yours looks different. Just let the install finish (it will stop print log messages when its done) and then close it and restart Emacs. Things should look much better at that point.
73 |
74 | ** Selecting the Treemacs Project Root
75 | You will get a Treemacs dialog box when you launch Emacs for the first time with this new configuration. Don't be alarmed, Treemacs is just a nice file browser. Select the ~org~ directory located in your home directory and click OK. Don't worry if you don't already have an ~org~ directory, Emacs will create one for you. This is where Emacs is going to expect to find all of your ~.org~ files.
76 |
77 | Treemacs is incredibly useful not only because it displays your files, but because it also shows you the headings contained within any Org files it finds. This is a wonderful way to easily scan through an Org document. You will see the Treemacs file browser on the left hand side of all the screenshots here.
78 |
79 | ** Light or Dark Mode
80 | I have found that most users prefer their text editor to have a dark theme and so all the screenshots here will reflect that. The theme used in this tutorial is called ~deeper-blue~ and it is one of the default themes that come with Emacs. To change the theme follow these steps:
81 |
82 | 1. From the top menu select: *Options -> Customize Emacs -> Custom Themes*
83 | 2. Check the box beside ~deeper-blue~
84 | 3. Click *Save Theme Settings*
85 | 4. Type ~q~ to quit that menu
86 | 5. Restart Emacs to properly load the theme
87 |
88 | The font colors defined in the ~.emacs~ file of this repo are different for light or dark modes. By default it is set to dark mode, however if you would like to change it simply open up your ~.emacs~ file and find this line:
89 |
90 | #+begin_src emacs-lisp
91 | (setq light-mode nil)
92 | #+end_src
93 |
94 | and change it to this:
95 |
96 | #+begin_src emacs-lisp
97 | (setq light-mode t)
98 | #+end_src
99 |
100 | Then restart Emacs. The colors should now be more in keeping with a light mode style.
101 |
102 | ** Increasing the Font Size
103 | The last UI option that you might want to change is the font size. By default Emacs sets the font size to 10 point. That is pretty small. If, like me, you are old enough that your eyes don't like that, then here is how you increase the font.
104 |
105 | 1. From the top menu select: *Options -> Set Default Font...*
106 | 2. Select ~Source Code Pro Regular~ as the font
107 | 3. Increase the font size to however large you would like
108 | 4. Press the *Select* button
109 | 5. From the top menu select: *Options -> Save Options*
110 |
111 | That's it. From now on Emacs should default to your larger font selection.
112 |
113 | ** Installing Icons
114 | Part of the new defaults you have installed is support for All The Icons. This allows Emacs to add pretty icons to various parts of your UI to make things look nicer. However, before this will work you need to download the icons it will display. To do that follow these steps:
115 |
116 | 1. Press the ~Alt~ key and the ~x~ key to bring up the command buffer
117 | 2. Type ~all-the-icons-install-fonts~ and press return
118 | 3. That's it, just give it a minute while the files download
119 |
120 | That is it. Now your system should look like the one used in this tutorial.
121 |
122 | * I've Installed It, Now What?
123 | Once you've installed the config file and restarted Emacs, you're ready to start being productive! Follow these steps: First, read through this section to grasp the key concepts. Next, go through the tutorial to see how these concepts are applied in real-world scenarios. Finally, apply what you've learned to your own notes to boost your productivity.
124 |
125 | ** A Brief Overview of Org Mode Syntax
126 | Before we get much further we need to review Org Mode's syntax and highlight how it differs from Markdown. For example, Org Mode uses stars (~*~) to show indentation while Markdown uses the hash sign (~#~). In both cases more stars or hashes indicates deeper levels. To better illustrate this I've included a table showing the most common formats in each style.
127 |
128 | |-------------------+-------------------+-----------------|
129 | | FORMAT | ORG MODE | MARKDOWN |
130 | |-------------------+-------------------+-----------------|
131 | | 1st level heading | ~* heading 1~ | ~# heading 1~ |
132 | | 2nd level heading | ~** heading 2~ | ~## heading 2~ |
133 | | 3rd level heading | ~*** heading 3~ | ~### heading 3~ |
134 | | Bold | ~*bold*~ | ~**bold**~ |
135 | | Italic | ~/italic/~ | ~*italic*~ |
136 | | Strike-through | ~+strike+~ | ~~~strike~~~ |
137 | | Code | ~~code~~ | ~`code`~ |
138 | | Quote | ~=quote=~ | ~> quote~ |
139 | | Bullet | ~- bullet~ | ~- bullet~ |
140 | | Link | ~[[link][title]]~ | ~[title](link)~ |
141 | |-------------------+-------------------+-----------------|
142 |
143 | ** An Intro to this Org Mode Tutorial
144 | In this tutorial, I will use the example of managing work tasks to demonstrate Org Mode. I’ve found that realistic examples help make tutorials less abstract and more understandable. Throughout this section, I’ll explain three core concepts:
145 |
146 | — TODO Items
147 | - The Agenda
148 | - Capture Templates
149 |
150 | Within the context of a typical job. By the end of this tutorial, you'll know how to create TODOs, track them using the Agenda, set up custom capture templates, and use tags to organize your tasks.
151 |
152 | We’ll start by discussing these three essential concepts, and by the end, you should have a solid grasp of Org Mode’s basics.
153 |
154 | ** Tracking Work with TODOs
155 | TODOs are the fundamental building blocks of Org Mode. They represent tasks you want to accomplish and can include various details such as creation date, current status, priority, descriptions, checklists, and tags. TODO items help you manage work tasks, personal chores, or project steps.
156 |
157 | By default, TODO items have two states: TODO and DONE. However, this configuration adds several additional states to support a wider range of use cases.
158 |
159 | Here’s an example of what a TODO item entry might look like in your ~todos.org~ file. This is how it appears in raw text if you were to view it in a different text editor.
160 |
161 | #+begin_src
162 | * TODO Create 3rd Quarter Presentation :finance:gary:
163 | I need to create a presentation detailing the end of quarter numbers. The regional manager Gary will be there so it should be impressive. This presentation also needs to include projections for the next two quarters.
164 | #+end_src
165 |
166 | Here is what it looks like with the Org Mode Better Defaults:
167 |
168 | ![[file:images/image-5-better-defaults.png][better defaults]]
169 |
170 | ** Understanding the Agenda
171 | The Agenda provides a comprehensive view of all your TODOs in one place. It consolidates TODOs from various files, such as ~work.org~ and ~personal.org~, and organizes them by status, upcoming tasks, and completed items. The Agenda also includes a calendar to show TODO deadlines and completion dates.
172 |
173 | Here is an example of the agenda in action.
174 |
175 | ![[file:images/image-11-agenda-view-small.png][agenda view]]
176 |
177 | To access the Agenda, press ~C-c a~ and choose the view you want. For this tutorial, select the ~Daily Agenda and All TODOs~ option by typing ~d~ at the prompt. Don't worry if this seems unclear now; detailed instructions on using Org Mode will be provided in the Practical Walkthrough section.
178 |
179 | ** Using Capture Templates
180 | To quickly recap: TODOs hold your data, and the Agenda helps you view it. But how do you enter your data efficiently? There are two methods:
181 |
182 | 1. Manual Entry: Open the file, scroll to the end, press Return, type ~* TODO~, and then enter your information. This method works and the Agenda view will display your manually entered TODOs without issue.
183 |
184 | 2. Capture Templates: This method is more efficient, especially if you have multiple TODOs to enter. Instead of repeatedly typing the same format for each TODO, Capture Templates streamline the process.
185 |
186 | Capture Templates allow you to quickly enter data using predefined formats, eliminating the need to manually input repetitive boilerplate text. By default, Org Mode includes only one generic task template, but this configuration offers four useful templates:
187 |
188 | - TODO (~t~)
189 | - Journal Entry (~j~)
190 | - Meeting (~m~)
191 | - Note (~n~)
192 |
193 | Each template captures a specific type of data into a designated Org file. To use a Capture Template, press ~C-c c~ to open the list of available templates. Then, press the corresponding letter for the template you want to use, as indicated in the list above.
194 |
195 | * A Practical Walkthrough
196 | By now, you should have installed the new configuration file and reviewed the summary of Org Mode’s core features. In this walkthrough, we’ll put it all together to help you get the most out of Org Mode by managing a sample workload.
197 |
198 | In this scenario, it’s Monday morning and you have a meeting scheduled to discuss a potential new purchase order for components needed for the next quarter. Depending on the meeting's outcome, you may need to consult with others, gather data, write a report, and submit your findings to your boss by Thursday for her review, so she can place the order by Friday. We’ll guide you through each step of this work week and demonstrate how to use Org Mode to organize your tasks and track your progress.
199 |
200 | To start, launch Emacs. You don't need to open a specific file because the Org Mode Capture Template can be accessed from anywhere. Once Emacs opens, you’ll see two panes: Treemacs on the left showing a folder named ~org~, and the ~*scratch*~ window on the right displaying "Welcome to Emacs!" Click in the scratch window—this is where you’ll perform most of the actions in this tutorial.
201 |
202 | ![[file:images/image-6-blank-slate.png][fresh install]]
203 |
204 | ** Monday Morning Meeting
205 | It's Monday morning, and you’re about to attend a meeting with your boss and a few coworkers to discuss a potential purchase order. Your company needs to ensure that certain expensive and complex parts are ordered on time. If there aren’t enough parts available when needed, production will halt for a month while more are made. Conversely, ordering too many parts will be costly to store until they’re needed. The meeting will help determine the best course of action. Before the meeting starts, you decide to track the details in Org Mode by creating a new meeting entry.
206 |
207 | Here’s how to get started:
208 |
209 | *Open Capture Template*
210 | Press ~Control~ and while holding it, press ~c~, then release both keys. Next, press ~c~ again. This launches the Capture Template. In Emacs notation, this is written as ~C-c c~ which is read as "press Control and c, then release both keys, and press c again".
211 |
212 | ![[file:images/image-7-capture-template.png][the capture template]]
213 |
214 | *Select Meeting Template*
215 | After launching the Capture Template, you’ll see four options. Press ~m~ to choose the Meeting template. This will open a meeting template and activate the mini buffer with the label ~:Tags:~. For this example, type ~planning~ and press Return.
216 |
217 | ![[file:images/image-8-new-meeting.png][setting tags for a new meeting]]
218 |
219 | *Fill in Meeting Details*
220 | Enter a title for your meeting. Since this is a planning meeting, type ~Purchase Planning~. Under the heading Attendees, list the names of the people present. Type ~Alice~ (your boss), press Return, then type ~Bob~, press Return, and finally type ~Carla~. Press Return twice to finish the list.
221 |
222 | *Take Meeting Notes*
223 | Navigate to the ~Notes~ section and begin filling in details discussed in the meeting. For example:
224 |
225 | ~Alice needs to have a report by Thursday at 11am at the latest. Talk to Bob first, he can find out how many parts we have. Carla knows how many parts we will need for next quarter's projects. I can find out how much of our budget is left for future expenditures by looking at our accounts.~
226 |
227 | Of course you can take whatever notes you want in whatever structure you want, but for the moment we are keeping it simple since this is a quick meeting.
228 |
229 | *Record Action Items*
230 | At the end of the meeting, Alice assigns you tasks: get numbers from Bob and Carla, check available funds, and write a recommendation by Thursday at 11am. These tasks should be entered under the ~Action Items~ heading in the template. Not every meeting will have ~Action Items~, so you can delete this section if it's not applicable before saving your meeting notes.
231 |
232 | ** Filling in the Action Items
233 | For our first action item we are going to create a TODO for finding out the current stock levels. Fill out the rest of the first action item with this ~Get current stock levels from Bob~ and then hit ~return~. On this new line let's add some details such as ~I need to talk to Bob and get a detailed breakdown of how many parts we have used this quarter as well as how many are left.~. We now have our first action item filled out.
234 |
235 | For the next TODO type ~C-return~ to start a new heading and then type in ~TODO [#A]~ to create the TODO. Call this action item ~Get projected orders from Carla~ and then hit return. The details of this will be ~Talk to Carla to get the next quarter's projections. I need to know how any parts we are projected to use as well as how many we can lose and still meet our critical orders.~ and upon typing that, hit ~C-return~ one last time to create the final TODO.
236 |
237 | Once again type in the TODO template that you used for the previous item. The title of this TODO will be ~Compile results and send final report to Alice~. Hit return to get to the details of this TODO and add the lines ~Collect all relevant data, summarize it, add my recommendations, and then email it to Alice before 11am on Thursday.~ By the end you should have something that looks like this:
238 |
239 | ![[file:images/image-9-filling-out-a-meeting.png][filling out the meeting]]
240 |
241 | Now that all the action items have been finished and the meeting is over, we can save this meeting. To do that hit ~C-c C-c~ and it will file it away. Once you do that you will see a new file appear underneath the org folder on the left. This new file called ~meetings.org~ was created when you saved your new meeting.
242 |
243 | ** View the Agenda
244 | At this point we have created a meeting and 3 TODOs, which means our Agenda View will now have something to display. Let's open up the Agenda View and see what it looks like. To launch the Agenda hit ~C-c a~ to bring up the Agenda selector.
245 |
246 | ![[file:images/image-10-agenda-launcher.png][agenda launcher]]
247 |
248 | Press ~d~ to activate the Daily Agenda view. Your screen should now look like this:
249 |
250 | ![[file:images/image-11-agenda-view.png][agenda view]]
251 |
252 | As you can see, the new TODO items we just created are there. Click into the Agenda view and move your cursor onto the line with your first TODO. Once it is there, hit the ~TAB~ key and it should jump you to the source of the TODO.
253 |
254 | ![[file:images/image-12-agenda-in-use.png][agenda in use]]
255 |
256 | Any item in the Agenda view can always be followed back to its source. Remember, the Agenda View isn't really for editing things, it just compiles a list of things that already exist.
257 |
258 | You might be wondering where the meeting you just created is. After all, you see the 3 action items, but where is the meeting that you were just in? Well, the meeting won't show up by default for reasons that you don't care about right now. However, there is a really useful setting we can turn on to show extra details. Navigate to the ~Week-agenda~ and put your cursor anywhere within the calendar. This won't work if your cursor is in the TODO sections as this is strictly a calendar setting. Once there, hit ~v~ to bring up the View options in the mini buffer. We want to enable the log view, so to do that, hit the ~l~ key. Now we see our meeting~ And as a bonus we also see the time we spent in this meeting. When you first started the capture template for the meeting a clock was started. When the meeting was saved (or filed) the clock stopped and the elapsed time was computed. The agenda view can then take this info and display it in a nicely formatted view. This is especially helpful when you have a week full of meetings. You can see at a glance how much time you spent in meetings and what those meetings involved. Hitting the ~tab~ key when on the same line as a meeting will take you to that entry.
259 |
260 | ** Start Working on TODO #1
261 | You should now have 3 different TODOs to visible in your Agenda. Let's start with the first one, requesting info from Bob. If it isn't open already, go ahead and open up the ~meetings.org~ file and navigate to the first TODO. Right now it is still in the ~TODO~ state, but since we are now working it, we need to change it's state. While your cursor is on that TODO heading (it can be anywhere on the line) hit ~C-c C-t~ to change the state. The mini buffer will pop up and give you a bunch of options you can change it to. In our case we want to set it to ~IN-PROGRESS~ so hit the ~i~ key.
262 |
263 | ![[file:images/image-13-changing-todo-state.png][changing from TODO to IN-PROGRESS]]
264 |
265 | When that happens a new buffer will appear asking you to insert a note for the state change. At the prompt enter the text ~Reaching out to Bob first~ and hit ~C-c C-c~ to save the note.
266 |
267 | ![[file:images/image-14-adding-state-change-note.png][adding a state change note]]
268 |
269 | Once you do this you should be returned to your original buffer where you can see that the TODO named ~Get current stock levels from Bob~ looks a lot different now. The state has changed from ~TODO~ to ~IN-PROGRESS~, there is a timestamp denoting the state change, and now your note appeared too. Let's add some more details by navigating to the end of this TODO and hit return twice. On this new line we can add more notes. So enter our latest note ~Emailed Bob and requested more info.~ which describes the work we are doing. For the sake of this example we are going to assume you then opened up your company's email client and sent Bob an email asking for the specific data you needed for your report.
270 |
271 | ![[file:images/image-15-work-in-progress.png][working TODO 1]]
272 |
273 | So far so good. We are making progress! Alas for us we get an auto generated email from Bob alerting us to the fact that Bob is out for the rest of the day due to a medical procedure. Since he won't return until tomorrow, we can't do anything else on this front. That shouldn't be a big problem though, since it is only Monday, he will be back on Tuesday, and the report is due Thursday, we still have time. Before we move on to another TODO item, we should really mark this to indicate what happened. To do that put your cursor back on the ~IN-PROGRESS~ line and hit ~C-c C-t~ to bring up the state change buffer. Now we are going to hit ~b~ to set it to blocked. Once again a we are going to add a note to describe this state change. So add the text ~Bob is out of the office until tomorrow~ and then hit ~C-c C-c~ to save it. Now our task is set to ~BLOCKED~ and we have a nice note describing why.
274 |
275 | ![[file:images/image-16-blocked-by-bob.png][blocked by Bob]]
276 |
277 | If you click in the Org Agenda pane on the right and then press ~r~ it will refresh your view. Doing so will now show that your first TODO is blocked while the others remain in their default state. Since we can't do anything more here, let's move on to our next TODO item.
278 |
279 | ** Start Working on TODO #2
280 | We hit a dead end on our first TODO so now we are moving on to the second task. Just like in the previous TODO we want to change the state from ~TODO~ to ~IN-PROGRESS~ and add a note. Reread the previous section if you forgot how to do that. For the note you can use ~Talking to Carla since Bob is gone~ and then save it like you did the last one. So at this point we have 3 TODOs that are all in different states. Click over to your Agenda pane (if you closed it you can easily reopen it with ~C-c a d~) and then type ~r~ to refresh the view. You should now see that your 3 TODOs are indeed all in different states.
281 |
282 | As we did before, navigate to the end of the body of this TODO, hit return twice, and update it with what you are currently doing. Here we could add something like ~Emailing Carla for her data while I wait for Bob to get back to me.~ which summarizes the steps you are taking. Once again we assume that you contacted Carla over your company's email system and requested the information you require. However this time we are in luck because Carla responds fairly quickly with a link to the company's intranet where the data you want is stored. You click on the link, view the data, extract what you need, and add it to the Word document you working on. Of course, you could write everything in Org Mode and then export it to one of a dozen formats (and in fact this is what I do for my job) but for beginners I would use Org to track my notes and then something like Word to format the actual document.
283 |
284 | ![[file:images/image-17-link-to-doc.png][adding a link to a TODO]]
285 |
286 | It is important to note that Carla sent us a very important piece of information (the URL to the document) that is only contained in her email. While this is fine for today's task, this might be a document we want to reference later. We could save it to our local file system, bookmark it in our browser, or flag the email, but all of those solutions lack context. It is incumbent on you to remember the details of why you have this file saved. We could just copy and past the URL into our notes, but there is a better solution.
287 |
288 | The URL in question is ~http:intranet.company.com/financial/reports/Q3-reports.xls~ and we want to save this to our current TODO. Start by copying the URL and then navigating to the end of the TODO. Hit return twice to start a new line and then type ~C-c C-l~ to create a new link. The mini buffer will appear with link options, but you are going to type ~C-y~ to paste your copied URL in. Once it is pasted, hit return. Now the mini buffer will prompt you to enter a description. Here you can type ~Intranet link to Carla's planning document~ and hit return. This is now a functioning URL that can be clicked on to open the link in your default web browser.
289 |
290 | Since Carla has responded with the information we needed and we logged the results of that conversation, this TODO is complete. All we should have to do is mark it as ~DONE~ and we can move to something else. To mark it as done go to the ~IN-PROGRESS~ line and hit ~C-c C-t~ to open up the state selector. From here type ~d~ to select done. Enter a note such as ~Got everything I needed from Carla~ and then hit ~C-c C-c~ to save it.
291 |
292 | ![[file:images/image-18-todo-2-is-done.png][TODO 2 is done]]
293 |
294 | At this point if you look in the Agenda view and press ~r~ you will see your 1st TODO that is blocked and your 3rd TODO that you haven't started, but where is your 2nd TODO? The completed item is there, it just isn't shown by default. Move your cursor to somewhere in the Calendar (it won't work if you are in one of the TODO lists) and press ~v~ to bring up the view buffer.
295 |
296 | ![[file:images/image-19-agenda-views.png][agenda view options]]
297 |
298 | From there hit ~l~ to enable the log view. Now you will see two things. First, you will see your TODO item that you recently completed and second you will notice that your meeting has appeared! And as a bonus, the time you spent in this meeting appears beside it. You can easily filter your meetings to see how your week looks like as well as produce reports showing how much time you spend in meetings.
299 |
300 | ![[file:images/image-20-agenda-log-view.png][detailed agenda view]]
301 |
302 | ** Start Working on TODO #3
303 | Before we do any work on this task we need to update the meta data associated with it. If you recall from the description this is due on Thursday (remember in this example it is Monday) at 11am. And while it is good that we recorded this deadline in the body of this TODO, it would be even better if there was a way of integrating this information into our TODO so it could be tracked in the Agenda View. Well good news for us, there is a way of handling deadlines.
304 |
305 | ![[file:images/image-21-set-deadline.png][selecting a deadline]]
306 |
307 | Start by navigating to the third and final action item called ~Compile results and send final report to Alice~ and hit ~C-c C-d~ to bring up the deadline selector. Now there are several different ways we could enter a date. We could type it out in one of several formats or we could click on the desired day in the calendar up top. However, we are lazy so we are going to specify the deadline in the easy manner possible. Since it is Monday and we want to make our deadline for Thursday at 11am, when the mini buffer appears so we can select a date, simply enter ~+3d 11am~ and hit return. This creates a deadline 3 days in the future at 11am. Now when we refresh the Agenda View we will see that this TODO is special! Because it has a deadline marked on it.
308 |
309 | We are going to assume that Bob has returned on Tuesday and gotten us the information we need. So in that case we can change the first TODO from ~BLOCKED~ and to ~DONE~. At this point we can actually start work on the 3rd TODO.
310 |
311 | So, the deadline has been added so go ahead and set the state to ~IN-PROGRESS~ just like we've done twice before. Add a note of your choice explaining what you started working on. After the state has been changed we could add additional notes to this TODO that might describe the order we wanted our report to be in, a list of graphs and tables to include, or links to templates that should be used for these types of company reports. You can also make new subheadings by hitting ~C=return~ and then hitting ~tab~ to move the heading over. Subheadings should be labeled in ways that make sense to your task. You can easily rearrange headings by holding the ~alt~ key and pressing the ~up~ or ~down~ arrow.
312 |
313 | ![[file:images/image-22-todo-3-in-progress.png][working todo 3]]
314 |
315 | ** A New TODO
316 | At this point in the tutorial we will assume that two days have passed and you completed your report and sent it to Alice. You can now close those remaining TODOs and then refresh your Agenda to verify that they are closed. Now that all of our current tasks are complete we can focus on a new email from Alice. In it she tells us that she liked our report so much that she wants us to generate another report that forecasts the purchasing requirements of the next fiscal year. It also needs to have more details, more graphics, and should be presented to management in a week at the end of the month planning meeting. Since this new task didn't come in a meeting we are going to create a new TODO using the TODO capture template.
317 |
318 | Fire up the Capture Template with ~C-c c~ only this time hit ~t~ to create a new TODO. For the tags in the mini buffer put ~report~ and hit return. You will now see a new TODO template and your cursor will be on the heading line. Now we can enter a heading. Type in ~Create yearly report and presentation~ as your title. You can now press the down key or press ~C-n~ to go to the next line. Here you are going to enter the details ~I need to create another forecasting report as well as a presentation and present my findings to management in one week.~ Once you've added your description it is time to save your TODO. Press ~C-c C-c~ to save it.
319 |
320 | ![[file:images/image-23-new-todo.png][new todo]]
321 |
322 | As soon as you save your new TODO entry a file will appear on the left hand side of your screen under the ~org~ folder. This new file is called ~todos.org~ and it has been created in the ~org~ directory, which itself is helpfully located in your home directory. Go ahead and click on the ~todos.org~ file in Treemacs and hit ~tab~. It will expand the file in Treemacs and show you the headings. At the moment there is only one heading, the TODO you created. We want to get a closer look at this TODO, so with the ~todos.org~ file still highlighted, hit return. This will open the file ~todos.org~ in the other window and allow you to edit it.
323 |
324 | ![[file:images/image-24-creating-check-boxes.png][checkboxes]]
325 |
326 | ** Working the TODO
327 | This TODO is going to behave in the same way that the action items worked. You can change the state, set a deadline, add notes, etc. I encourage you to set it to ~IN-PROGRESS~, add your own note, and add a few lines describing what you are going to do. After you do that we are going to look at some more advanced ways of organizing your notes.
328 |
329 | At this point you have set your TODO to a state showing that you are currently working on it. You have added a note explaining the state change, now you can add some more details. Let's start with a new subheading called ~Subtasks~. Press ~C-Return~ to get a new heading and then press ~tab~ once to make it a 2nd level heading. From here, type ~Subtasks [/]~ and then hit return. We are going to create an auto-incrementing list. On the line after your heading, type ~- [ ] Create Tasks~ and press return. Two interesting things should have happened. A new check box item should have appeared on the next line, and the ~Subtasks~ heading should now have a count of the check box items we created. To get out of the auto checkbox mode just hit return twice. Don't worry if the count looks wrong, that will get fixed shortly.
330 |
331 | Go ahead and fill out a few more check box items until your list looks like the image below. We want our subtasks to include ~Create Tasks~, ~Gather Notes~, ~Find Sources~, ~Create Graphics~, ~Create Rough Draft~, ~Create Final Draft~, and ~Test Presentation~.
332 |
333 | Once you've finished adding all the subtasks, go back to the first subtask called ~Create Tasks~. With your cursor anywhere on that line hit ~C-c C-c~. Look at that! There is now an ~X~ next to our completed subtask and the progress counter has incremented. This is useful!
334 |
335 | Things are really starting to take shape. We now have one sub heading that tracks all of our subtasks, now we need another heading for our presentation notes. So hit ~C-Return~ and then ~tab~ to create a new 2nd level sub heading and name this one ~Presentation Notes~. Here you would add notes on what you want to say in your presentation. Slides to use, people to thank, etc. Each subheading should relate to a different part of this project.
336 |
337 | Additional subheadings can be created as needed to further reflect other sources, ideas, or notes you wish to take. I've added a simple table as an example of how Org Mode treats tabular data. Read up on tables in the Org Manual to see all the amazing things it can do.
338 |
339 | ![[file:images/image-25-adding-tables.png][tables]]
340 |
341 | ** Make a note
342 | At this point in the Tutorial we have covered most of the major concepts so I'm going to just end on a few simple things Org Mode can do for you. Perhaps the simplest thing is just a basic note. This note doesn't have a TODO associated with it, nor does it have a deadline, or even a tag. It is just a simple way of remembering something. I like to keep a notes file filled with random things that don't really belong anywhere. Since you can setup Emacs to search your org files (go look up Projectile among others) it is easy to find a specific note once you know what you are looking for.
343 |
344 | In this case start the capture template with ~C-c c~ and then hit ~n~ to create a new note. You can give it a tag, but you don't need to. For this note call it ~Office Supplies~, hit return, and then add the note ~The code for the supply closet is 223344~. File your note with the usual ~C-c C-c~ and you have created a simple note. While it is hardly as exciting as the other features we've covered, it is still a useful thing to have.
345 |
346 | ** Record a journal entry
347 | Lastly, the journal entry capture template. This feature is meant to be a quick and easy way to log accomplishments at your job. If you find it useful consider looking up some of the Org Mode journal packages that offer more features. But for this case, this is meant as a very simple solution that allows you to jot down what you are doing on any given day. You can add as little or as much detail as you want. The goal is only to have an easy to reference record of what you do each day on the job. I personally have found this to be very useful at the end of the year when writing up my accomplishments for a performance review. It is very helpful to see what I've done throughout the year.
348 |
349 | ** Filtering Tags
350 | So far we have only talked about creating content in Org Mode and then viewing it in the Agenda. However, the Agenda View has quite a bit of hidden functionality that we never talked about. For example, it has a very nice filtering capability. To filter your TODOs by tag you would navigate to the Agenda View and type ~/~ followed by the tag you wished to search for. If you wanted to reset the Agenda View and clear the search you would type ~|~. The Agenda supports some very advanced filtering options which is far beyond the scope of this simple tutorial, but I encourage you to checkout the Org Manual's page on [[https://orgmode.org/manual/Filtering_002flimiting-agenda-items.html][filtering/limiting agenda items]].
351 |
352 | * Keyboard Shortcuts List
353 | There are a lot of keyboard shortcuts you can use with Emacs, several of which were mentioned in this guide. Veteran Emacs users will have already picked up on most of them or otherwise know how to find them, however new users will need a little help. That's why I'm including a all the shortcuts mentioned in this tutorial as well as other useful shortcuts in a handy table below.
354 |
355 | There are two ways to activate each task mentioned in the table below. The easiest way is to use the keyboard shortcut. As a reminder, the first letter will always be either a ~C~ for the ~Ctrl~ key or an ~M~ for the ~Alt~ key. (I realize that ~Alt~ doesn't start with ~M~ but most modern keyboards don't come with a ~Meta~ key, so it has been remapped to the ~Alt~ key.) The letter that follows after the dash is the key you hit while holding the first key. A space means to release all the keys you are holding down. So the shortcut ~C-c c~ means "hold the Control key and press c, then release the keys and press c again".
356 |
357 | The second way of activating a task is to call the function directly. To do this press ~M-x~ and type in the function name. This is very useful because as you type, the list of available functions narrows. This is a great way to discover new functionality. Additionally you can type words separated by a space to see every function that matches those words. For example, after hitting ~M-x~ if you were to type ~org time~ you would get 18 results. Such as ~org-timer~, ~org-timestamp-up~, and ~org-clone-subtree-with-time-shift~ just to name a few. If a function has a shortcut, you will see it beside the function name. I encourage you to play around with this to discover new ways of using the various packages installed here.
358 |
359 | |--------------------------------------+-----------+------------------------------+------------------------------------------------|
360 | | TASK | SHORTCUT | FUNCTION | NOTES |
361 | |--------------------------------------+-----------+------------------------------+------------------------------------------------|
362 | | Open the Capture Template | ~C-c c~ | ~org-capture~ | Create a new TODO, Meeting, etc. |
363 | | Open the Agenda | ~C-c a~ | ~org-agenda~ | View your calendar and all TODOs |
364 | | Save your new TODO, Meeting, etc. | ~C-c C-c~ | N/A | Do this to save your item |
365 | | Discard your new TODO, Meeting, etc. | ~C-c C-k~ | N/A | Cancel out of the capture template |
366 | | Change the TODO state | ~C-c C-t~ | ~org-todo~ | Use this to go from TODO to IN-PROGRESS |
367 | | Select a deadline for a TODO | ~C-c C-d~ | ~org-deadline~ | This accepts syntax like ~+3d 11am~ |
368 | | Turn Treemacs on/off | ~C-x t t~ | ~treemacs~ | The file browser on the left side |
369 | | Maximize the current pane | ~C-x 1~ | ~delete-other-windows~ | Make this pane the only one I see |
370 | | Split window top and bottom | ~C-x 2~ | ~split-window-below~ | Make two panes, one above and below |
371 | | Split window left and right | ~C-x 3~ | ~split-window-right~ | Make two panes, one on the right and left |
372 | | Save your file | ~C-x C-s~ | ~save-buffer~ | Saves your current file |
373 | | Close Emacs | ~C-x C-c~ | ~save-buffers-kill-terminal~ | Save your files and close Emacs |
374 | | Hide/Show Heading | ~TAB~ | N/A | Keep hitting the TAB key to hide/show headings |
375 | |--------------------------------------+-----------+------------------------------+------------------------------------------------|
376 |
377 | * Beyond This Tutorial
378 | I hope you found this simple tutorial useful. Emacs and Org Mode combine to make a very versatile piece of software that has many unique uses. I encourage everyone who finds this interesting to explore more of Org Mode's functionality. This tutorial only touched on the very basics so as not to overwhelm new users, but if this interests you, please keep digging. There are still so many secrets to find!
379 |
380 | Likewise I want to stress to all new users that everything contained in this repo is just one way you can use Org Mode to organize your life. This isn't the *right* way because there is no universal *right* way, only a way that works for you. If you find some of these features useful but not others, then only use what you want. If you want to tweak the configurations listed here to better suite your tastes, then do so with my blessing. I sincerely hope that this software improves your life to the same degree it has improved mine. With that I leave you to go forth and do great things.
381 |
382 | * Further Reading
383 | If you came here looking for a more in depth explanation of some of Org Mode's core features, please check out the very detailed write up I did in my [[https://github.com/james-stoup/emacs-org-mode-tutorial/][Emacs Org Mode Tutorial]]. For the new people, you don't need to read that document (it is huge and can be daunting) as it is designed for people who want to really customize their Org Mode configurations. However, it does provide a lot of useful explanations with screenshots, so maybe come back to it once you've gotten some more experience with Org Mode.
384 |
385 |
386 |
387 |
388 |
389 |
--------------------------------------------------------------------------------
/images/image-0-font-picker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-0-font-picker.png
--------------------------------------------------------------------------------
/images/image-0-set-font-size.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-0-set-font-size.png
--------------------------------------------------------------------------------
/images/image-1-first-launch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-1-first-launch.png
--------------------------------------------------------------------------------
/images/image-10-agenda-launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-10-agenda-launcher.png
--------------------------------------------------------------------------------
/images/image-11-agenda-view-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-11-agenda-view-small.png
--------------------------------------------------------------------------------
/images/image-11-agenda-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-11-agenda-view.png
--------------------------------------------------------------------------------
/images/image-12-agenda-in-use.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-12-agenda-in-use.png
--------------------------------------------------------------------------------
/images/image-13-changing-todo-state.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-13-changing-todo-state.png
--------------------------------------------------------------------------------
/images/image-14-adding-state-change-note.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-14-adding-state-change-note.png
--------------------------------------------------------------------------------
/images/image-15-work-in-progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-15-work-in-progress.png
--------------------------------------------------------------------------------
/images/image-16-blocked-by-bob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-16-blocked-by-bob.png
--------------------------------------------------------------------------------
/images/image-17-link-to-doc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-17-link-to-doc.png
--------------------------------------------------------------------------------
/images/image-18-todo-2-is-done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-18-todo-2-is-done.png
--------------------------------------------------------------------------------
/images/image-19-agenda-views.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-19-agenda-views.png
--------------------------------------------------------------------------------
/images/image-2-installing-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-2-installing-icons.png
--------------------------------------------------------------------------------
/images/image-20-agenda-log-view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-20-agenda-log-view.png
--------------------------------------------------------------------------------
/images/image-21-set-deadline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-21-set-deadline.png
--------------------------------------------------------------------------------
/images/image-22-todo-3-in-progress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-22-todo-3-in-progress.png
--------------------------------------------------------------------------------
/images/image-23-new-todo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-23-new-todo.png
--------------------------------------------------------------------------------
/images/image-24-creating-check-boxes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-24-creating-check-boxes.png
--------------------------------------------------------------------------------
/images/image-25-adding-tables.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-25-adding-tables.png
--------------------------------------------------------------------------------
/images/image-3-fonts-installed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-3-fonts-installed.png
--------------------------------------------------------------------------------
/images/image-4-org-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-4-org-default.png
--------------------------------------------------------------------------------
/images/image-40-better-defaults.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-40-better-defaults.png
--------------------------------------------------------------------------------
/images/image-41-standard-defaults.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-41-standard-defaults.png
--------------------------------------------------------------------------------
/images/image-5-better-defaults.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-5-better-defaults.png
--------------------------------------------------------------------------------
/images/image-6-blank-slate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-6-blank-slate.png
--------------------------------------------------------------------------------
/images/image-7-capture-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-7-capture-template.png
--------------------------------------------------------------------------------
/images/image-8-new-meeting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-8-new-meeting.png
--------------------------------------------------------------------------------
/images/image-9-filling-out-a-meeting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/james-stoup/org-mode-better-defaults/cebe736b9f52395d289f197eba7ec5dee9b6a4b0/images/image-9-filling-out-a-meeting.png
--------------------------------------------------------------------------------
/org-better-defaults.org:
--------------------------------------------------------------------------------
1 | :DOC-CONFIG:
2 | #+property: header-args:emacs-lisp :tangle (concat (file-name-sans-extension (buffer-file-name)) ".el")
3 | #+property: header-args :mkdirp yes :comments no
4 | #+startup: fold
5 | :END:
6 |
7 | #+title: Org Better Defaults
8 | #+author: James Stoup
9 | #+email: jrstoup@gmail.com
10 |
11 |
12 | This repo is designed to improve the Org Mode experience with better default settings. Out of the box, Org Mode is already very useful. However, the experience can be greatly improved by making some basic changes to enhance your workflow and improve your experience. Many of these settings are recommended in various Org Mode tutorials, blogs, demos, and videos. This just saves you the time of having to make all these changes yourself.
13 |
14 | * Initial Setup
15 | This is the core setup that adds the core repos, configures use-package, sets useful defaults, initializes an auto complete and project management system, and finally sets some nice UI tweaks that greatly enhance the experience.
16 | ** Load Custom File
17 | Load the ~custom.el~ file so any UI changes you make get saved and loaded properly.
18 |
19 | #+begin_src emacs-lisp
20 | (setq custom-file "~/.emacs.d/custom.el")
21 | (if (file-exists-p custom-file)
22 | (load custom-file))
23 | #+end_src
24 | ** Add Core Repositories
25 | Add additional repositories
26 | #+begin_src emacs-lisp
27 | (require 'package)
28 | (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
29 | (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") )
30 | (add-to-list 'package-archives '("nongnu" . "https://elpa.nongnu.org/nongnu/") )
31 | #+end_src
32 | ** Setup Use-Package
33 | This has to be installed first.
34 |
35 | #+begin_src emacs-lisp
36 | ;; Added by Package.el. This must come before configurations of
37 | ;; installed packages. Don't delete this line. If you don't want it,
38 | ;; just comment it out by adding a semicolon to the start of the line.
39 | ;; You may delete these explanatory comments.
40 | (package-initialize)
41 |
42 | (unless (package-installed-p 'use-package)
43 | (package-refresh-contents)
44 | (package-install 'use-package))
45 |
46 | ;; Enable use-package
47 | (eval-when-compile
48 | (require 'use-package))
49 |
50 | (setq use-package-always-ensure t)
51 | #+end_src
52 | ** Configure Basic Functionality
53 | This makes the UI a little more pleasant.
54 |
55 | #+begin_src emacs-lisp
56 | (use-package emacs
57 | :init
58 | (set-language-environment "UTF-8")
59 | (set-default-coding-systems 'utf-8-unix)
60 | (setq confirm-kill-processes nil) ; Stop confirming the killing of processes
61 | (setq use-short-answers t) ; y-or-n-p makes answering questions faster
62 | (setq read-process-output-max (* 1024 1024)) ; Increase the amount of data which Emacs reads from the process
63 | (setq gc-cons-threshold 100000000)
64 | (setq lsp-idle-delay 0.500)
65 | )
66 |
67 | (add-to-list 'image-types 'svg)
68 | #+end_src
69 | ** Install Small Packages
70 | These are a bunch of small, but useful, packages that make using org much nicer.
71 |
72 | #+begin_src emacs-lisp
73 | (use-package all-the-icons
74 | :if (display-graphic-p))
75 |
76 | (use-package auto-highlight-symbol
77 | :config
78 | (global-auto-highlight-symbol-mode t)
79 | )
80 |
81 | (use-package better-defaults)
82 |
83 | ;; Comment tags become colorized when followed by a colon.
84 | ;; Example: // BUG: We don't check for null return values
85 | (use-package comment-tags)
86 | (autoload 'comment-tags-mode "comment-tags-mode")
87 | (setq comment-tags-keymap-prefix (kbd "C-c t"))
88 | (with-eval-after-load "comment-tags"
89 | (setq comment-tags-keyword-faces
90 | `(("TODO" . ,(list :weight 'bold :foreground "Cyan"))
91 | ("FIXME" . ,(list :weight 'bold :foreground "Red"))
92 | ("BUG" . ,(list :weight 'bold :foreground "Red"))
93 | ("HACK" . ,(list :weight 'bold :foreground "Yellow"))
94 | ("INFO" . ,(list :weight 'bold :foreground "LimeGreen"))
95 | )
96 | )
97 | (setq comment-tags-comment-start-only t
98 | comment-tags-require-colon t
99 | comment-tags-case-sensitive t
100 | comment-tags-show-faces t
101 | comment-tags-lighter nil))
102 | (add-hook 'prog-mode-hook 'comment-tags-mode)
103 |
104 | (use-package compat)
105 |
106 | ;; auto format on save
107 | (use-package format-all)
108 | (format-all-mode)
109 |
110 | ;; Highlight matching parens
111 | (use-package highlight-parentheses)
112 |
113 | ;; To make viewing your exported markdown code easier
114 | (use-package markdown-mode)
115 |
116 | ;; Makes your modeline prettier
117 | (use-package mode-icons
118 | :config
119 | (mode-icons-mode)
120 | )
121 |
122 | (use-package org-bullets) ;; TODO: Move this to the org section
123 |
124 | ;; Makes installing packages easier
125 | (use-package paradox)
126 | (paradox-enable)
127 |
128 | (use-package paredit)
129 |
130 | ;; Colorize your parens for easier viewing
131 | (use-package rainbow-delimiters)
132 | (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
133 |
134 | (use-package which-key
135 | :config
136 | (which-key-mode)
137 | )
138 | #+end_src
139 |
140 | ** Helm
141 | There are several options for this kind of functionality, but I'm going with Helm.
142 |
143 | #+begin_src emacs-lisp
144 | (use-package helm
145 | :init
146 | (helm-mode 1)
147 | (progn (setq helm-buffers-fuzzy-matching t))
148 | :bind
149 | (("C-c h" . helm-command-prefix))
150 | (("M-x" . helm-M-x))
151 | (("C-x b" . helm-buffers-list))
152 | (("C-c b" . helm-bookmarks))
153 | (("C-c g" . helm-grep-do-git-grep)) ;; Search using grep in a git project
154 | )
155 |
156 | ;;Describe keyboard bindings
157 | (use-package helm-descbinds
158 | :bind ("C-h b" . helm-descbinds)
159 | )
160 | #+end_src
161 |
162 | ** Default Org Location
163 | Org needs to know where to look for things and the most common place to put your org files is in your home directory. So first let's create the ~~/org~ directory if it doesn't already exist. Then we can associate all files ending in ~.org~ with ~org-mode~.
164 |
165 | #+begin_src emacs-lisp
166 | (if (not (file-directory-p (substitute-in-file-name "$HOME/org")))
167 | (let ((org-dir (substitute-in-file-name "$HOME/org")))
168 | (make-directory org-dir))
169 | )
170 |
171 | (setq org-agenda-files '("~/org"))
172 |
173 | (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
174 | #+end_src
175 |
176 | ** Treemacs
177 | Treemacs needs to be installed because it will allow you to view the top two headings of org files. Effectively creating a top level outline view of all org files. This is incredibly useful. With this hook treemacs will start as soon as Emacs is launched. When that happens, it will prompt for the directory to use as the root of the project. I recommend using the org directory in your home directory (don't worry, it gets automatically created) as that is a pretty standard place to store your org files.
178 |
179 | #+begin_src emacs-lisp
180 | (use-package treemacs
181 | :hook (after-init . treemacs)
182 | :bind
183 | (:map global-map
184 | ("M-0" . treemacs-select-window)
185 | ("C-x t t" . treemacs)
186 | ("C-x t C-t" . treemacs-find-file)
187 | ("C-x t M-t" . treemacs-find-tag))
188 | )
189 | (treemacs-add-project "$HOME/org")
190 | #+end_src
191 | ** Improved Modeline
192 | This modeline is nicer than the default one. It is a small tweak, but I like it.
193 |
194 | #+begin_src emacs-lisp
195 | (use-package doom-modeline
196 | :ensure t
197 | :hook (after-init . doom-modeline-mode)
198 | )
199 | #+end_src
200 | ** Improved Defaults
201 | Making the UI a little easier to interact with.
202 |
203 | #+begin_src emacs-lisp
204 | ;; Start with the window maximized
205 | (toggle-frame-maximized)
206 |
207 | ;; show the menu bar
208 | (menu-bar-mode t)
209 |
210 | ;; show columns in addition to lines
211 | (setq column-number-mode t
212 | initial-scratch-message nil
213 | visible-bell t
214 | show-paren-mode 1)
215 |
216 | ;; show line numbers
217 | (when (version<= "26.0.50" emacs-version )
218 | (global-display-line-numbers-mode))
219 |
220 | ;; make PC keyboard's Win key or other to type Super or Hyper, for emacs running on Windows.
221 | (setq w32-pass-lwindow-to-system nil)
222 | (setq w32-lwindow-modifier 'super) ; Left Windows key
223 |
224 | ;; Navigate split windows using SHIFT + ARROW KEY
225 | (windmove-default-keybindings)
226 |
227 | ;; Default to y/n instead of yes/no
228 | (defalias 'yes-or-no-p 'y-or-n-p)
229 |
230 | ;; Cleanup whitespace
231 | (add-hook 'before-save-hook 'delete-trailing-whitespace)
232 | #+end_src
233 |
234 | * Core Org Mode Settings
235 | ** Better Keybindings
236 | We can make things easier on ourselves with some better keybindings.
237 |
238 | #+begin_src emacs-lisp
239 | (define-key global-map "\C-cl" 'org-store-link)
240 | (define-key global-map "\C-ca" 'org-agenda)
241 | (define-key global-map "\C-cc" 'org-capture)
242 | #+end_src
243 |
244 | ** Indentation
245 | This makes things look so much nicer.
246 |
247 | #+begin_src emacs-lisp
248 | ;; Better indents
249 | (use-package org-indent
250 | :ensure nil
251 | :diminish
252 | :hook (org-mode . org-indent-mode)
253 | :custom
254 | (org-indent-indentation-per-level 4))
255 | #+end_src
256 |
257 | ** Auto Lists
258 | This is something so simple I can't believe it isn't already turned on by default. Calvin Young's [[https://github.com/calvinwyoung/org-autolist][org-autolist]] is so useful. When you are making a list and you hit return, it automatically adds another bullet for you. It is wonderful.
259 |
260 | #+begin_src emacs-lisp
261 | (use-package org-autolist
262 | :hook (org-mode . org-autolist-mode)
263 | )
264 | #+end_src
265 |
266 | ** Logging
267 | It is often helpful to record a timemstamp when a TODO item is marked done. You can record a timestamp as well as a note by changing ~'time~ to ~'note~, but that can be overkill for most things.
268 |
269 | #+begin_src emacs-lisp
270 | (setq org-log-done 'time)
271 | #+end_src
272 |
273 | ** Colors
274 |
275 | #+begin_src emacs-lisp
276 | (setq light-mode nil)
277 |
278 | (if light-mode
279 | (setq
280 | ;; TODO States
281 | todo-color "DarkOrange"
282 | in-progress-color "DeepSkyBlue3"
283 | blocked-color "Firebrick1"
284 | done-color "Green3"
285 | wont-do-color "Green3"
286 |
287 | ;; Tags
288 | critical-color "red1"
289 | easy-color "turquoise4"
290 | medium-color "turquoise4"
291 | hard-color "turquoise4"
292 | work-color "royalblue1"
293 | home-color "mediumPurple2"
294 | )
295 | (setq
296 | ;; TODO States
297 | todo-color "GoldenRod"
298 | in-progress-color "Cyan"
299 | blocked-color "Red"
300 | done-color "LimeGreen"
301 | wont-do-color "LimeGreen"
302 |
303 | ;; Tags
304 | critical-color "red1"
305 | easy-color "cyan3"
306 | medium-color "cyan3"
307 | hard-color "cyan3"
308 | work-color "royalblue1"
309 | home-color "mediumPurple1"
310 | )
311 | )
312 | #+end_src
313 |
314 | ** Better Babel
315 | Working in source blocks is an amazing feature, but there are some annoyances. No longer having to confirm every time you want to execute a code block is wonderful.
316 |
317 | #+begin_src emacs-lisp
318 | (use-package org
319 | :pin gnu
320 | :custom
321 | (org-confirm-babel-evaluate nil) ;; Don't prompt before running code in org
322 | (org-src-fontify-natively t) ;; Use syntax highlighting in source blocks while editing
323 | (org-src-tab-acts-natively t) ;; Tabs act as 4 spaces in source blocks
324 | (org-src-preserve-indentation t) ;; Preserving indentation in source blocks
325 | )
326 | #+end_src
327 |
328 | ** Misc
329 | Always open links by hitting return.
330 |
331 | #+begin_src emacs-lisp
332 | (setq org-return-follows-link t)
333 | #+end_src
334 |
335 | * Better TODO Settings
336 | ** Expanding TODO Keywords
337 | This expands the default TODO keywords by giving us some more robust options. Now there are two more working states and the ending state can be either DONE or WONT-DO.
338 |
339 | #+begin_src emacs-lisp
340 | (setq org-todo-keywords
341 | '((sequence "TODO(t)" "IN-PROGRESS(i@/!)" "BLOCKED(b@/!)" "|" "DONE(d!)" "WONT-DO(w@/!)" ))
342 | )
343 | #+end_src
344 |
345 | ** Adding Better Capture Templates
346 | #+begin_src emacs-lisp
347 | (setq org-capture-templates
348 | '(
349 | ("t" "TODO Item"
350 | entry (file "~/org/todos.org")
351 | "* TODO [#B] %? %^g\n"
352 | :empty-lines 0)
353 |
354 | ("j" "Journal Entry"
355 | entry (file+datetree "~/org/journal.org")
356 | "* %?"
357 | :empty-lines 1)
358 |
359 | ("m" "Meeting"
360 | entry (file+datetree "~/org/meetings.org")
361 | "* %? :meeting:%^g \n** Attendees\n - \n** Notes\n** Action Items\n*** TODO [#A] "
362 | :tree-type week
363 | :clock-in t
364 | :clock-resume t
365 | :empty-lines 0)
366 |
367 | ("n" "Note"
368 | entry (file+headline "~/org/notes.org" "Random Notes")
369 | "** %?"
370 | :empty-lines 0)
371 | ))
372 | #+end_src
373 | ** Adding Tags
374 | #+begin_src emacs-lisp
375 | (setq org-tag-alist
376 | '(
377 | (:startgroup . nil)
378 | ("easy" . ?e)
379 | ("medium" . ?m)
380 | ("difficult" . ?d)
381 | (:endgroup . nil)
382 |
383 | (:startgroup . nil)
384 | ("@work" . ?w)
385 | ("@home" . ?h)
386 | ("@anywhere" . ?a)
387 | (:endgroup . nil)
388 |
389 | ("CRITICAL" . ?c)
390 | ))
391 | #+end_src
392 |
393 | * Better Agendas
394 | ** Daily Agenda
395 | #+begin_src emacs-lisp
396 | (defun air-org-skip-subtree-if-priority (priority)
397 | "Skip an agenda subtree if it has a priority of PRIORITY.
398 |
399 | PRIORITY may be one of the characters ?A, ?B, or ?C."
400 | (let ((subtree-end (save-excursion (org-end-of-subtree t)))
401 | (pri-value (* 1000 (- org-lowest-priority priority)))
402 | (pri-current (org-get-priority (thing-at-point 'line t))))
403 | (if (= pri-value pri-current)
404 | subtree-end
405 | nil)))
406 |
407 | ;; This is a function used by the daily agenda function
408 | (defun air-org-skip-subtree-if-habit ()
409 | "Skip an agenda entry if it has a STYLE property equal to \"habit\"."
410 | (let ((subtree-end (save-excursion (org-end-of-subtree t))))
411 | (if (string= (org-entry-get nil "STYLE") "habit")
412 | subtree-end
413 | nil)))
414 |
415 | (setq org-agenda-skip-deadline-if-done t)
416 |
417 | ;; Additional Agenda configurations can be defined here, right now there is only this one
418 | (setq org-agenda-custom-commands
419 | '(
420 | ;; Daily Agenda - most used
421 | ("d" "Daily agenda and all TODOs"
422 | ((tags "PRIORITY=\"A\""
423 | ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
424 | (org-agenda-overriding-header "High-priority unfinished tasks:")))
425 | (agenda "" ((org-agenda-span 7)))
426 | (alltodo ""
427 | ((org-agenda-skip-function '(or (air-org-skip-subtree-if-priority ?A)
428 | (air-org-skip-subtree-if-priority ?C)
429 | (org-agenda-skip-if nil '(scheduled deadline))))
430 | (org-agenda-overriding-header "ALL normal priority tasks:")))
431 | (tags "PRIORITY=\"C\""
432 | ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
433 | (org-agenda-overriding-header "Low-priority Unfinished tasks:")))
434 | )
435 | ((org-agenda-compact-blocks nil)))
436 | ))
437 | #+end_src
438 |
439 | * Org UI Improvements
440 | ** Colorizing TODOs
441 |
442 | #+begin_src emacs-lisp
443 | (setq org-todo-keyword-faces
444 | `(
445 | ("TODO" . (:weight bold :foreground ,todo-color ))
446 | ("IN-PROGRESS" . (:weight bold :foreground ,in-progress-color ))
447 | ("BLOCKED" . (:weight bold :foreground ,blocked-color ))
448 | ("DONE" . (:weight bold :foreground ,done-color ))
449 | ("WONT-DO" . (:weight bold :foreground ,wont-do-color ))
450 | )
451 | )
452 | #+end_src
453 |
454 | ** Colorizing Tags
455 | #+begin_src emacs-lisp
456 | (setq org-tag-faces
457 | `(
458 | ("CRITICAL" . (:weight bold :foreground ,critical-color ))
459 | ("easy" . (:weight bold :foreground ,easy-color ))
460 | ("medium" . (:weight bold :foreground ,medium-color ))
461 | ("hard" . (:weight bold :foreground ,hard-color ))
462 | ("@work" . (:weight bold :foreground ,work-color ))
463 | ("@home" . (:weight bold :foreground ,home-color ))
464 | )
465 | )
466 | #+end_src
467 |
468 | ** Misc Features
469 |
470 | #+begin_src emacs-lisp
471 | (setq org-hide-emphasis-markers nil)
472 | (add-hook 'org-mode-hook 'visual-line-mode)
473 | #+end_src
474 |
475 | ** Better Fonts
476 | Making the fonts look cleaner.
477 |
478 | #+begin_src emacs-lisp
479 | (let* ((variable-tuple
480 | (cond ((x-list-fonts "ETBembo") '(:font "ETBembo"))
481 | ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro"))
482 | ((x-list-fonts "Lucida Grande") '(:font "Lucida Grande"))
483 | ((x-list-fonts "Verdana") '(:font "Verdana"))
484 | ((x-family-fonts "Sans Serif") '(:family "Sans Serif"))
485 | (nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro."))))
486 | (base-font-color (face-foreground 'default nil 'default))
487 | (headline `(:inherit default :weight bold :foreground ,base-font-color)))
488 |
489 | (custom-theme-set-faces
490 | 'user
491 | `(org-level-8 ((t (,@headline ,@variable-tuple))))
492 | `(org-level-7 ((t (,@headline ,@variable-tuple))))
493 | `(org-level-6 ((t (,@headline ,@variable-tuple))))
494 | `(org-level-5 ((t (,@headline ,@variable-tuple))))
495 | `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1))))
496 | `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25))))
497 | `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5))))
498 | `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75))))
499 | `(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil))))
500 | )
501 | )
502 | #+end_src
503 | ** Strike Through DONE Items
504 | #+begin_src emacs-lisp
505 | (defun my/modify-org-done-face ()
506 | (setq org-fontify-done-headline t)
507 | (set-face-attribute 'org-done nil :strike-through t)
508 | (set-face-attribute 'org-headline-done nil
509 | :strike-through t
510 | :foreground "light gray"))
511 |
512 | (eval-after-load "org"
513 | (add-hook 'org-add-hook 'my/modify-org-done-face))
514 | #+end_src
515 |
516 |
517 |
518 |
519 |
--------------------------------------------------------------------------------