├── .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 | ![standard org mode settings](images/image-41-standard-defaults.png) 74 | 75 | 76 | 77 | 78 | ## Org Mode with Better Defaults 79 | 80 | And what Org Mode looks like with these Better Defaults: 81 | 82 | ![org mode with better defaults](images/image-40-better-defaults.png) 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 | ![initial Emacs install](images/image-3-fonts-installed.png) 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 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 |
FORMATORG MODEMARKDOWN
1st level heading* heading 1# heading 1
2nd level heading** heading 2## heading 2
3rd level heading*** heading 3### heading 3
Bold*bold***bold**
Italic/italic/*italic*
Strike-through+strike+~~strike~~
Code~code~`code`
Quote=quote=> quote
Bullet- bullet- bullet
Link[[link][title]][title](link)
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 | ![better defaults](images/image-5-better-defaults.png) 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 | ![agenda view](images/image-11-agenda-view-small.png) 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 | ![fresh install](images/image-6-blank-slate.png) 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 | ![the capture template](images/image-7-capture-template.png) 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 | ![setting tags for a new meeting](images/image-8-new-meeting.png) 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 | ![filling out the meeting](images/image-9-filling-out-a-meeting.png) 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 | ![agenda launcher](images/image-10-agenda-launcher.png) 458 | 459 | Press `d` to activate the Daily Agenda view. Your screen should now look like this: 460 | 461 | ![agenda view](images/image-11-agenda-view.png) 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 | ![agenda in use](images/image-12-agenda-in-use.png) 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 | ![changing from TODO to IN-PROGRESS](images/image-13-changing-todo-state.png) 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 | ![adding a state change note](images/image-14-adding-state-change-note.png) 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 | ![working TODO 1](images/image-15-work-in-progress.png) 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 | ![blocked by Bob](images/image-16-blocked-by-bob.png) 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 | ![adding a link to a TODO](images/image-17-link-to-doc.png) 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 | ![TODO 2 is done](images/image-18-todo-2-is-done.png) 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 | ![agenda view options](images/image-19-agenda-views.png) 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 | ![detailed agenda view](images/image-20-agenda-log-view.png) 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 | ![selecting a deadline](images/image-21-set-deadline.png) 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 | ![working todo 3](images/image-22-todo-3-in-progress.png) 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 | ![new todo](images/image-23-new-todo.png) 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 | ![checkboxes](images/image-24-creating-check-boxes.png) 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 | ![tables](images/image-25-adding-tables.png) 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 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 |
TASKSHORTCUTFUNCTIONNOTES
Open the Capture TemplateC-c corg-captureCreate a new TODO, Meeting, etc.
Open the AgendaC-c aorg-agendaView your calendar and all TODOs
Save your new TODO, Meeting, etc.C-c C-cN/ADo this to save your item
Discard your new TODO, Meeting, etc.C-c C-kN/ACancel out of the capture template
Change the TODO stateC-c C-torg-todoUse this to go from TODO to IN-PROGRESS
Select a deadline for a TODOC-c C-dorg-deadlineThis accepts syntax like +3d 11am
Turn Treemacs on/offC-x t ttreemacsThe file browser on the left side
Maximize the current paneC-x 1delete-other-windowsMake this pane the only one I see
Split window top and bottomC-x 2split-window-belowMake two panes, one above and below
Split window left and rightC-x 3split-window-rightMake two panes, one on the right and left
Save your fileC-x C-ssave-bufferSaves your current file
Close EmacsC-x C-csave-buffers-kill-terminalSave your files and close Emacs
Hide/Show HeadingTABN/AKeep hitting the TAB key to hide/show headings
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 | --------------------------------------------------------------------------------