Commit 523e1cbdc9
Unsigned
Layout: unified · split
content/blog/2024-08-11-org-mode-features.org added +351
| @@ -0,0 +1,351 @@ | |||
| 1 | #+date: <2024-08-12 Mon 12:48:00> | ||
| 2 | #+title: My Top 8 Most Used Org-Mode Features | ||
| 3 | #+description: Read about my personal favorite org-mode features and how I use them. | ||
| 4 | #+filetags: :org-mode: | ||
| 5 | #+slug: org-mode-features | ||
| 6 | |||
| 7 | * Cycling (Folding) | ||
| 8 | |||
| 9 | #+begin_quote | ||
| 10 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L7][View this section]] in org-mode. | ||
| 11 | #+end_quote | ||
| 12 | |||
| 13 | My absolute top-used feature is [[https://orgmode.org/manual/Global-and-local-cycling.html][global and local cycling]] and it's not even | ||
| 14 | close. Being able to hit =S-TAB= and collapse all headings when opening a file | ||
| 15 | or needing to see a file's headings is an under appreciated trait. | ||
| 16 | |||
| 17 | ** Local Cycling | ||
| 18 | |||
| 19 | When focused on a heading, you can press =TAB= (=org-cycle=) to cycle that | ||
| 20 | subtree among the states =folded=, =children=, and =subtree=. | ||
| 21 | |||
| 22 | #+begin_src txt | ||
| 23 | ,-> FOLDED -> CHILDREN -> SUBTREE --. | ||
| 24 | '-----------------------------------' | ||
| 25 | #+end_src | ||
| 26 | |||
| 27 | ** Global Cycling | ||
| 28 | |||
| 29 | If you're looking to cycle more than one subtree or heading at a time, you can | ||
| 30 | press =S-TAB= or =C-u TAB= to cycle the entire buffer among the states | ||
| 31 | =overview=, =contents=, and =show all=. | ||
| 32 | |||
| 33 | #+begin_src txt | ||
| 34 | ,-> OVERVIEW -> CONTENTS -> SHOW ALL --. | ||
| 35 | '--------------------------------------' | ||
| 36 | #+end_src | ||
| 37 | |||
| 38 | ** Default Views | ||
| 39 | |||
| 40 | If you need to set a default view for a certain file, you can run =C-u C-u TAB= | ||
| 41 | to set the =org-set-startup-visibility=. Alternatively, just put the following | ||
| 42 | at the top of the buffer: | ||
| 43 | |||
| 44 | #+begin_src org | ||
| 45 | #+STARTUP: overview | ||
| 46 | #+STARTUP: content | ||
| 47 | #+STARTUP: showall | ||
| 48 | #+STARTUP: show2levels | ||
| 49 | #+STARTUP: show3levels | ||
| 50 | #+STARTUP: show4levels | ||
| 51 | #+STARTUP: show5levels | ||
| 52 | #+STARTUP: showeverything | ||
| 53 | #+end_src | ||
| 54 | |||
| 55 | * TODO Lists | ||
| 56 | |||
| 57 | #+begin_quote | ||
| 58 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L58][View this section]] in org-mode. | ||
| 59 | #+end_quote | ||
| 60 | |||
| 61 | Next up on in this post are [[https://orgmode.org/manual/TODO-Items.html][TODO Lists]]. Being able to combine note taking and | ||
| 62 | reminders was the primary reason I switched to org-mode in the first place. | ||
| 63 | |||
| 64 | TODO lists are more than just the Markdown equivalent of =- [ ] Task=. Instead, | ||
| 65 | you can utilize org-mode's native functionality to dynamically create TODO | ||
| 66 | items, have fast access to TODO states, log progress on tasks, clocking work | ||
| 67 | time, prioritization, breaking down tasks into subtasks, and even using checkbox | ||
| 68 | formatting as well. | ||
| 69 | |||
| 70 | ** Prioritizing Tasks | ||
| 71 | |||
| 72 | One of my favorite ways to separate my tasks are to assign priorities. You can | ||
| 73 | do this by placing a priority cookie into the headline of a TODO item. | ||
| 74 | |||
| 75 | #+begin_src org | ||
| 76 | ,*** TODO [#A] My Task | ||
| 77 | ,*** TODO [#C] My Other Task | ||
| 78 | #+end_src | ||
| 79 | |||
| 80 | You can quickly shift priorities with =S-UP= and =S-DOWN=, as well as set the | ||
| 81 | allowed priorities for a buffer with the following syntax: | ||
| 82 | |||
| 83 | #+begin_src org | ||
| 84 | #+PRIORITIES: A C B | ||
| 85 | #+PRIORITIES: 1 10 5 | ||
| 86 | #+end_src | ||
| 87 | |||
| 88 | ** Deadlines | ||
| 89 | |||
| 90 | Plans can be set per task by settings special keywords with a date. You can set | ||
| 91 | a =DEADLINE= to note when the task will appear in the agenda or set the | ||
| 92 | =SCHEDULED= variable to note when you plan to start working on the task. | ||
| 93 | |||
| 94 | #+begin_src org | ||
| 95 | ,* TODO My Task | ||
| 96 | DEADLINE: <2004-02-29 Sun> | ||
| 97 | |||
| 98 | ,* My Other Task | ||
| 99 | SCHEDULED: <2004-12-25 Sat> | ||
| 100 | #+end_src | ||
| 101 | |||
| 102 | As a side note, I use [[https://www.beorgapp.com/][Beorg]] on iOS to sync and edit my org-mode files on the go. | ||
| 103 | Within this app, I use the =SCHEDULED= variable by default and rely heavily on | ||
| 104 | that variable to alert me of tasks with iOS native notifications. | ||
| 105 | |||
| 106 | * Time Stamping | ||
| 107 | |||
| 108 | #+begin_quote | ||
| 109 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L106][View this section]] in org-mode. | ||
| 110 | #+end_quote | ||
| 111 | |||
| 112 | Another great feature are the [[https://orgmode.org/manual/Dates-and-Times.html][dates and times]] functionalities within org-mode. | ||
| 113 | Timestamps follow this format in org-mode: | ||
| 114 | |||
| 115 | #+begin_src org | ||
| 116 | ,* An active timestamp | ||
| 117 | <2006-11-01 Wed 19:15> | ||
| 118 | |||
| 119 | ,* An inactive timestamp | ||
| 120 | [2006-11-01 Wed 19:15> | ||
| 121 | |||
| 122 | ,* Repeated timestamps | ||
| 123 | <2006-11-01 Wed 19:15 +1m> | ||
| 124 | |||
| 125 | ,* Time range | ||
| 126 | <2006-11-02 Thu 10:00-12:00> | ||
| 127 | |||
| 128 | ,* Date range | ||
| 129 | <2004-08-23 Mon>--<2004-08-26 Thu> | ||
| 130 | #+end_src | ||
| 131 | |||
| 132 | In addition to the deadlines mentioned above, you can insert timestamps into any | ||
| 133 | marker within the buffer with =C-c .= for an active timestamp and =C-c != for an | ||
| 134 | inactive timestamp. You can read more on [[https://orgmode.org/manual/Creating-Timestamps.html][creating timestamps]] to figure out the | ||
| 135 | different options available when creating timestamps. | ||
| 136 | |||
| 137 | * Tags | ||
| 138 | |||
| 139 | #+begin_quote | ||
| 140 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L137][View this section]] in org-mode. | ||
| 141 | #+end_quote | ||
| 142 | |||
| 143 | Next up are [[https://orgmode.org/manual/Tags.html][Tags]], which provide a way to document contexts within and across | ||
| 144 | buffers and files. | ||
| 145 | |||
| 146 | You can assign tags directly to headlines or at the file level and can contain | ||
| 147 | letters, numbers, underscores, and the =@= symbol. | ||
| 148 | |||
| 149 | #+begin_src org | ||
| 150 | ,#+FILETAGS: :Fruits: | ||
| 151 | |||
| 152 | ,* Pick fruits off the trees :work: | ||
| 153 | ,** Start with the orange grove :orange:tree: | ||
| 154 | ,*** TODO Pick bananas last :banana: | ||
| 155 | #+end_src | ||
| 156 | |||
| 157 | ** Filtering and Searching by Tag | ||
| 158 | |||
| 159 | You can search for tags with =C-c \= or open the org-agenda with =M-x org-agenda | ||
| 160 | m= and search for a tag of your choosing. | ||
| 161 | |||
| 162 | * Tables | ||
| 163 | |||
| 164 | #+begin_quote | ||
| 165 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L162][View this section]] in org-mode. | ||
| 166 | #+end_quote | ||
| 167 | |||
| 168 | One of the most inconvenient parts of writing in Markdown was dealing with | ||
| 169 | tables. In org-mode, [[https://orgmode.org/manual/Tables.html][Tables]] are a breeze due to Emacs's built-in table editor | ||
| 170 | and formatter. | ||
| 171 | |||
| 172 | ** Built-In Table Editor | ||
| 173 | |||
| 174 | With the built-in table editor, press =C-c |= to convert the active region to a | ||
| 175 | table or create an empty table. | ||
| 176 | |||
| 177 | When focused on a table, press =TAB= to re-align the table. There are more | ||
| 178 | commands available to re-align, traverse, and edit cells and regions within | ||
| 179 | tables in Emacs. | ||
| 180 | |||
| 181 | For example, refer to the following table. This table uses the =TBLFM= variable | ||
| 182 | to define functions that will apply to the cells within the table. When I press | ||
| 183 | =C-c C-c=, the table cells updated to their resulting values. | ||
| 184 | |||
| 185 | | N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) | | ||
| 186 | |---+-----+-----+-----+-----------+------------| | ||
| 187 | | / | < | | > | < | > | | ||
| 188 | | 1 | 1 | 1 | 1 | 1 | 1 | | ||
| 189 | | 2 | 4 | 8 | 16 | 1.4142136 | 1.1892071 | | ||
| 190 | | 3 | 9 | 27 | 81 | 1.7320508 | 1.3160740 | | ||
| 191 | |---+-----+-----+-----+-----------+------------| | ||
| 192 | #+TBLFM: $2=$1^2::$3=$1^3::$4=$1^4::$5=sqrt($1)::$6=sqrt(sqrt(($1))) | ||
| 193 | |||
| 194 | ** Spreadsheet | ||
| 195 | |||
| 196 | If you spend a lot of time in spreadsheets, you'll appreciate the Emacs Calc | ||
| 197 | package, which Emacs uses to implement spreadsheet-like capabilities within | ||
| 198 | org-mode tables. | ||
| 199 | |||
| 200 | Read through the [[https://orgmode.org/manual/The-Spreadsheet.html][spreadsheet]] documentation to learn more about field references | ||
| 201 | (=@ROW$COLUMN=), range references (=$1..$3=), coordinates, formulas, and more. | ||
| 202 | |||
| 203 | For example, refer to the following table. Here is a table that computes the | ||
| 204 | Taylor series of degree n at location x for a couple of functions. You can clear | ||
| 205 | the values out of the =Result= column for each row, press =C-c C-c=, and watch | ||
| 206 | as the table re-calculates the results for each. | ||
| 207 | |||
| 208 | |---+-------------+---+-----+--------------------------------------| | ||
| 209 | | | Func | n | x | Result | | ||
| 210 | |---+-------------+---+-----+--------------------------------------| | ||
| 211 | | # | exp(x) | 1 | x | 1 + x | | ||
| 212 | | # | exp(x) | 2 | x | 1 + x + x^2 / 2 | | ||
| 213 | | # | exp(x) | 3 | x | 1 + x + x^2 / 2 + x^3 / 6 | | ||
| 214 | | # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 | | ||
| 215 | | # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2 | | ||
| 216 | | * | tan(x) | 3 | x | x pi / 180 + 5.72e-8 x^3 pi^3 | | ||
| 217 | |---+-------------+---+-----+--------------------------------------| | ||
| 218 | #+TBLFM: $5=taylor($2,$4,$3);n3 | ||
| 219 | |||
| 220 | Alternatively, you can also refer to the following table. This table will update | ||
| 221 | to different values based on the =TBLFM= I select when I'm pressing =C-c C-c=. | ||
| 222 | The results are =[1,2]= when focused on the first line and =[2,4]= when focused | ||
| 223 | on the second line. | ||
| 224 | |||
| 225 | | x | y | | ||
| 226 | |---+---| | ||
| 227 | | 1 | 2 | | ||
| 228 | | 2 | 4 | | ||
| 229 | #+TBLFM: $2=$1*1 | ||
| 230 | #+TBLFM: $2=$1*2 | ||
| 231 | |||
| 232 | * Source Code Blocks | ||
| 233 | |||
| 234 | #+begin_quote | ||
| 235 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L232][View this section]] in org-mode. | ||
| 236 | #+end_quote | ||
| 237 | |||
| 238 | ** Introduction to Source Code Blocks | ||
| 239 | |||
| 240 | If you run a technical blog, write code frequently, or like to take notes with | ||
| 241 | source code examples, you will appreciate the [[https://orgmode.org/manual/Working-with-Source-Code.html][source code]] functionality of | ||
| 242 | org-mode. | ||
| 243 | |||
| 244 | With this feature, org-mode can manage the source code you define with features | ||
| 245 | such as editing, formatting, extracting, exporting, and publishing. | ||
| 246 | Additionally, you can compile and execute source code dynamically within the | ||
| 247 | org-mode file or buffer. | ||
| 248 | |||
| 249 | A full source code block uses the following structure: | ||
| 250 | |||
| 251 | #+begin_src org | ||
| 252 | ,#+NAME: <name> | ||
| 253 | ,#+BEGIN_SRC <language> <switches> <header arguments> | ||
| 254 | <body> | ||
| 255 | ,#+END_SRC | ||
| 256 | #+end_src | ||
| 257 | |||
| 258 | You can also use inline blocks: | ||
| 259 | |||
| 260 | #+begin_src org | ||
| 261 | src_<language>[<header arguments>]{<body>} | ||
| 262 | #+end_src | ||
| 263 | |||
| 264 | ** Editing Source Code Blocks | ||
| 265 | |||
| 266 | When focused on a code block, press =C-c'= to edit the code block in a special | ||
| 267 | editor. Press =C-x C-x= to save the buffer and =C-c '= again to close the | ||
| 268 | buffer. | ||
| 269 | |||
| 270 | ** Syntax Highlighting and Formatting | ||
| 271 | |||
| 272 | Emacs provides syntax highlighting by default within org-mode's source code | ||
| 273 | blocks. Org-mode will copy the text to a temporary buffer, highlight it using | ||
| 274 | the major mode relevant to the language (e.g., [[https://www.gnu.org/software/emacs/manual/html_mono/ccmode.html][CC Mode]]), and then return the | ||
| 275 | resulting highlighted text. | ||
| 276 | |||
| 277 | ** Buffer Evaluation | ||
| 278 | |||
| 279 | By default, org-mode will only evaluate Emacs Lisp code blocks. You will need to | ||
| 280 | enable other [[https://orgmode.org/manual/Languages.html][languages]] in order to evaluate code blocks written in languages | ||
| 281 | other than elisp. | ||
| 282 | |||
| 283 | When focused on a code block, you can execute the block with =C-c C-c=. The | ||
| 284 | results of the evaluation will appear below the code block in a =RESULTS= block. | ||
| 285 | |||
| 286 | For example, here is a code block in elisp that I have written and evaluated with | ||
| 287 | org-mode inside this blog post. I will press =C-c C-c= and you will see the | ||
| 288 | results below the code block. | ||
| 289 | |||
| 290 | #+begin_src elisp | ||
| 291 | (defun greet-me () | ||
| 292 | (message "Hello, world!")) | ||
| 293 | |||
| 294 | (greet-me) | ||
| 295 | #+end_src | ||
| 296 | |||
| 297 | #+begin_src org | ||
| 298 | ,#+RESULTS: | ||
| 299 | : Hello, world! | ||
| 300 | #+end_src | ||
| 301 | |||
| 302 | * Exporting and Publishing | ||
| 303 | |||
| 304 | #+begin_quote | ||
| 305 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L302][View this section]] in org-mode. | ||
| 306 | #+end_quote | ||
| 307 | |||
| 308 | I would be remiss if I did not mention the native [[https://orgmode.org/manual/Exporting.html][exporting and publishing]] | ||
| 309 | functionality within Emacs and org-mode. | ||
| 310 | |||
| 311 | ** Built-In Publishing | ||
| 312 | |||
| 313 | This functionality allows you to translate Org to the following formats | ||
| 314 | (additional formats may be available via external packages): | ||
| 315 | |||
| 316 | - ascii (ASCII format) | ||
| 317 | - beamer (LaTeX Beamer format) | ||
| 318 | - html (HTML format) | ||
| 319 | - icalendar (iCalendar format) | ||
| 320 | - latex (LaTeX format) | ||
| 321 | - md (Markdown format) | ||
| 322 | - odt (OpenDocument Text format) | ||
| 323 | - org (Org format) | ||
| 324 | - texinfo (Texinfo format) | ||
| 325 | - man (Man page format) | ||
| 326 | |||
| 327 | You can export with =C-c C-h= and then select your preferred destination | ||
| 328 | format. For example, an export from org to HTML as a file would use =C-c C-e h | ||
| 329 | h=. | ||
| 330 | |||
| 331 | ** External Publishing Tools | ||
| 332 | |||
| 333 | If the native functionality isn't useful enough for you, there are a myriad of | ||
| 334 | external [[https://orgmode.org/tools.html][tools]], including [[https://orgmode.org/worg/org-blog-wiki.html][blogs and wikis]], that work with org-mode. | ||
| 335 | |||
| 336 | * Agenda | ||
| 337 | |||
| 338 | #+begin_quote | ||
| 339 | [[https://git.sr.ht/~cyborg/cleberg.net/tree/main/item/content/blog/2024-08-11-org-mode-features.org#L339][View this section]] in org-mode. | ||
| 340 | #+end_quote | ||
| 341 | |||
| 342 | Last, but not least, are [[https://orgmode.org/manual/Agenda-Views.html][Agenda Views]]. With agenda views, you can easily view | ||
| 343 | your agenda of TODO items, scheduled items, projects, etc. across your | ||
| 344 | collection of org-mode files. | ||
| 345 | |||
| 346 | Org-mode will extract all of this information from your org files | ||
| 347 | (=org-agenda-files=) and display it within the agenda buffer. | ||
| 348 | |||
| 349 | You can open the agenda with =M-x org-agenda=. Once inside the buffer, you can | ||
| 350 | use shortcuts in the [[https://orgmode.org/manual/Agenda-Dispatcher.html][Agenda Dispatcher]] to quickly view calendars, TODOs, create | ||
| 351 | items, filter items, and more. | ||
theme/templates/index.html +6 −7
| @@ -8,6 +8,12 @@ uid [ultimate] Christian Cleberg <hello@cleberg.net></pre> | |||
| 8 | <section> | 8 | <section> |
| 9 | <h2>Recent Blog Posts</h2> | 9 | <h2>Recent Blog Posts</h2> |
| 10 | 10 | ||
| 11 | <div class="post"> | ||
| 12 | <time date="2024-08-11 20:18:15">2024-08-11</time> | ||
| 13 | <a href="/blog/org-mode-features.html" | ||
| 14 | >My Top 8 Most Used Org-Mode Features</a | ||
| 15 | > | ||
| 16 | </div> | ||
| 11 | <div class="post"> | 17 | <div class="post"> |
| 12 | <time datetime="2024-07-11 20:24:02">2024-07-11</time> | 18 | <time datetime="2024-07-11 20:24:02">2024-07-11</time> |
| 13 | <a href="/blog/emacs-on-ipad.html">Emacs on iPadOS</a> | 19 | <a href="/blog/emacs-on-ipad.html">Emacs on iPadOS</a> |
| @@ -20,13 +26,6 @@ uid [ultimate] Christian Cleberg <hello@cleberg.net></pre> | |||
| 20 | > | 26 | > |
| 21 | </div> | 27 | </div> |
| 22 | 28 | ||
| 23 | <div class="post"> | ||
| 24 | <time datetime="2024-05-03 00:00:00">2024-05-03</time> | ||
| 25 | <a href="/blog/ubuntu-on-macos.html" | ||
| 26 | >Running Ubuntu Linux on macOS with OrbStack</a | ||
| 27 | > | ||
| 28 | </div> | ||
| 29 | |||
| 30 | <br /> | 29 | <br /> |
| 31 | <a href="/blog/">All Posts →</a> | 30 | <a href="/blog/">All Posts →</a> |
| 32 | </section> | 31 | </section> |