Configuration
Every setting lives in a text file you can edit, and most of them also appear in the Settings window.
Where settings live
orgstar keeps its settings in a configuration folder:
$XDG_CONFIG_HOME/orgstarwhenXDG_CONFIG_HOMEis set and not empty,- otherwise
~/.config/orgstar.
The environment variable ORGSTAR_CONFIG_DIR overrides both. If a file is missing from the configuration folder but exists in ~/Library/Application Support/Orgstar (where earlier versions kept it), orgstar reads it from there, and reloads it when you edit it there.
The folder holds these files:
| File | What it holds | Written by orgstar |
|---|---|---|
config.toml | Every setting of the Settings window, the theme, and publishing projects | Yes, when you change a setting |
keymap.toml | Your key bindings, on top of the preset | Only by Import from Emacs |
capture.toml | Capture templates | Only by Import from Emacs |
views.toml | Saved agenda views | No |
default-theme.toml | The default theme's colors, for reference | Yes, at every launch |
config.toml is the source of truth. The Settings window writes each change into it, keeping your comments and the order of lines, and edits you make to the file apply while orgstar runs. If the file doesn't exist at launch, orgstar creates it with every setting at its current value and a comment after each one.
When you add the folder to a dotfiles repository, keep default-theme.toml out of it or ignore its changes: orgstar rewrites it whenever its contents differ from the built-in theme.
Opening config.toml
- orgstar ▸ Edit Config File (
⌥⌘,) opensconfig.tomlas a buffer in the main window. The command palette has the same command as Edit Config File. - Settings ▸ General has three buttons for the file: Edit in orgstar, Open with Default App, and Show in Finder.
Saving the buffer applies the file, the same as saving it from another editor.
Problems in the files
If config.toml has a line orgstar can't use, the problem shows in the message line under the editor, with a count when there are more. Each problem names the file and the key:
config.toml: unknown setting editor.fooconfig.toml: org-log-done must be one of nil, time, noteconfig.toml: org-agenda-start-day must look like "-3d" or "+0d"config.toml: theme.light.background must be a color such as "#1f2328"
A file that isn't valid TOML is reported with its parse error, and none of it applies. keymap.toml, capture.toml and views.toml report their problems the same way when they are read.
The Settings window
Open it with orgstar ▸ Settings (⌘,). It has five panes. Each control writes the config.toml key named in the tables below; the config.toml reference below gives the type and the Emacs variable.
General
| Control | Choices | Default | Key |
|---|---|---|---|
| config.toml: Edit in orgstar | Opens the file in the main window | ||
| config.toml: Open with Default App | Opens the file in the app macOS uses for .toml | ||
| config.toml: Show in Finder | Selects the file in Finder | ||
| Emacs: Import from Emacs… | Opens the import sheet; see Import from Emacs below | ||
| Save files | Automatically, when typing stops; Only with File ▸ Save (⌘S) | Automatically | save |
| Keys | Emacs; Mac; Doom (Vim keys) | Emacs | keymap |
| Show hidden files and folders | On or off | On | show-hidden-files |
| Option as Meta | Left Option; Right Option; Both; Neither | Left Option | option-as-meta |
Automatic saving writes a file one second after you stop typing. The keymap presets and keymap.toml are covered in Keys and commands.
Editing
| Control | Choices or range | Default | Key |
|---|---|---|---|
| Tags | Aligned to end at column 77; One space after the title | Aligned (-77) | org-tags-column |
| M-RET adds the new heading after the subtree | On or off | On | org-insert-heading-respect-content |
| M-RET splits the line at the caret | On or off | Off | org-M-RET-may-split-line |
| Lists can use letters (a. b. c.) | On or off | On | org-list-allow-alphabetical |
| M-q fills to column N | 40 to 200 | 80 | fill-column |
| Long lines run off the edge instead of wrapping (org-startup-truncated) | On or off | Off | org-startup-truncated |
| Emacs hides emphasis markers (org-hide-emphasis-markers) | On or off | On | org-hide-emphasis-markers |
| Emacs shows entities as characters (org-pretty-entities) | On or off | On | org-pretty-entities |
| Default TODO keywords | Text in #+TODO syntax, one sequence per line | See below | org-todo-keywords |
| Entries can't be done before their TODO children (org-enforce-todo-dependencies) | On or off | Off | org-enforce-todo-dependencies |
| Entries can't be done with unchecked boxes (org-enforce-todo-checkbox-dependencies) | On or off | Off | org-enforce-todo-checkbox-dependencies |
The two "Emacs hides" and "Emacs shows" switches describe your Emacs, not orgstar's display. Tag alignment, table alignment and M-q measure text the way your Emacs displays it, so a file edited in both keeps the same layout. Set them to match your Emacs configuration. They also control whether orgstar hides markers and shows entities when markup is hidden.
The Tags picker offers two values. config.toml accepts any integer; with a value other than -77 or 0 the picker shows no selection.
The long-lines switch applies to files as they open; View ▸ Truncate or Wrap Long Lines switches the file in front.
Default TODO keywords apply to files without a #+TODO line. orgstar reads them at launch, so a change takes effect after you quit and reopen orgstar.
The two dependency switches are described under Dependencies in TODOs and tags.
Language
orgstar's menus, settings and agenda are in English and German, and follow the language chosen in System Settings ▸ General ▸ Language & Region on the Mac and Settings ▸ General ▸ Language & Region on iOS (or the app's own language there). What orgstar writes into your files, such as clock tables, is in the language Org would use: a clock table's :lang, else org-export-default-language. Exports use the file's #+LANGUAGE:; see Export.
Appearance
| Control | Range | Default | Key |
|---|---|---|---|
| Font | System monospaced, or any installed monospaced family | System monospaced | font |
| Size | 8 to 36 pt | 13 pt | font-size |
| Line spacing | 0 to 16 pt | 2 pt | line-spacing |
| Headings grow by N pt a level | 0 to 8 pt | 1 pt | heading-size-step |
| Colors: Edit in config.toml | Opens config.toml | ||
| Colors: Show Default Theme | Opens default-theme.toml |
See Themes and Fonts below.
Agenda
| Control | Range | Default | Key |
|---|---|---|---|
| Agenda shows N days | 1 to 366 | 10 | org-agenda-span |
| Agenda starts N days before today | 0 to 14 days before | 3 days | org-agenda-start-day |
| Include files in subfolders | On or off | Off | agenda-include-subfolders |
| Show days without entries | On or off | Off | org-agenda-show-all-dates |
| Habits only today | On or off | On | org-habit-show-habits-only-for-today |
| Blocked entries | Dimmed; Hidden; Shown as usual | Dimmed | org-agenda-dim-blocked-tasks |
| Show events from Calendar | On or off | Off | calendar-events |
| A checkbox for each calendar | On or off | All on | calendar-event-calendars |
| Show reminders from Reminders | On or off | Off | agenda-reminders |
| A checkbox for each list | On or off | All on | agenda-reminder-lists |
| Notify before timed agenda entries | On or off | On | reminders |
| N minutes before | 0 to 120 | 12 | appt-message-warning-time |
| Ask what to do with idle time while clocked in | On or off | Off | org-clock-idle-time |
| After N minutes without keyboard or mouse input | 1 to 240 | 15 when turned on | org-clock-idle-time |
| Remember N recently clocked entries | 1 to 35 | 5 | org-clock-history-length |
An entry's APPT_WARNTIME property overrides the lead time. The agenda is covered in The agenda.
The calendar checkboxes appear once Show events from Calendar is on and orgstar may read your calendars; turning the switch on asks for that access. While every calendar is checked, calendar-event-calendars is empty, so calendars you add later show too. The last checked calendar can't be unchecked; turn off Show events from Calendar instead. The Reminders list checkboxes work the same way. See The agenda.
Turning on the idle question sets org-clock-idle-time to 15 minutes; turning it off sets it to 0. The minutes stepper is disabled while the question is off. Idle time and the clock history are covered in Dates and clocking.
Capture
| Control | Default | Key |
|---|---|---|
| ⌃⌥Space opens Capture from any app | On | global-capture-hotkey |
The footer shows the path of capture.toml. Templates are covered in Capture.
Settings only in config.toml
These settings have no control in the Settings window. Some are in the View menu.
| Key | Also in |
|---|---|
org-log-done | |
org-log-reschedule | |
org-log-redeadline | |
org-log-into-drawer | |
org-startup-indented | |
org-hide-leading-stars | |
org-startup-align-all-tables | |
org-startup-with-inline-images | |
org-startup-with-latex-preview | |
org-display-remote-inline-images | |
org-cycle-hide-drawer-startup | |
org-cycle-hide-block-startup | |
org-use-speed-commands | |
spell-check | |
electric-pair-mode | |
display-line-numbers-type | View ▸ Show Line Numbers (⇧⌘L), View ▸ Line Numbers |
tab-bar | View ▸ Show Tab Bar |
show-markup | View ▸ Show Markup (⇧⌘M) |
ignored-folders | |
org-archive-location | |
org-export-default-language | |
org-use-tag-inheritance, org-tags-exclude-from-inheritance, org-tag-alist | |
org-track-ordered-property-with-tag | |
org-timer-format, org-timer-default-timer | |
org-roam-directory, org-roam-dailies-directory, org-roam-dailies-file, org-roam-dailies-head, org-roam-dailies-entry | |
org-attach-id-dir, org-attach-use-inheritance | |
org-yank-image-save-method, org-yank-dnd-method | |
org-crypt-tag-matcher | |
org-agenda-start-on-weekday | |
org-deadline-warning-days | |
org-agenda-skip-scheduled-if-done | |
org-agenda-skip-deadline-if-done | |
org-habit-show-habits-only-for-today | |
org-agenda-log-mode-items | |
org-clock-into-drawer | |
org-clock-rounding-minutes, org-clock-out-remove-zero-time-clocks, org-clock-in-switch-to-state, org-clock-out-when-done | |
org-agenda-todo-ignore-with-date, org-agenda-todo-ignore-scheduled, org-agenda-todo-ignore-deadlines, org-agenda-todo-ignore-timestamp, org-agenda-tags-todo-honor-ignore-options | |
org-agenda-search-view-always-boolean | |
org-agenda-search-view-force-full-words | |
[org-agenda-prefix-format] | |
[org-agenda-sorting-strategy], org-agenda-sort-notime-is-late, org-agenda-sort-noeffort-is-high | |
[org-agenda-time-grid], org-agenda-use-time-grid, org-agenda-show-current-time-in-grid | |
[org-stuck-projects] | |
org-agenda-files | |
org-icalendar-use-deadline, org-icalendar-use-scheduled, org-icalendar-include-todo, org-icalendar-combined-agenda-file | |
org-refile-targets, org-refile-use-outline-path, org-refile-allow-creating-parent-nodes | |
theme-file |
config.toml reference
Settings that mirror an Emacs variable sit at the top of the file under that variable's name. The agenda prefix formats are in [org-agenda-prefix-format], the sorting strategies in [org-agenda-sorting-strategy], the time grid in [org-agenda-time-grid], stuck projects in [org-stuck-projects], type and theme in [theme], and the settings Emacs has no variable for in [orgstar].
A key you remove from the file goes back to its default. A key that isn't in the table below is reported as unknown.
Top level
| Key | Type | Default | Effect |
|---|---|---|---|
fill-column | integer | 80 | The column M-q fills to. Mirrors fill-column. |
org-tags-column | integer | -77 | Negative: tags end at that column. 0: one space between title and tags. Mirrors org-tags-column. |
org-insert-heading-respect-content | boolean | true | M-RET adds the new heading after the current subtree. Mirrors org-insert-heading-respect-content. |
org-M-RET-may-split-line | boolean | false | M-RET in the middle of a line splits it at the caret. Mirrors the default entry of org-M-RET-may-split-line. |
org-list-allow-alphabetical | boolean | true | a., b), A. are list bullets. Mirrors org-list-allow-alphabetical. |
org-hide-emphasis-markers | boolean | true | Your Emacs hides *bold* and =code= markers; orgstar hides them when markup is hidden and measures text without them. Mirrors org-hide-emphasis-markers. |
org-pretty-entities | boolean | true | Your Emacs shows \alpha as α and lowers x_{1}; orgstar does the same when markup is hidden. Mirrors org-pretty-entities. |
org-todo-keywords | string | see below | Keywords for files without #+TODO, in #+TODO syntax; separate sequences with \n. Letters in parentheses turn on fast selection. Read at launch. Mirrors org-todo-keywords. |
org-log-done | string | "nil" | nil, time (a CLOSED timestamp) or note (CLOSED and a note). Mirrors org-log-done. |
org-log-reschedule | string | "nil" | nil, time or note: log changing or removing a SCHEDULED date. Mirrors org-log-reschedule. |
org-log-redeadline | string | "nil" | nil, time or note: log changing or removing a DEADLINE. Mirrors org-log-redeadline. |
org-log-into-drawer | string | "" | The drawer state notes go in. "LOGBOOK" is Emacs's t; "" puts them under the heading. Mirrors org-log-into-drawer. |
org-enforce-todo-dependencies | boolean | false | An entry can't become done while a descendant has an active TODO keyword, or under an ORDERED parent while an earlier sibling has one. Mirrors org-enforce-todo-dependencies. |
org-enforce-todo-checkbox-dependencies | boolean | false | An entry can't become done while its text has an unchecked checkbox. Mirrors org-enforce-todo-checkbox-dependencies. |
org-archive-location | string | "%s_archive::" | Where Archive Subtree moves an entry that has no ARCHIVE property and whose file has no #+ARCHIVE:, as file::heading; %s is the file's name. Mirrors org-archive-location. |
org-export-default-language | string | "en" | The language of exports without #+LANGUAGE: and of clock tables without :lang, such as "de". Mirrors org-export-default-language. |
org-use-tag-inheritance | string | "t" | Which tags inherit: "t" all, "nil" none, tag names separated by spaces, or a regular expression in braces such as "{^@}". Read at launch. Mirrors org-use-tag-inheritance. |
org-tags-exclude-from-inheritance | string | "" | Tags that never inherit, separated by spaces. Read at launch. Mirrors org-tags-exclude-from-inheritance. |
org-tag-alist | string | "" | The tags Set Tags offers in files without #+TAGS, in #+TAGS syntax with keys and groups, rows separated by \n. Mirrors org-tag-alist. |
org-track-ordered-property-with-tag | string | "nil" | A tag that Toggle ORDERED Property adds and removes with the property: "t" for the tag ORDERED, or a tag name. Mirrors org-track-ordered-property-with-tag. |
auto-fill-mode | boolean | false | Typing a space past fill-column breaks the line. View ▸ Turn Auto Fill On or Off changes it for one buffer. Mirrors auto-fill-mode in org-mode-hook. |
org-roam-directory | string | "" | The folder org-roam notes are in; empty for the first sidebar folder. Mirrors org-roam-directory. |
org-roam-dailies-directory | string | "daily/" | The folder daily notes are in, relative to org-roam-directory. Mirrors org-roam-dailies-directory. |
org-roam-dailies-file | string | "%<%Y-%m-%d>.org" | A daily note's file name; %<…> formats its date. |
org-roam-dailies-head | string | "#+title: %<%Y-%m-%d>\n" | What a new daily note starts with, under its ID. |
org-roam-dailies-entry | string | "* %?" | The capture template Capture to Daily Note files. See Links. |
org-timer-format | string | "%s " | What Insert Timer Value writes, with %s for the h:mm:ss value. Mirrors org-timer-format. |
org-timer-default-timer | string | "0" | The countdown Set Countdown Timer… offers, in minutes or h:mm:ss; "0" offers none. Mirrors org-timer-default-timer. |
org-attach-id-dir | string | "data/" | The folder ID-based attachment folders go in, relative to the org file's folder unless absolute. See Outlines. Mirrors org-attach-id-dir. |
org-attach-use-inheritance | string | "selective" | Whether attachment folders come from an ancestor's DIR or ID: selective, "t" or "nil". Mirrors org-attach-use-inheritance. |
org-yank-image-save-method | string | "attach" | Where a pasted image goes: attach for the entry's attachment folder, or a folder, relative to the org file's folder unless absolute. See Links. Mirrors org-yank-image-save-method. |
org-yank-dnd-method | string | "ask" | What dropping files on the editor does: ask, attach, open or file-link. See Links. Mirrors org-yank-dnd-method. |
org-crypt-tag-matcher | string | "crypt" | The tag Encrypt Tagged Entries… encrypts. A single tag. See Outlines. Mirrors org-crypt-tag-matcher. |
org-startup-indented | boolean | true | Indent bodies under their headings, as org-indent-mode. #+STARTUP: indent / noindent override it. Mirrors org-startup-indented. |
org-hide-leading-stars | boolean | false | Show only a heading's last star, without indentation. #+STARTUP: hidestars / showstars override it. Mirrors org-hide-leading-stars. |
org-startup-align-all-tables | boolean | false | Align every table when a file opens. #+STARTUP: align / noalign override it. Mirrors org-startup-align-all-tables. |
org-startup-truncated | boolean | false | Long lines run off the right edge instead of wrapping. Mirrors org-startup-truncated. |
spell-check | boolean | false | Check spelling while typing, outside code, links, dates, tags and keywords. |
electric-pair-mode | boolean | true | Type brackets, <> and quotes in pairs. Mirrors electric-pair-mode. |
org-startup-with-inline-images | boolean | false | Show image links as images when a file opens. #+STARTUP: inlineimages / noinlineimages override it. Mirrors org-startup-with-inline-images. |
org-display-remote-inline-images | string | "skip" | Images at http(s) links: skip, download (kept until orgstar quits) or cache (kept on disk). See Links. Mirrors org-display-remote-inline-images. |
org-startup-with-latex-preview | boolean | false | Show LaTeX fragments as typeset math when a file opens. #+STARTUP: latexpreview / nolatexpreview override it. Mirrors org-startup-with-latex-preview. |
org-use-speed-commands | boolean | false | Single keys at the start of a heading line run commands (n, p, t, c, …). Mirrors org-use-speed-commands. |
org-cycle-hide-drawer-startup | boolean | true | Fold drawers when a file opens. #+STARTUP: hidedrawers / nohidedrawers override it. Mirrors org-cycle-hide-drawer-startup. |
org-cycle-hide-block-startup | boolean | false | Fold blocks when a file opens. #+STARTUP: hideblocks / nohideblocks override it. Mirrors org-cycle-hide-block-startup. |
display-line-numbers-type | boolean or string | true | Line numbers in the editor's gutter: true, false, "relative" or "visual". See The editor. |
org-agenda-span | integer | 10 | Days the agenda shows. Mirrors org-agenda-span. |
org-agenda-start-day | string | "+0d" | The agenda's first day relative to today, as "-3d" or "+0d". Only day offsets are accepted. Mirrors org-agenda-start-day. |
org-agenda-start-on-weekday | string | "1" | The day weeks start on, "0" (Sunday) to "6" (Saturday), for the week view and spans of 7 or 14 days. "nil" starts them on the day the view starts from. Mirrors org-agenda-start-on-weekday. |
org-deadline-warning-days | integer | 14 | Days ahead the agenda and the deadline sparse tree warn about a deadline. A -Nd cookie in the timestamp overrides it. Mirrors org-deadline-warning-days. |
org-agenda-show-all-dates | boolean | false | Show days without entries in the agenda; today always shows. Emacs's default is t. Mirrors org-agenda-show-all-dates. |
org-agenda-skip-scheduled-if-done | boolean | false | Leave a done entry's scheduled date out of the agenda, even on its own day. Mirrors org-agenda-skip-scheduled-if-done. |
org-agenda-skip-deadline-if-done | boolean | false | Leave a done entry's deadline out of the agenda, even on its own day. Mirrors org-agenda-skip-deadline-if-done. |
org-habit-show-habits-only-for-today | boolean | true | Show habits only on today's agenda. Off, a habit also shows on the later days it is scheduled for. Mirrors org-habit-show-habits-only-for-today. |
org-agenda-log-mode-items | string | "closed clock" | What log mode shows, separated by spaces: closed, clock and state. Mirrors org-agenda-log-mode-items. |
org-agenda-todo-ignore-with-date | boolean | false | The TODO list leaves out entries with an active timestamp anywhere in their text. Mirrors org-agenda-todo-ignore-with-date. |
org-agenda-todo-ignore-scheduled | string | "nil" | The TODO list leaves out scheduled entries: "all" (or "t") all of them, "future" those scheduled after today, "past" today or before, "N" N or more days ahead, "-N" N or more days ago. Mirrors org-agenda-todo-ignore-scheduled. |
org-agenda-todo-ignore-deadlines | string | "nil" | As the last, for deadlines: "near" (or "t") those within their warning period, "far" those beyond it, "all", "future", "past", "N", "-N". Mirrors org-agenda-todo-ignore-deadlines. |
org-agenda-todo-ignore-timestamp | string | "nil" | As the last, for other active timestamps in the entry: "all" (or "t"), "future", "past", "N", "-N". Mirrors org-agenda-todo-ignore-timestamp. |
org-agenda-tags-todo-honor-ignore-options | boolean | false | The four settings above apply to TODO-only matches (M) too. Mirrors org-agenda-tags-todo-honor-ignore-options. |
org-agenda-search-view-always-boolean | boolean | false | The agenda's text search reads every string as +word -word {regexp} snippets, never as a phrase. Mirrors org-agenda-search-view-always-boolean. |
org-agenda-search-view-force-full-words | boolean | false | Text search snippets match whole words only, as a leading : does. Mirrors org-agenda-search-view-force-full-words. |
org-refile-targets | string | "" | Refile targets as Lisp, as org-refile-targets takes them: ((nil :maxlevel . 3) (org-agenda-files :tag . "project")). "" offers headings to level 3 in every file. See Outlines. Mirrors org-refile-targets. |
org-refile-use-outline-path | string | "file" | How refile targets are written: nil, t, file, full-file-path, buffer-name or title. Mirrors org-refile-use-outline-path. |
org-refile-allow-creating-parent-nodes | string | "nil" | t or confirm: a refile target typed as TARGET/New heading adds the heading; confirm asks first. Mirrors org-refile-allow-creating-parent-nodes. |
org-agenda-files | string | "" | Files and folders the agenda reads, separated by \n; a file that isn't .org lists more, one per line. "" reads the folders' files. See The agenda. Mirrors org-agenda-files. |
org-icalendar-use-deadline | string | "event-if-not-todo todo-due" | What a DEADLINE makes in iCalendar export: event-if-not-todo, event-if-todo, event-if-todo-not-done, todo-due. See Export. Mirrors org-icalendar-use-deadline. |
org-icalendar-use-scheduled | string | "todo-start" | As the last, for SCHEDULED, with todo-start. Mirrors org-icalendar-use-scheduled. |
org-icalendar-include-todo | string | "nil" | Tasks as VTODO: nil, t (not done), all, unblocked, or TODO keywords separated by spaces. Mirrors org-icalendar-include-todo. |
org-icalendar-combined-agenda-file | string | "~/org.ics" | Where Combine Agenda Files into iCalendar writes. Mirrors org-icalendar-combined-agenda-file. |
org-agenda-use-time-grid | boolean | true | Grid lines at the times in [org-agenda-time-grid], on the days it names. Mirrors org-agenda-use-time-grid. |
org-agenda-show-current-time-in-grid | boolean | true | The now line on today's grid. Mirrors org-agenda-show-current-time-in-grid. |
org-agenda-sort-notime-is-late | boolean | true | Lines without a time sort after timed ones for time-up, and lines without a date after dated ones for the date keys. Mirrors org-agenda-sort-notime-is-late. |
org-agenda-sort-noeffort-is-high | boolean | true | Entries without an Effort sort as the longest for effort-up. Mirrors org-agenda-sort-noeffort-is-high. |
org-agenda-dim-blocked-tasks | string | "t" | t dims entries the two enforce settings block, invisible hides them (entries blocked only by checkboxes are still dimmed), nil shows them as usual. Mirrors org-agenda-dim-blocked-tasks. |
appt-message-warning-time | integer | 12 | Minutes of warning before timed entries. An entry's APPT_WARNTIME property overrides it. Mirrors appt-message-warning-time. |
org-clock-idle-time | integer | 0 | Minutes without keyboard or mouse input, with a clock running, before orgstar asks what to do with the idle time. 0 never asks (Emacs's nil). Mac only. Mirrors org-clock-idle-time. |
org-clock-into-drawer | string | "t" | Where clock lines go: "t" the log drawer (LOGBOOK), "nil" no drawer, "N" a drawer once there are N clock lines, or a drawer's name. An entry's CLOCK_INTO_DRAWER property overrides it. Mirrors org-clock-into-drawer. |
org-clock-rounding-minutes | integer | 0 | Clocks start and end on multiples of this many minutes; 0 doesn't round. Mirrors org-clock-rounding-minutes. |
org-clock-out-remove-zero-time-clocks | boolean | false | Clocking out removes a clock line of 0:00. Mirrors org-clock-out-remove-zero-time-clocks. |
org-clock-in-switch-to-state | string | "" | The keyword an entry takes when you clock in; "" leaves it. Mirrors org-clock-in-switch-to-state. |
org-clock-out-when-done | string | "t" | "t": marking the clocked entry done clocks out; "nil": it doesn't; or the keywords that clock out, separated by spaces. Mirrors org-clock-out-when-done. |
org-clock-history-length | integer | 5 | How many recently clocked entries orgstar remembers. Mirrors org-clock-history-length. |
The default org-todo-keywords is the first sequence of Doom Emacs's default:
org-todo-keywords = "TODO(t) PROJ(p) LOOP(r) STRT(s) WAIT(w) HOLD(h) IDEA(i) | DONE(d) KILL(k)"
The startup settings (org-startup-*, org-hide-leading-stars, org-cycle-hide-*-startup) apply when a file opens. Files already open keep their state until you open them again.
[org-agenda-prefix-format]
| Key | Type | Default | Effect |
|---|---|---|---|
agenda | string | " %i %-12:c%?-12t% s" | Prefix of lines in the day view |
todo | string | " %i %-12:c" | Prefix of lines in the TODO list |
tags | string | " %i %-12:c" | Prefix of tag and property matches |
These mirror the entries of org-agenda-prefix-format. Rows show the category, time and leader in their own places; the rest of the format, such as %e or %b, shows after the category. A time written in heading text leaves the title when the agenda format contains %t. A view in views.toml can set its own with prefix-format. See The agenda.
[org-agenda-sorting-strategy]
| Key | Type | Default | Effect |
|---|---|---|---|
agenda | string | "habit-down time-up urgency-down category-keep" | Order of lines within a day |
todo | string | "urgency-down category-keep" | Order of the TODO list |
tags | string | "urgency-down category-keep" | Order of tag and property matches |
search | string | "category-keep" | Order of text search results |
These mirror the entries of org-agenda-sorting-strategy, keys separated by spaces. Unknown keys are ignored. A view in views.toml can set its own with sorting-strategy. The keys are listed in The agenda.
[org-stuck-projects]
| Key | Type | Default | Effect |
|---|---|---|---|
match | string | "+LEVEL=2/-DONE" | The entries that are projects |
todo | string | "TODO NEXT NEXTACTION" | Keywords, separated by spaces, that make a project active; * for any open one |
tags | string | "" | Tags, separated by spaces, that make a project active; * for any |
regexp | string | "" | An Emacs regular expression that makes a project active |
These mirror the four elements of org-stuck-projects. See The agenda.
[org-agenda-time-grid]
| Key | Type | Default | Effect |
|---|---|---|---|
when | string | "daily today require-timed" | Which days get a grid, separated by spaces |
times | string | "800 1000 1200 1400 1600 1800 2000" | The grid's times as HHMM |
These mirror the first two elements of org-agenda-time-grid. when takes daily (views of one day), today, weekly (every day), require-timed (only days with a timed entry) and remove-match (no line at a time an entry has). orgstar draws the lines itself, so Emacs's third and fourth elements, the strings for the lines, have no equivalent.
[org-structure-template-alist]
Block templates for Insert Structure Template (C-c C-,) and < completion, each a key and the block type it inserts. They go over Org's default org-structure-template-alist: a key Org has (s, q, …) gets the new type, and other keys are added after Org's.
[org-structure-template-alist]
el = "src emacs-lisp"
py = "src python"
Keys are letters, digits, _ and -. Without the table, Org's templates apply. Emacs import adds entries here and so does nothing else in the app; remove one by deleting its line.
publish
Publishing projects, one table each, as org-publish-project-alist has them. They're read when you publish; see Publishing for the keys. The Settings window leaves them as they are.
[theme]
| Key | Type | Default | Effect |
|---|---|---|---|
font | string | "" | A font family. "" uses the system's monospaced font. |
font-size | integer | 13 | Points. |
line-spacing | integer | 2 | Points between lines. |
heading-size-step | integer | 1 | Points a heading is larger than the level below. Level 4 and deeper are body size. |
theme-file | string | "" | A theme in its own file in the configuration folder, applied under the colors in config.toml. |
Any other key in [theme] is a color; see Themes below.
[orgstar]
| Key | Type | Default | Effect |
|---|---|---|---|
save | string | "automatic" | automatic (one second after typing stops) or explicit (only with ⌘S). |
keymap | string | "emacs" | emacs, mac or doom. Your own bindings go in keymap.toml. |
option-as-meta | string | "left" | Which Option key is Meta: left, right, both or none. |
tab-bar | boolean | false | A tab for each open buffer above the editor. |
show-markup | boolean | false | Show link brackets and emphasis markers. |
show-hidden-files | boolean | true | List dotfiles and dot folders in your folders. |
ignored-folders | string | see below | Folder names never listed or searched, separated by spaces. |
agenda-include-subfolders | boolean | false | The agenda reads org files in subfolders too. |
reminders | boolean | true | Notify before timed entries. |
calendar-events | boolean | false | Show events from Calendar in the agenda. |
calendar-event-calendars | string | "" | The calendars whose events show, by title or identifier, separated by commas; "" for all. |
agenda-reminders | boolean | false | Show incomplete reminders with a due date from Reminders in the agenda, read-only. |
agenda-reminder-lists | string | "" | The Reminders lists shown, by title or identifier, separated by commas; "" for all. |
global-capture-hotkey | boolean | true | ⌃⌥Space opens Capture from any app. |
The default ignored-folders is:
ignored-folders = ".Spotlight-V100 .Trash .build .bzr .cache .fseventsd .git .gradle .hg .jj .mypy_cache .next .pytest_cache .stfolder .stversions .svn .terraform .tox .venv node_modules"
An example
fill-column = 72
org-tags-column = 0
org-todo-keywords = "TODO(t) NEXT(n) WAIT(w@/!) | DONE(d!) CANCELED(c@)"
org-log-done = "time"
org-log-into-drawer = "LOGBOOK"
org-startup-truncated = true
org-agenda-span = 7
org-agenda-start-day = "+0d"
[theme]
font = "JetBrains Mono"
font-size = 14
link = "#0a7ea4"
[theme.todo]
WAIT = "#bf8700"
[orgstar]
keymap = "doom"
save = "explicit"
Names from earlier versions
Earlier versions used keys such as editor.fill-column and agenda.span. orgstar still reads them. At launch, each such key in the file is renamed in place to its current name and moved to its current section; the rest of the file, and the comments on those lines, stay as they are. When a setting is in the file under both names, the current name wins and the old line is removed. A section the move leaves empty is removed. A file that lacks a whole section (such as [theme]) gets that section added at the end.
keymap.toml and capture.toml
keymap.toml holds [[bind]] tables with keys, command, and optionally mode and when. They layer over the preset chosen in Keys. orgstar reloads the file when it changes. See Keys and commands.
[[bind]]
keys = "C-c a"
command = "app.agenda"
capture.toml holds [[template]] tables. Without the file, orgstar uses two templates: t (Personal todo, under Inbox in todo.org) and n (Personal notes, under Inbox in notes.org). See Capture.
views.toml holds [[view]] tables for the agenda; see The agenda.
In-file settings
Keyword lines in a file set options for that file, as in Emacs. orgstar reads them outside blocks; for #+STARTUP only keyword lines count, so a #+STARTUP line inside a paragraph or a block changes nothing: not folding, logging or inline images.
Keywords orgstar reads
| Keyword | Effect |
|---|---|
#+TODO, #+SEQ_TODO | A TODO sequence: active keywords, a bar, then done keywords. Without the bar, the last word is the done state. NAME(k) gives a fast-selection key, NAME(k!/@) logging on entering and leaving. Any TODO line replaces the default keywords. |
#+TYP_TODO | A type sequence. As in Org, type sequences come first, then #+TODO, then #+SEQ_TODO. |
#+PRIORITIES | Three values: highest, lowest, default, as A C B or 1 5 3. The default is A C B. |
#+STARTUP | Startup options; see below. |
#+TAGS | Tags for fast tag selection with C-c C-q, with keys as work(w), groups in { } and tag groups in [ ]. Without #+TAGS, C-c C-q offers the tags used in the file. |
#+FILETAGS | Tags every heading in the file inherits, as :work:project:. |
#+PROPERTY | A file-wide property, as #+PROPERTY: header-args :results output. NAME+ appends to the value. |
#+CATEGORY | The file's category in the agenda. Without it the category is the file name. |
#+ARCHIVE | Where C-c C-x C-a archives to. The default is %s_archive::. |
#+COLUMNS | The default column view format. |
#+LINK | A link abbreviation, as #+LINK: gh https://github.com/%s. |
#+CONSTANTS | Constants for table formulas, as #+CONSTANTS: c=299792458 pi=3.14. |
#+SETUPFILE | A file whose keyword lines count as this file's; see below. |
#+TITLE, #+AUTHOR, #+DESCRIPTION | Used by export, Quick Look and Spotlight. |
#+OPTIONS, #+MACRO, #+INCLUDE, #+EXCLUDE_TAGS, #+SELECT_TAGS | Export settings; see Export. |
#+TODO: TODO(t) NEXT(n) WAIT(w@/!) | DONE(d!) CANCELED(c@)
#+PRIORITIES: A E C
#+STARTUP: content logdrawer
#+FILETAGS: :work:
#+CATEGORY: acme
After you change a keyword line, press C-c C-c on it to read the file's settings again, as org-mode-restart does in Emacs. Changes to #+TODO, #+SEQ_TODO, #+TYP_TODO and #+PRIORITIES apply as you type.
#+STARTUP options
| Option | Effect |
|---|---|
overview, fold | Only top-level headings show when the file opens. |
content | All headings show, no bodies. |
showall, nofold | Everything shows. |
show2levels … show5levels (any showNlevels) | Headings down to level N show. |
showeverything | Everything shows, including drawers and blocks; VISIBILITY properties are ignored. |
hidedrawers, nohidedrawers | Fold or don't fold drawers at startup. |
hideblocks, nohideblocks | Fold or don't fold blocks at startup. |
indent, noindent | Virtual indentation on or off. |
hidestars, showstars | Hide leading stars or show them. |
align, noalign | Align every table when the file opens, or don't. |
inlineimages, noinlineimages | Show image links as images, or don't. |
latexpreview, nolatexpreview | Show LaTeX fragments as typeset math, or don't. |
shrink | Shrink table columns that have a width cookie. |
logdone, lognotedone, nologdone | Record a time, a note, or nothing when an entry becomes done. |
logrepeat, lognoterepeat, nologrepeat | The same, when a repeating entry is completed. |
logreschedule, lognotereschedule, nologreschedule | The same, when a scheduled date changes. |
logredeadline, lognoteredeadline, nologredeadline | The same, when a deadline changes. |
logdrawer, nologdrawer | Notes go in LOGBOOK, or under the heading. |
After the startup visibility, orgstar applies each heading's VISIBILITY property and folds subtrees tagged ARCHIVE, unless showeverything is set.
Completion offers every option of org-startup-options. Options not in the table above, such as odd, entitiespretty, constSI and the footnote options, are accepted and ignored.
Setup files
#+SETUPFILE: path reads the keyword lines of another file and treats them as if they were in this file, before its own lines. This follows org--collect-keywords-1 in Org:
- A relative path is relative to the folder of the file that names it.
~expands to your home folder. Quotes around the path are removed. - A setup file can name further setup files; each is read once, and a file never reads itself.
- URLs (anything starting with
scheme://) aren't fetched. - A setup file that can't be read, or isn't UTF-8, is skipped without a message.
Keywords from setup files count for TODO keywords, priorities, #+STARTUP, #+TAGS, #+FILETAGS, #+PROPERTY, #+CATEGORY, #+ARCHIVE, #+COLUMNS, #+LINK, #+CONSTANTS and export. orgstar reads setup files when a file opens, when you press C-c C-c on a keyword line, and when the file changes on disk. If you edit only the setup file, press C-c C-c on a keyword line of each open file that uses it.
Import from Emacs
Import from Emacs reads your Emacs or Doom Emacs configuration and offers to carry its org settings, folders, capture templates, key bindings and agenda views over. Nothing changes until you choose Import.
Running it
- Open Settings ▸ General and click Import from Emacs…, or run Import from Emacs… from the command palette (
⇧⌘P). - orgstar looks for a configuration in these places, in order, and reads the first it finds:
$DOOMDIR,~/.config/doom,~/.doom.d,~/.config/emacs,~/.emacs.d,~/.emacs. A folder counts when it holdsinit.el,config.el,config.orgorcustom.el. Doom's own installation folder (one withlisp/doom.el) is skipped. - To read another configuration, click Choose… and pick a file or a folder. For a folder, orgstar reads
init.el,config.el(orconfig.orgwhen there is noconfig.el) andcustom.elin it. - The sheet lists what it found under Settings, Folders, Capture templates, Key bindings, Structure templates and Agenda views, each with the line it came from (
config.el:27, orDoom default). Everything is selected; clear what you don't want. - Click Import. The sheet then summarizes what was imported and any problems.
What Import does with each kind of item:
- Settings are written to
config.toml. - Folders are added to the sidebar if they exist and aren't there already.
- Capture templates are appended to
capture.toml, except those whose key is already in the file. - Key bindings are appended to
keymap.toml, except those already in the file with the same keys, command and state. Running the import again adds no duplicates. - Agenda views are appended to
views.toml, except those whose name is already in the file.
The Not imported section lists what orgstar read but can't use, with the reason: settings it has no equivalent for, values it can't work out without running Emacs, bindings to code rather than a command, and files it couldn't read. The footer counts variables that aren't about org, which are left alone.
A literate configuration (config.org) is read as org-babel-load-file and Doom tangle it: its emacs-lisp and elisp blocks, except blocks whose :tangle is no (set on the block, in a #+HEADER: line, in a header-args property or in #+PROPERTY:) and blocks under a COMMENT or :ARCHIVE: heading. Items show the line of config.org they came from. When the folder also has a config.el, it is read instead, as the file config.org tangles to.
On iOS, Settings ▸ Import from Emacs reads a configuration folder you choose; see iOS.
Doom Emacs
A configuration counts as Doom when it contains (doom!, (map! = or =(after! =. orgstar then also reads Doom's own org defaults, from the Doom installation in =$EMACSDIR, ~/.config/emacs or ~/.emacs.d: modules/lang/org/config.el and lisp/doom-emacs.el. Your configuration overrides them. Doom defaults orgstar has no use for are counted in the footer rather than listed.
A Doom configuration, or any configuration that enables evil, adds keymap = "doom".
What it reads
orgstar reads the configuration as Lisp data; it never runs it. It looks at these forms:
| Form | What orgstar takes |
|---|---|
setq, setq-default, setq!, setopt, csetq | Each variable and value |
defvar, defcustom | The value, below every other assignment |
custom-set-variables | Each quoted (variable value) |
after!, with-eval-after-load, eval-after-load | The forms inside, ranked above plain assignments |
add-to-list on org-structure-template-alist | The entry added |
use-package, use-package! | Forms in :config and :init, and pairs in :custom |
progn, when, unless, if, let, let*, with-no-warnings | The forms inside. Conditions aren't evaluated, so every branch is read. |
map! (Doom) | Bindings, with :leader (SPC), :localleader (SPC m), :prefix, and state keywords such as :n, :i, :v, :nv |
define-key, keymap-set, global-set-key, keymap-global-set | Bindings |
evil-define-key, evil-define-key* | Bindings in the normal, insert or visual state |
When a variable is set more than once, the last assignment wins, with assignments inside after! and similar forms winning over plain ones, and those over Doom's defaults.
orgstar works out a value when it is a literal, a quoted or backquoted form (with , and ,@), a variable set earlier in the configuration, or a call to list, concat, expand-file-name, file-name-concat or file-name-as-directory on such values. Anything else, such as a function call or a value computed from the environment, is listed under Not imported as worked out when Emacs runs.
Only variables whose names start with org-, appt-, display-line-numbers, fill-column, evil-, doom-font, doom-variable-pitch-font, doom-theme or calendar-week-start-day are considered.
How variables map
| Emacs variable | Becomes |
|---|---|
fill-column, org-tags-column, appt-message-warning-time, org-deadline-warning-days | The same key, when the value is a number |
org-insert-heading-respect-content, org-list-allow-alphabetical, org-hide-emphasis-markers, org-pretty-entities, org-cycle-hide-drawer-startup, org-cycle-hide-block-startup, org-use-speed-commands, org-startup-with-inline-images, org-startup-with-latex-preview, org-startup-indented, org-hide-leading-stars, org-startup-align-all-tables, org-startup-truncated | The same key: nil or an empty list is false, anything else true |
org-hide-drawer-startup, org-hide-block-startup | org-cycle-hide-drawer-startup, org-cycle-hide-block-startup |
org-M-RET-may-split-line | org-M-RET-may-split-line, from the default entry of an alist; other per-context entries aren't supported |
org-agenda-prefix-format | [org-agenda-prefix-format]: a string sets all three views; an alist sets agenda, todo and tags |
org-agenda-sorting-strategy | [org-agenda-sorting-strategy]: a list sets all four views; an alist sets agenda, todo, tags and search. A list with user-defined-up or user-defined-down isn't imported |
org-agenda-sort-notime-is-late, org-agenda-sort-noeffort-is-high, org-agenda-use-time-grid, org-agenda-show-current-time-in-grid | The same key, as booleans |
org-agenda-custom-commands | A views.toml view per command, named by its description, and per block a [[view.block]]. Types agenda, alltodo, todo, tags, tags-todo, search and stuck; settings org-agenda-span, org-agenda-start-day, org-agenda-overriding-header, org-agenda-sorting-strategy, org-agenda-prefix-format (a string) and org-agenda-skip-function as org-agenda-skip-entry-if or org-agenda-skip-subtree-if. Entries from (add-to-list 'org-agenda-custom-commands …) too. Other types, other settings and file lists aren't imported |
org-refile-targets | org-refile-targets, the value written as Lisp, when its files and specs are ones orgstar reads (not functions or variables) |
org-refile-use-outline-path, org-refile-allow-creating-parent-nodes | The symbol as a string |
org-stuck-projects | [org-stuck-projects]: match, todo, tags and regexp from the four elements |
org-agenda-time-grid | [org-agenda-time-grid]: when from the first element, times from the second; the strings are left out |
org-icalendar-use-deadline, org-icalendar-use-scheduled | The list's symbols, separated by spaces |
org-icalendar-include-todo | nil, t, all or unblocked, or a list of keywords separated by spaces |
org-icalendar-combined-agenda-file | The file name, from a string or a simple form |
org-display-remote-inline-images | The symbol as a string, when it's skip, download or cache |
org-publish-project-alist | A [[publish]] table in config.toml per project whose publishing functions are org-html-publish-to-html, org-md-publish-to-md or org-publish-attachment: the directories, :base-extension, :recursive, :exclude, :include, :body-only, the sitemap properties and :components. Other properties are reported as left out |
org-log-done, org-log-reschedule, org-log-redeadline | The same key: nil, time (also t) or note |
org-log-into-drawer | A string as given; t becomes "LOGBOOK"; nil becomes "" |
display-line-numbers-type | true unless nil; relative and visual as they are |
auto-fill-mode | true for (add-hook 'org-mode-hook #'auto-fill-mode) or turn-on-auto-fill, or in text-mode-hook |
org-agenda-span | A number, or day (1), week (7), fortnight (14), month (30), year (365) |
org-clock-idle-time | Minutes; nil becomes 0 (never) |
org-clock-history-length | The same key, when the value is a positive number |
org-clock-into-drawer | A drawer name as given, a number as a string, t or nil |
org-clock-rounding-minutes, org-clock-out-remove-zero-time-clocks | The same key |
org-clock-in-switch-to-state | A keyword string; a function isn't supported |
org-use-tag-inheritance | t, nil, a list of tags as names separated by spaces, or a regular expression in braces |
org-tags-exclude-from-inheritance | The list's tags separated by spaces |
org-tag-alist | #+TAGS syntax: ("work" . ?w) is work(w); :startgroup, :endgroup, :startgrouptag, :grouptags, :endgrouptag and :newline become {, }, [, :, ] and a new row |
org-clock-out-when-done | t, nil, or a list of keywords as a string separated by spaces |
org-agenda-start-day | A day offset such as "-3d"; nil becomes "+0d". Other forms aren't supported. |
org-agenda-start-on-weekday | "0" to "6", or "nil" |
org-agenda-log-mode-items | The symbols closed, clock and state of the list, separated by spaces |
org-agenda-todo-ignore-scheduled, -deadlines, -timestamp | The symbol or number as a string; org-agenda-todo-ignore-with-date and org-agenda-tags-todo-honor-ignore-options as booleans |
org-track-ordered-property-with-tag | A tag name as given; t becomes "t", nil "nil" |
org-roam-directory, org-roam-dailies-directory | The same keys, when the value is a string or a form that makes one |
org-roam-dailies-capture-templates | org-roam-dailies-file, -head and -entry, from the first template's (file+head NAME HEAD) target and template |
org-timer-format, org-timer-default-timer | The same keys; a number becomes a string |
org-attach-id-dir | The same key, when the value is a string or an expand-file-name form |
org-attach-use-inheritance | selective, or t / nil as "t" / "nil" |
org-yank-image-save-method | attach, or a folder name |
org-yank-dnd-method | ask, attach, open or file-link |
org-crypt-tag-matcher | The same key, when the value is a single tag |
org-archive-location | The same key, when the value is a file::heading string |
org-structure-template-alist | [org-structure-template-alist]: each ("key" . "type") entry that isn't one of Org's, from setq or (add-to-list 'org-structure-template-alist …) |
org-todo-keywords | org-todo-keywords, one line per sequence. Keywords with spaces are left out; type sequences are read as sequences. |
org-directory | A folder to add |
org-agenda-files | org-agenda-files, the entries separated by \n; the string form becomes one entry naming the list file. Also a folder to add for each entry; for a .org file, its folder; none for a list file |
org-capture-templates | Templates for capture.toml; see below |
doom-font | font and font-size, from (font-spec :family … :size …) or "Family-14" |
doom-variable-pitch-font | Not imported: orgstar uses one font |
doom-theme | Not imported: set colors under [theme] |
evil-mode in use, or Doom | keymap = "doom" |
Any other org- or appt- variable is listed as having no equivalent.
Capture templates are imported when their type is entry, item, checkitem, plain or table-line, their template is a string, and their target is file, file+headline, file+olp, file+olp+datetree, file+datetree, file+weektree, id or clock. The properties :prepend, :immediate-finish, :jump-to-captured, :clock-in, :clock-keep, :clock-resume, :empty-lines, :empty-lines-before, :empty-lines-after, :tree-type (day, week, month) and :table-line-pos carry over; others are listed as left out. Template groups (a key and a name only) are skipped.
Key bindings are imported when the command is one orgstar has a counterpart for, such as org-todo, org-schedule, org-refile, org-capture or save-buffer. The clock commands org-clock-in, org-clock-out, org-clock-cancel, org-clock-goto, org-clock-in-last, org-resolve-clocks and org-clock-mark-default-task map to Clock In, Clock Out, Cancel Clock, Go to Clocked Entry, Clock In to Last Entry, Resolve Open Clocks… and Mark as Default Clock Task. Keys must be a string or (kbd "…"); bindings with key vectors such as [f5] are skipped. In a Doom configuration, bindings without a state go to the normal state.
Limits of the Lisp reader
- Comments (
;) are skipped. Strings understand\n,\t,\"and line continuations; other escapes give the character itself. #'reads asfunction. Other#syntax is read as a symbol, so forms using it aren't understood.- A syntax error anywhere in a file, such as an unclosed parenthesis, stops that file from being read at all. The error and its line show under Not imported.
- Macros other than those in the table above are not expanded, and functions are not called. Settings made by code you wrote (a
defunthat callssetq, a hook) aren't found.
Themes
orgstar has one built-in theme, the default theme, with light and dark colors after GitHub's light and dark themes for text and code. TODO keywords, priorities and the agenda's statuses use the system's red, orange, blue and green, as iOS and macOS show them. You change it by setting colors in config.toml, or by keeping a theme in its own file.
Colors are strings in the form "#rrggbb" or "#rrggbbaa". They go in these tables:
| Table | Effect |
|---|---|
[theme] | Sets a color for both light and dark appearance |
[theme.light] | Sets a color for light appearance only |
[theme.dark] | Sets a color for dark appearance only |
[theme.todo] | Colors TODO keywords by name, in both appearances, as org-todo-keyword-faces |
[theme.category] | Colors agenda categories by name, in both appearances |
[theme]
heading-1 = "#005cc5"
[theme.dark]
background = "#1e1e1e"
foreground = "#d4d4d4"
[theme.todo]
WAIT = "#bf8700"
PROJ = "#8250df"
[theme.category]
work = "#0a66d8"
A keyword without its own color takes its class's color. Case doesn't matter in these lists:
| Class | Key | Keywords |
|---|---|---|
| Under way | todo-next | NEXT, STRT, START, STARTED, DOING, ACTIVE, INPROGRESS, IN-PROGRESS |
| On hold | todo-waiting | WAIT, WAITING, HOLD, ONHOLD, BLOCKED, DEFERRED, SOMEDAY, MAYBE |
| Cancelled | todo-cancelled | Done keywords KILL, KILLED, CANCELLED, CANCELED, CANCEL, SKIPPED, SKIP, ABORTED, NO, WONTFIX |
| Other open | todo | Any other keyword that isn't done |
| Other done | done | Any other done keyword |
The classes color keywords in the editors, the iOS reader, the agenda and its widgets.
A category without its own color gets a hue worked out from its name, the same on every run and device, at a lightness that reads on the appearance's background.
default-theme.toml in the configuration folder lists every color key with the default theme's values, light and dark. Settings ▸ Appearance ▸ Show Default Theme opens it. Copy lines from it into config.toml; edits to default-theme.toml itself are overwritten at the next launch.
Theme files
To keep a theme in its own file, put it in the configuration folder with the same tables ([theme], [theme.light], [theme.dark], [theme.todo], [theme.category]) and name it in config.toml:
[theme]
theme-file = "solarized.toml"
The colors stack in this order, each over the one before: the default theme, the theme file, then the colors in config.toml. The path is relative to the configuration folder and may name a subfolder, as themes/solarized.toml. orgstar reloads the theme file when it changes. Only colors are read from a theme file; font and the other type keys in its [theme] table are ignored.
Color keys
| Key | Colors |
|---|---|
background | the editor's background |
foreground | body text |
cursor | the caret |
selection | selected text's background |
heading-1 … heading-7 | headings of that level |
heading-8 | level 8 and deeper headings |
todo | TODO keywords not yet done |
todo-next | keywords of work under way: NEXT, STRT and the others above |
todo-waiting | keywords of work on hold: WAIT, HOLD and the others above |
done | DONE keywords |
todo-cancelled | done keywords that cancel: KILL, CANCELLED and the others above |
priority | [#A] cookies; in the agenda, priorities other than A, B and C |
priority-a | agenda: priority A |
priority-b | agenda: priority B |
priority-c | agenda: priority C |
tags | :tags: |
link | links |
timestamp | timestamps |
code | ~code~ and inline source |
verbatim | =verbatim= |
inline-background | behind ~code~ and =verbatim= |
markup | link brackets and emphasis markers |
comment | comments |
keyword | #+KEYWORD lines |
metadata | planning lines, drawers, properties and clocks |
special | footnotes, statistics cookies, targets, macros and LaTeX |
block-background | the band behind blocks |
block-delimiter | #+begin_ and #+end_ lines |
table | tables |
line-number | line numbers |
line-number-current | the caret's line number |
syntax-keyword | code: keywords |
syntax-string | code: strings |
syntax-comment | code: comments |
syntax-function | code: functions |
syntax-type | code: types and modules |
syntax-number | code: numbers, constants and escapes |
syntax-property | code: properties, attributes and tags |
syntax-label | code: labels |
sidebar-background | the folder sidebar and the outline |
sidebar-foreground | file and heading names there |
sidebar-header | folder names there |
modeline-background | the modeline and message line |
modeline-foreground | modeline text |
modeline-highlight | the outline path and the clock in the modeline |
state-normal | the NORMAL tag (Doom keys) |
state-insert | the INSERT tag |
state-visual | the VISUAL and V-LINE tags |
agenda-background | the agenda and board; the iOS widgets |
agenda-date | agenda day headers after today |
agenda-today | today's header and the now line |
agenda-time | times and statuses of agenda rows with the normal status |
agenda-category | categories |
agenda-overdue | agenda: the status of entries past their deadline or scheduled date, and the Overdue group |
agenda-due-soon | agenda: the status of deadlines due today or coming up |
agenda-event | agenda: calendar events whose calendar has no color |
habit-clear | habit graph: not due yet |
habit-ready | habit graph: due |
habit-alert | habit graph: due today, last chance |
habit-overdue | habit graph: overdue |
The default theme leaves sidebar-background, sidebar-foreground, sidebar-header, modeline-background, modeline-foreground and agenda-background unset, so those parts keep the standard macOS look. Set them to color those parts too. In the views around the editor (sidebar, modeline, agenda), a color you set for one appearance only leaves the other appearance to the system. In the editor, a color set for one appearance only takes the default theme's color in the other.
An unknown color key, a value that isn't a color, or an unknown table such as [theme.solarized] is reported as a problem and skipped.
Appearance
orgstar follows the system's light or dark appearance (System Settings ▸ Appearance). There is no setting to fix one appearance; to use the same colors in both, set them under [theme] rather than [theme.light] or [theme.dark].
Fonts
The editor uses one font for everything: body text, headings, code and tables. Choose it in Settings ▸ Appearance or with font under [theme].
- The Font menu lists installed monospaced families.
config.tomlaccepts any family name; a family that isn't installed falls back to the system's monospaced font. Tags and tables line up in columns, so a proportional font misaligns them. font-sizeis the body size, at least 6 points.- Headings are bold. Level 1 is
font-sizeplus three timesheading-size-step, level 2 plus two times, level 3 plus one time; level 4 and deeper are body size. Setheading-size-step = 0for one size throughout. line-spacingadds space between lines, in points.
On iPhone and iPad, the editor and reader use the same theme, read from the synced configuration folder. font applies when the family is installed on the device, otherwise the system's monospaced font is used, and font-size is the size at the default Dynamic Type setting, scaled with the size chosen on the device. The selection color, the cursor color and the syntax-* colors apply there too. See iPhone and iPad.