thcThought Control

Writing

How the editor turns plain text into notes, tasks and dates, and how to stay out of its way.

The journal and every page open as a plain-text document. You type, and thc keeps track of the structure for you.

$ thc j               # today's journal, cursor on a fresh line at the end
$ thc j fri           # or yesterday, or 2026-10-02
$ thc p "Q4 Planning" # a page, by title or id

How the text becomes notes

You writeIt’s
A paragraph (lines with no blank line between)One note. Enter inside it is just a line break
A blank lineThe end of a note. The next text starts a new one
- milkA list item (one note). Enter continues the list
1. firstA numbered item. Enter makes 2.
[ ] call / [x] callA task, open or done
# Title, ## SectionA heading
Indented itemsChildren of the item above
> quote, fenced code, ---A quote, a code block, a rule

Blank lines are yours. The blank lines you type stay exactly where they are when a line changes kind (a task, back to text, nested with Tab), so the text never jumps. They’re saved with the note, and thc edit, thc import and the Markdown export keep them.

Each note has its own identity, dates and history, and you never see that machinery. Delete the [ ] and it’s plain text again, because what you see is the truth.

A few edges that behave the way your fingers expect:

  • Enter on an empty list item ends the list.
  • Backspace at the start of a paragraph joins it to the one above. On a task it takes the box off, then the bullet.
  • ⇧Enter (or ⌃J) breaks a line without leaving the item.
  • Long lines in a code block don’t wrap. They end in → and scroll sideways while you’re in them.
  • Emoji, flags, accents and CJK are single characters: one arrow press, one backspace.

Dates, tags and priority, inline

Type them anywhere on a line:

TokenMeans
due:fri, due:2026-10-10, due:"nov 1 9am"A hard deadline
sched:monWhen you plan to start. It shows in Today from then
at:"tue 2pm"An event at a time, with no task box
every:2w, every:weekday, every!:1moRepeats. ! counts from when you finish
!high !med !lowPriority
#tagA tag. It stays in the text
[[Page]]A link. A new name creates the page

While you type, tokens are underlined, and the right column previews what they’ll set (due fri · !high ✓), or says what it couldn’t read. When you leave the line, the dates and priority move into that quiet column. Type a new token to change one, or click it.

Quoted text is never a token. Inside “double quotes” or backticks, nothing is read as a date, priority, tag or link. That’s how you write about the syntax:

 [•] personal   Today   Inbox 2   Tasks   Pages   Journal   Search   Log 1        Sat Oct 3 · 10:41 
─────────────────────────────────────────────────━━━━━━━━━──────────────────────────────────────────
       § Journal › Sun 04 Oct                                                                       
       SUN 04 OCT 2026                                                                              
       THU 01 •   FRI 02 •   SAT 03 •   [SUN 04]   MON 05   TUE 06   WED 07                         
       ─────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    
       Write "due:fri" in quotes and it stays text. due:fri bare is a date,        due fri · !high ✓
       !high a priority, #lisbon a tag.▮                                                            
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
 § sun 04 oct · 19 words · autosaved    ⌃T task  ⌃O open  ⌃P ⌃N day  Esc done  F1 keys   thc 0.9.65 
 [•] personal   Today   Inbox 2   Tasks   Pages   Journal   Search   Log 1        Sat Oct 3 · 10:41 
─────────────────────────────────────────────────━━━━━━━━━──────────────────────────────────────────
       § Journal › Sun 04 Oct                                                                       
       SUN 04 OCT 2026                                                                              
       THU 01 •   FRI 02 •   SAT 03 •   [SUN 04]   MON 05   TUE 06   WED 07                         
       ─────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    
       Write "due:fri" in quotes and it stays text. due:fri bare is a date,        due fri · !high ✓
       !high a priority, #lisbon a tag.▮                                                            
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
 § sun 04 oct · 19 words · autosaved    ⌃T task  ⌃O open  ⌃P ⌃N day  Esc done  F1 keys   thc 0.9.65 
The quoted due:fri stays text. The bare due:fri, !high and #lisbon set fields.

Two of the same token on one line (!high … !low): the last one counts. The earlier one stays as plain words, and the hint says 2 priorities · using !low.

The full grammar, with every date form, is in Capture syntax.

Type [[ and a picker offers pages and days as you type. Enter or Tab links the one you chose; a page is only made when you pick a new name. Case doesn’t matter: [[lisbon]] links your Lisbon. A near miss ([[Lisbn]]) offers the page you probably meant, and ⌃O takes it before any new page is made.

A click on a link goes there, and Esc comes back. To edit one, click its [[ or ]], ⌥-click it, or arrow into it. With the cursor in a link, ⌃O goes there. Under every page, linked from lists the lines that mention it. Under a journal day, also today lists what’s due today elsewhere, and ticking a box there completes it where it lives.

 [•] personal   Today   Inbox 2   Tasks   Pages   Journal   Search   Log 1        Sat Oct 3 · 10:41 
─────────────────────────────────────────────────━━━━━━━━━──────────────────────────────────────────
       § Journal › Sat 03 Oct                                                                       
       SAT 03 OCT 2026 · TODAY                                                                      
       WED 30   THU 01 •   FRI 02 •   [SAT 03 •]   SUN 04   MON 05   TUE 06                         
       ─────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    
     · Morning: slept well, 30 min run #health                                                      
   [ ] Call dentist to reschedule #health                                            due fri · !high
     · Dentist appointment [[Health]]                                                      tue 14:00
   [ ] Pay rent                                                                tue 09:00 · ↻ monthly
     · Mom's birthday, call her                                                         oct 15 10:00
   [ ] Summarize unread newsletters into [[Reading List]]                               due tomorrow
                                                                                                    
       Read back through [[Q▮                                                                       
                          ┌──────────────────────────────────────┐                                  
       ───────────────────│¶ Q4 Planning                         │──────────────────────────────────
   [ ] Water plants       └──────────────────────────────────────┘             ¶ Home · today · ↻ 3d
   [ ] Replace furnace filter                                                ¶ Home · today · ↻ 3mo!
   [x] Renew passport #admin                                               § fri oct 02 · done 10:41
                                                                                                    
                                                                                                    
                                                                                                    
 § sat 03 oct · 31 words · autosaved                  ↑↓ choose  Enter link  Esc close   thc 0.9.65 
 [•] personal   Today   Inbox 2   Tasks   Pages   Journal   Search   Log 1        Sat Oct 3 · 10:41 
─────────────────────────────────────────────────━━━━━━━━━──────────────────────────────────────────
       § Journal › Sat 03 Oct                                                                       
       SAT 03 OCT 2026 · TODAY                                                                      
       WED 30   THU 01 •   FRI 02 •   [SAT 03 •]   SUN 04   MON 05   TUE 06                         
       ─────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    
     · Morning: slept well, 30 min run #health                                                      
   [ ] Call dentist to reschedule #health                                            due fri · !high
     · Dentist appointment [[Health]]                                                      tue 14:00
   [ ] Pay rent                                                                tue 09:00 · ↻ monthly
     · Mom's birthday, call her                                                         oct 15 10:00
   [ ] Summarize unread newsletters into [[Reading List]]                               due tomorrow
                                                                                                    
       Read back through [[Q▮                                                                       
                          ┌──────────────────────────────────────┐                                  
       ───────────────────│¶ Q4 Planning                         │──────────────────────────────────
   [ ] Water plants       └──────────────────────────────────────┘             ¶ Home · today · ↻ 3d
   [ ] Replace furnace filter                                                ¶ Home · today · ↻ 3mo!
   [x] Renew passport #admin                                               § fri oct 02 · done 10:41
                                                                                                    
                                                                                                    
                                                                                                    
 § sat 03 oct · 31 words · autosaved                  ↑↓ choose  Enter link  Esc close   thc 0.9.65 
[[ opens the picker: pages and days, as you type.

Tasks with notes become pages

A task with notes under it is an issue, and it opens as its own page: Enter on it in a list, or ⌃O on its line. The task line is the header (its box, who owns it, priority, when it was opened) and its notes are the body. Write there to add findings. Esc goes back where you came from.

The keys you need

KeyDoes
Just typeWrite
EnterA new line. Twice: a new note. In a list: the next item
Tab / ⇧TabIndent / outdent a note: any note nests under the one above, paragraphs too. Tab on a paragraph’s later line makes that line its child
⌃TText → task → done → text, on the line you’re on (just that line, even inside a paragraph) or every selected line
⌥↑ / ⌥↓Move the line, with its children
⇧ + arrowsSelect
⌘← ⌘→ / ⌥← ⌥→Line start or end / by word (⌃A ⌃E work too)
⌘⌫ / ⌥⌫Delete to the line start / a word
⌘C / ⌘X (or ⌃C / ⌃X)Copy / cut, as Markdown
⌘A (or ⌥A)Select all
⌘V or ⌃VPaste. Screenshots too
⌥VMake the next paste plain text
⌘Z / ⇧⌘Z (or ⌃Z / ⌃Y)Undo / redo
[[Link a page
⌃OOpen the link under the cursor, or go to any page or day
⌃P / ⌃NPrevious / next day
EscSave and go back: to the list or view you came from, else Today
⌃QQuit. Everything is already saved
F1Every key, for right here

The ⌘ keys need a terminal that sends them: kitty does, and WezTerm does after thc setup wezterm --yes. Every one has a ⌃ or ⌥ twin that works anywhere. More in Keys.

Paste Markdown from anywhere and it becomes notes: headings, lists, tasks, quotes and code, as one undo step. Copy gives clean Markdown back.

Screenshots and files

A note can carry an image or a file.

  • Paste a screenshot: copy one (⌃⇧⌘4 on a Mac), then ⌘V or ⌃V while writing. It’s attached as its own line, and ⌃Z undoes it. Text pastes exactly as before.
  • Drag a file onto the terminal and it’s attached at once. The bar says attached shot.png · ⌃Z keep the path: ⌃Z turns it back into the path as text, and again removes that. Press ⌥V before dragging to paste the path instead.
  • From the command line: thc attach <id> shot.png --caption "after the fix".
  • Find them later: every attachment is also an item of its own, so thc q is:image lists your images and thc show <id> says which notes use one.

An attachment shows as a chip, ▣ caption · 1280×720 · ⌃O open. Moving onto it never opens it: a click puts the cursor there and Enter starts a new line after it. ⌃O or a double-click opens it in your viewer. In WezTerm, iTerm2, kitty and Ghostty, an image also draws under its chip, sized to the text column. Over SSH, or with images = "chips" under [tui], you get the chip alone.

Underneath, the file is copied into the vault’s files/ folder and the note’s text is a Markdown image line, so it syncs with the vault and the export reads it. Files over 20 MB are refused (a vault setting, [attachments] max_mb).

Saving, undo and other devices

  • Saving is automatic: when you leave a note, after a short pause, and when you leave or quit. If a save is slow the footer says ◌ saving…, and if one fails, not saved · :retry.
  • Undo (⌃Z) works across saves. Each page and day remembers where your cursor was.
  • A crash or a closed window never loses what you typed.
  • If an agent or another device changes the note you’re in, thc tells you at once and applies it when you move off. It never rewrites the text under your cursor. If you both changed it, both versions are kept and marked ≠: compare them and choose (1 keep yours, 2 keep theirs, b both).

Focus

⌥Z hides everything but your words and the date. thc j opens this way; thc j --no-focus opens the full screen.

:focus lets you choose what stays: the keys footer, the day strip, a month calendar, the dates column, today’s other tasks, links, a word count, a clock, dimming, typewriter scrolling. Three starting points: bare (only your text), writer (the default: the date, the day strip, the footer and a word count) and planner (adds dates, a month beside the text, today’s tasks and a clock). Enter in the panel saves your choice. You can also type it: :focus planner, :focus +month -footer.

                 SAT 03 OCT 2026 · TODAY                                                            
                 WED 30   THU 01 •   FRI 02 •   [SAT 03 •]   SUN 04   MON 05   TUE 06               
                 ────────────────────────────────────────────────────────────────────────           
                                                                                                    
               · Morning: slept well, 30 min run #health                                            
             [ ] Call dentist to reschedule #health                                                 
               · Dentist appointment [[Health]]                                                     
             [ ] Pay rent                                                                           
               · Mom's birthday, call her                                                           
             [ ] Summarize unread newsletters into [[Reading List]]                                 
                                                                                                    
                 ▮                                                                                  
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
 § sat 03 oct · 27 words · autosaved    ⌃T task  ⌃O open  ⌃P ⌃N day  Esc done  F1 keys   thc 0.9.65 
                 SAT 03 OCT 2026 · TODAY                                                            
                 WED 30   THU 01 •   FRI 02 •   [SAT 03 •]   SUN 04   MON 05   TUE 06               
                 ────────────────────────────────────────────────────────────────────────           
                                                                                                    
               · Morning: slept well, 30 min run #health                                            
             [ ] Call dentist to reschedule #health                                                 
               · Dentist appointment [[Health]]                                                     
             [ ] Pay rent                                                                           
               · Mom's birthday, call her                                                           
             [ ] Summarize unread newsletters into [[Reading List]]                                 
                                                                                                    
                 ▮                                                                                  
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
 § sat 03 oct · 27 words · autosaved    ⌃T task  ⌃O open  ⌃P ⌃N day  Esc done  F1 keys   thc 0.9.65 
Focus, writer preset: the day, the strip of days, and your words.

Your $EDITOR

Prefer vim, Helix or Emacs for a long piece? From a list, e opens the selected note in $EDITOR and E the whole page. From the shell, thc edit <id>. The note ids ride along at the end of each line, so whatever you change maps back to the right notes when you save.