org-lsp

Configuring org-lsp

Everything that can be set, in one place: the server's options, which are the same in every editor, and each editor's own settings. The page of each editor (Neovim, Vim, VS Code, Sublime Text, Zed, Helix) shows a short example in its own syntax and points here for the rest.

Nothing has to be set. Without configuration the agenda is built from the Org files of the workspace (or the ones that are open), and every option is Org's default.

The server's options#

The server's options are Org's variables: TODO keywords, agenda files, capture templates, logging and the rest. They come from three places, each over the one before:

  1. Org's defaults;
  2. the shared configuration file, which the server reads itself;
  3. the options the editor passes when it starts the server (Neovim's settings, VS Code's org-lsp.settings, Helix's config …).

So the options can be set once, in the shared file, for every editor, and an editor can still change any of them for itself. A file's own #+TODO: and #+PRIORITIES: lines apply to that file, over all three.

Names#

An option is named after the Org variable it stands for, with _ for -: org-agenda-files is org_agenda_files, org-log-done is org_log_done. Org's own spelling, org-agenda-files, works as well (TOML and JSON allow it; in Lua it needs ['org-agenda-files']). The values are Org's, written as JSON: 'time is "time", nil is false, a list is a list.

Options the server has and Org does not have plain names without org_ (auto_save, config_file, emacs_config). The keys inside an option are the keywords Org uses there, as a refile target's maxlevel and a capture template's empty_lines (:empty-lines).

The names options had before (agendaFiles, agenda.span …) still work; the server says which to use instead.

The shared configuration file#

The server reads the first of these that is named, or there:

  1. the file the editor names with the config_file option (see below);
  2. the file named by $ORG_LSP_CONFIG;
  3. config.toml or config.json in $XDG_CONFIG_HOME/org-lsp;
  4. config.toml or config.json in ~/.config/org-lsp (on Windows, %APPDATA%\org-lsp).

A file named by config_file or $ORG_LSP_CONFIG that is not there is a problem the server, org-lsp agenda and org-lsp mcp report; the others may be missing.

Write it in TOML or in JSON, whichever you prefer. With both there, the server reads config.toml and says that it leaves config.json out. A file named by config_file or $ORG_LSP_CONFIG is JSON if its name ends in .json, and TOML otherwise.

In TOML:

org_agenda_files = ["~/org"]
org_todo_keywords = ["TODO(t)", "NEXT(n)", "WAIT(w@/!)", "|", "DONE(d!)", "CANCELLED(c@)"]
org_log_done = "time"
org_log_into_drawer = true
org_refile_targets = [{ files = "agenda", maxlevel = 2 }]
org_agenda_span = "day"
org_agenda_start_on_weekday = 0

[[org_capture_templates]]
key = "t"
description = "Task"
target = ["file+headline", "~/org/inbox.org", "Tasks"]
template = "* TODO %?\n  %U"

[[org_capture_templates]]
key = "n"
description = "Note"
target = ["file", "~/org/notes.org"]
template = ["* %^{Title}", "%U", "", "%?"]

The same in JSON, which may have comments and trailing commas, as VS Code's settings.json does, so that options can be copied from there as they are:

{
  "org_agenda_files": ["~/org"],
  "org_todo_keywords": ["TODO(t)", "NEXT(n)", "WAIT(w@/!)", "|", "DONE(d!)", "CANCELLED(c@)"],
  "org_log_done": "time",
  "org_log_into_drawer": true,
  "org_refile_targets": [{ "files": "agenda", "maxlevel": 2 }],
  "org_agenda_span": "day",
  "org_agenda_start_on_weekday": 0,
  "org_capture_templates": [
    { "key": "t", "description": "Task", "target": ["file+headline", "~/org/inbox.org", "Tasks"], "template": "* TODO %?\n  %U" },
    // Notes, in a file of their own.
    { "key": "n", "description": "Note", "target": ["file", "~/org/notes.org"], "template": ["* %^{Title}", "%U", "", "%?"] },
  ],
}

TOML is easier to write by hand: templates can go over several lines, and there are no braces to balance. JSON is easier to copy settings into from VS Code. The end of this page has every option, each under its own heading, with its default; config.toml is the whole file with every option at its default and what it means, to copy and change.

org-lsp config shows which file the server reads, anything wrong with it, and the options it comes to; with --options, it puts an editor's options on top, as the server would (org-lsp config --options '{"org_agenda_span": "day"}'):

$ org-lsp config
Configuration file: /home/me/.config/org-lsp/config.toml
Options:
{
  "org_agenda_files": [
    "~/org"
  ],
  "org_log_done": "time"
}

Completion and checking#

config.schema.json is the JSON Schema of the file, written from the server's own table of options. An editor that knows JSON Schema completes and checks the options with it, and flags a misspelt name. In JSON, name it with $schema:

{
  "$schema": "https://raw.githubusercontent.com/kristijanhusak/org-lsp/main/docs/config.schema.json",
  "org_log_done": "time"
}

In TOML, editors that use Taplo (VS Code's Even Better TOML, Helix, Neovim's taplo server) read a #:schema comment at the top of the file:

#:schema https://raw.githubusercontent.com/kristijanhusak/org-lsp/main/docs/config.schema.json
org_log_done = "time"

The editors check the options they pass too: the Neovim plugin's options have types for lua-language-server, and VS Code completes and checks org-lsp.settings (see their sections below).

An editor's options on top#

An editor's options go on top of the file's:

  • an option the editor sets replaces the file's;
  • an object, such as org_agenda_prefix_format or emacs_options, is merged key by key, the value of each key it has replacing the file's whole;
  • a list, such as org_capture_templates or org_agenda_files, is replaced whole.

With the file above, this Neovim configuration shows a week in the agenda, and keeps everything else from the file:

require('org-lsp').setup({ settings = { org_agenda_span = 'week' } })

A list replaces the default list whole too: with org_capture_templates set, its templates are the only ones, and Org's default one is gone.

Leaving the file out, or using another#

config_file is an option only an editor gives. It says which file to read:

  • false: none; the editor's options alone count;
  • a path: that file instead (~/ is the home directory). It must exist: the server says so when it cannot read it.
-- Neovim: no shared file.
require('org-lsp').setup({ settings = { config_file = false } })
// VS Code: the work configuration.
{ "org-lsp.settings": { "config_file": "~/work/org-lsp.toml" } }

Custom agenda commands#

org_agenda_custom_commands is Emacs's org-agenda-custom-commands: views of your own in the agenda menu (C-c a, <Leader>oa), next to a (the agenda), t (the TODO list) and m or M (a tags search, asked for). A command is one view, or a block agenda: several views one after the other, with a line of = between them.

[[org_agenda_custom_commands]]
key = "n"
description = "Next actions"
type = "todo"
match = "NEXT|WAIT"

[[org_agenda_custom_commands]]
key = "w"
description = "Work, open"
type = "tags-todo"
match = "work-email"

# A prefix key: the menu then offers the commands under it.
[[org_agenda_custom_commands]]
key = "d"
description = "Daily"

[[org_agenda_custom_commands]]
key = "dd"
description = "Today, then what is waiting"
blocks = [
  { type = "agenda", settings = { org_agenda_span = "day" } },
  { type = "tags-todo", match = "PRIORITY=\"A\"", header = "Urgent" },
  { type = "todo", match = "WAIT", header = "Waiting for" },
]

# Tomorrow's deadlines, the earliest first.
[[org_agenda_custom_commands]]
key = "D"
description = "Due tomorrow"
type = "tags-todo"
match = "DEADLINE>=\"<+1d>\"&DEADLINE<\"<+2d>\""
settings = { org_agenda_sorting_strategy = ["deadline-up", "urgency-down"] }

# Open TODO entries the agenda does not show yet: nothing scheduled, no
# deadline in its warning period.
[[org_agenda_custom_commands]]
key = "u"
description = "Not planned"
type = "alltodo"
settings = { org_agenda_todo_ignore_scheduled = "all", org_agenda_todo_ignore_deadlines = "near" }

The views:

typeShowsmatch
agendathe day or week agenda
alltodoevery open TODO entry
todoentries with these keywordsNEXT¦WAIT
tagsentries the match string matcheswork-home
tags-todothe same, open TODO entries onlywork-home
searchentries with these wordsmeeting
stuckstuck projects

(In the table, ¦ stands for |, which an Org table cannot hold.)

A match string is Org's: tags joined with + (and), - (not) and | (or), as in work+urgent-home|@phone; a regexp in braces, {^proj}; properties, as in OWNER="alice", EFFORT>2, PRIORITY="A", LEVEL>1, TODO="NEXT", SCHEDULED<"<today>" (a * after the operator, as in EFFORT<*3, also requires the property); and, after a slash, keywords: work/NEXT|WAIT, or work/! for any open one.

header replaces a view's header, and an empty one leaves it out. settings holds agenda options for a command or a block, as Org's settings list does: org_agenda_span, org_agenda_start_day (-1d, 2026-10-01), org_deadline_warning_days, org_agenda_use_time_grid, org_agenda_sorting_strategy (one list, for the block's kind of view), org_agenda_max_entries and the others. A block's settings go over its command's, which go over the options'.

In a block agenda, f, b, ., j and the span keys move the agenda block the cursor is in, as in Emacs.

Plugins#

org-super-agenda, org-roam and org-journal, Emacs packages built on Org, are there too, off until turned on: plugins.org says how they work and what they differ in.

org-protocol URLs#

Bookmarklets that store a link to a page or capture it, and links that open a page's source, reach org-lsp through org-lsp protocol URL: org-protocol.org says how to set it up. Its options are Org's (below): org_protocol_default_template_key, the template of a capture whose URL names none; org_protocol_data_separator, for old-style URLs; org_protocol_project_alist, where the files of published pages are, for open-source; and org-lsp's own org_protocol_editor, the editor to start when none runs, which only the shared file can give, as no editor runs then:

org_protocol_default_template_key = "w"
org_protocol_editor = "code"

[[org_protocol_project_alist]]
name = "Worg"
base_url = "https://orgmode.org/worg/"
working_directory = "~/org/worg/"
online_suffix = ".html"
working_suffix = ".org"

Export, Babel and other work in Emacs#

What only Emacs can do, the server has Emacs do, when Emacs (with Org 9.6 or newer) is installed: export (C-c C-e, <Leader>oe in Vim and Neovim), evaluating code blocks (C-c C-c on a block, C-c C-v b for the file's), LaTeX previews, encryption and a few others. The server starts Emacs the first time and keeps it running. Moving rows in column view (org-columns-move-row-up, M-<up>) needs a newer Org than the 9.6.15 that Emacs 29 comes with.

Org's options for these go in emacs_options, by their names in Org, with values as the other options have them: true is t, false is nil, a string is a symbol where the option takes one ("mv" is mv), and a table is an association list.

# ~/.config/org-lsp/config.toml
[emacs_options]
org-attach-method = "mv"
org-attach-id-dir = "~/org/data/"
org-export-with-toc = false
org-export-backends = ["ascii", "html", "icalendar", "latex", "md", "odt"]
org-babel-load-languages = { emacs-lisp = true, python = true }

Emacs sets each, as Customize would, when it loads the library the option is in (org-attach for org-attach-method), and checks it against the option's type: a value the option does not take is left out, with a message saying what it takes. The options are those Emacs reads: emacs-options.org lists each, with Org's documentation of it, its default and its type. For the others the server says why it leaves them out: most are settings of the server, and a function or a hook is Lisp.

Lisp goes in a file Emacs loads before Org, or inline. Emacs loads emacs_config_file, then evaluates emacs_config, then sets emacs_options, which so win over both:

# ~/.config/org-lsp/config.toml
emacs_config_file = "~/.config/org-lsp/export.el"
emacs_config = '''
(add-to-list 'load-path "~/src/org-mode/lisp")
(setq org-html-format-drawer-function #'my-drawer)
(add-hook 'org-export-before-processing-functions #'my-before-export)
'''

Emacs asks before it evaluates code, and the editor shows the question.

When something is wrong#

The server never refuses to start because of its options:

  • a file that is not valid TOML or JSON is left out whole, and the server shows a message naming the file and the line;
  • an option with a value of the wrong type is left out on its own, with a message; the other options apply;
  • an option the server does not know is named in a message, which catches a misspelt name.

The messages also go to the editor's LSP log (:checkhealth vim.lsp in Neovim shows where it is; the Output panel's Org Language Server in VS Code; :log-open in Helix).

The server reads its options when it starts. After changing them, restart it: :lsp restart in Neovim 0.12, Org: Restart Language Server in VS Code (which restarts it by itself when org-lsp.settings changes), :lsp-restart in Helix, LSP: Restart Servers in Sublime Text.

Each editor's own settings#

Besides passing the server's options, each editor has settings of its own: where the server comes from, the keys, how windows open, what is shown.

Neovim#

Set vim.g.org_lsp before the plugin loads (before vim.pack.add(), or in lazy.nvim's init), or call require('org-lsp').setup() at any time; calling it more than once merges each call into what was there. What you set is merged into the defaults, so you only write what you want to change. These are the defaults:

require('org-lsp').setup({
  -- The server command. Unset, the plugin uses the server it built
  -- (target/release/org-lsp in the plugin's directory), `org-lsp` from
  -- PATH, or the one it downloaded.
  cmd = nil,

  -- When no server is found, download the build of `release` for this
  -- platform into stdpath('data')/org-lsp (needs curl and tar), then
  -- start it. `:OrgLspDownload` downloads it again, to update it.
  download = true,

  -- The release to download: 'nightly' (built from the latest main), or
  -- a version tag such as 'v0.2.0'.
  release = 'nightly',

  -- The server's options, passed to it as they are.
  settings = {},

  -- How a newly opened file is folded: 'showeverything' (everything
  -- open) or 'overview' (every fold closed). Unset, the server's
  -- `org_startup_folded`, the file's `#+STARTUP:` and its `VISIBILITY`
  -- properties decide, as in Emacs.
  startup_folded = nil,

  -- Fold with the server's folding ranges.
  folding = true,

  -- Turn off the syntax for Org once the server's highlighting arrives.
  -- The plugin's syntax colors what a pattern finds as the server does
  -- (see Neovim's page), and colors what you type before the server
  -- answers.
  replace_syntax = false,

  -- Highlight the code of source and export blocks (`#+begin_src python`,
  -- `#+begin_export html`) and of inline source blocks (`src_python{…}`),
  -- where the server says it is, with the tree-sitter parser of its
  -- language and its highlight query, as Emacs's
  -- `org-src-fontify-natively` does; a language without a parser (Emacs
  -- Lisp) with its Vim syntax file, in regions of the buffer's own syntax.
  -- A language with neither stays as it is.
  src_highlight = true,

  -- Conceal what the server marks hidden: link brackets and targets
  -- (`org_link_descriptive`), emphasis markers (`org_hide_emphasis_markers`).
  -- Sets 'conceallevel' 2 in Org windows (a level set before, as by a
  -- `FileType` autocommand, stays); the cursor line shows everything.
  conceal = true,

  -- Indent as Org does, with the server: new lines through 'indentexpr'
  -- (`org-indent-line`, as on RET), and `=` re-indents the lines it moves
  -- over (`org-indent-region`). `gq` still wraps text. How far text goes
  -- follows `org_adapt_indentation`.
  indent = true,

  -- Show files with `org-indent-mode` (`org_startup_indented`, `#+STARTUP:
  -- indent`) indented by level, without changing them, and hide leading
  -- stars (`org_hide_leading_stars`, `#+STARTUP: hidestars`; needs
  -- `conceal`). A line that wraps goes on under its own text, a
  -- headline's title, an item's text ('breakindent'), as Org's
  -- `wrap-prefix`, but without the prefix: Neovim cannot repeat it there.
  virtual_indent = true,

  -- How the agenda and capture buffers open, and how big; see below.
  win_split_mode = 'split',
  win_split_size = nil,

  -- Where the date prompt's calendar opens: 'bottom', 'float', 'cursor';
  -- see below. And the border of a floating calendar.
  calendar_win_mode = 'bottom',
  calendar_border = 'rounded',

  -- Previews of links to images and of LaTeX (`<Leader>oxv`, `<Leader>oxl`),
  -- drawn with `vim.ui.img` (Neovim 0.13): the most lines an image takes
  -- (and columns, `max_width`, on top of `org_image_max_width`), or false
  -- for none. See below.
  images = { max_height = 20 },

  -- Keys by scope; see docs/keys/neovim.org. `false` sets no keys at all.
  mappings = {
    global = {
      ['org.agenda.dispatch'] = '<Leader>oa',
      ['org.capture'] = '<Leader>oc',
      ['org.clock.goto'] = '<Leader>oxj',
      ['org.journal.new.entry'] = '<Leader>jj',
    },
    org = { cycle = '<Tab>', global_cycle = '<S-Tab>' },
    agenda = { quit = 'q' },
  },
})

mappings lists only the keys the plugin needs before the server has started. The other keys come from the server; keys/neovim.org lists them all and shows how to change them.

The plugin's options and the server's have types for lua-language-server (org_lsp.Config, org_lsp.Settings, written from the server's own table of options into lua/org-lsp/types.lua), so with the plugin in its library they are completed and checked. setup() is annotated already; annotate vim.g.org_lsp yourself:

---@type org_lsp.Config
vim.g.org_lsp = {
  settings = { org_log_done = 'time', org_agenda_span = 'day' },
}

:checkhealth org-lsp shows which server the plugin found, where it came from, and the agenda files.

Where the agenda and capture buffers open#

win_split_mode says how a window is opened for the agenda and for a capture buffer. One that is already shown is used again.

ValueOpens it
'split'in a horizontal split (the default)
'vsplit'in a vertical split
'float'in a floating window in the middle of the editor
'current'in the current window
another Ex commandwith that command, such as 'botright split', 'topleft vsplit' or 'tabnew'
a functionwith the function, which is given the buffer and returns the window it opened
require('org-lsp').setup({ win_split_mode = 'float' })

-- A float of your own size.
require('org-lsp').setup({
  win_split_mode = function(bufnr)
    return vim.api.nvim_open_win(bufnr, true, {
      relative = 'editor', row = 2, col = 4, width = vim.o.columns - 8, height = vim.o.lines - 6, border = 'single',
    })
  end,
})

win_split_size says how big that window is: lines for a split, columns for a vertical one ('vsplit', or a command with vsplit, vnew or vertical), or, below 1, that part of the editor. A float takes the part for both its sides (0.8 unset), or the lines for its height. Unset, a split takes half of the window it splits. A function opens its own size.

-- The agenda below, 15 lines high.
require('org-lsp').setup({ win_split_mode = 'botright split', win_split_size = 15 })
-- Beside, a third of the editor wide.
require('org-lsp').setup({ win_split_mode = 'vsplit', win_split_size = 0.33 })

Closing the agenda (q) or finishing a capture closes the window that was opened for it; with 'current', the window goes back to the buffer it showed before. Going to an entry from the agenda opens the entry's file in the agenda's window, or, from a floating window, in the window under it. The window the agenda or a capture buffer was opened from starts with the same line again when they close, as in Emacs.

Where the calendar opens#

Commands that ask for a date (org.deadline, org.schedule, cid …) show the calendar Emacs shows with the prompt. calendar_win_mode says where.

ValueOpens it
'bottom'in a split along the bottom, as high as the calendar, as Emacs does (the default); from a floating window, in a floating window along the bottom
'float'in a floating window in the middle of the editor
'cursor'in a floating window below the cursor, or above it when there is no room below
another Ex commandwith that command, such as 'topleft split'
a functionwith the function, which is given the buffer and returns the window it opened

calendar_border is the border of the floating window ('float', 'cursor'), as nvim_open_win() takes it: 'rounded' unset, 'none' for none.

The calendar shows three months, as Emacs's does (Emacs has no other number); the server's calendar_months option set to 1 shows the month of the selected day alone, which suits a floating window. Under one month the prompt is on a line of its own and the answer below it (10:00 => <2026-10-07 Wed 10:00>), so the window is not much wider than the month. Its weeks start on Sunday; calendar_week_start_day set to 1 starts them on Monday, as Emacs's calendar-week-start-day does:

require('org-lsp').setup({
  calendar_win_mode = 'cursor',
  calendar_border = 'single',
  settings = { calendar_months = 1, calendar_week_start_day = 1 },
})

Picking a time, the minutes move by org_time_stamp_rounding_minutes (5), going first to a multiple of it, as S-<up> on a timestamp does: from 12:44, up is 12:45, then 12:50; down is 12:40.

Once the calendar closes, the window it was asked from shows what it showed before: the same first line and the cursor on the same text, moved down with it when the date went in above, as in Emacs, whatever 'scrolloff' and 'splitkeep' are.

The clock and the timer in the statusline#

While a clock runs, require('org-lsp').clock_status() returns what Emacs's mode line shows: the time clocked on the entry, its effort, and its headline, as in [0:25/1:00] (Write the report). While the relative timer or a countdown is on, its value follows (<0:05:23>). With neither it returns an empty string. The plugin redraws the statusline every minute while a clock runs, every second while a timer runs, and fires the User OrgLspClock autocommand when the clock starts or stops.

vim.o.statusline = '%f %h%m%r%=%{v:lua.require("org-lsp").clock_status()}  %l,%c'

-- lualine
require('lualine').setup({
  sections = { lualine_x = { function() return require('org-lsp').clock_status() end } },
})

Highlighting#

The server's highlighting arrives as semantic tokens, which Neovim shows with the groups @lsp.type.<token>.org and @lsp.typemod.<token>.<modifier>.org; protocol.org lists the tokens and modifiers. The plugin links them to nvim-orgmode's @org.* groups by default, so a colorscheme that styles those applies here too. Like any group, they can be set in your configuration:

vim.api.nvim_set_hl(0, '@lsp.type.todoKeyword.org', { fg = '#ff6c6b', bold = true })
vim.api.nvim_set_hl(0, '@lsp.typemod.todoKeyword.done.org', { fg = '#98be65', bold = true })

With org_fontify_whole_heading_line, a headline's whole line, to the edge of the window, takes the group of its level, @lsp.typemod.headline.level1.org and on: give those a background for it to show, as Org's org-level-N faces need one.

Images and LaTeX#

Neovim 0.13 draws images in the terminal (vim.ui.img, with the Kitty graphics protocol: Kitty, Ghostty, WezTerm). There the previews of Org show, as Emacs shows them:

  • <Leader>oxv (org-link-preview, C-c C-x C-v) shows the images of the links to image files in the current section, or toggles the one of the link at the cursor. With a count of 1 links with a description count too; 4 takes them away; 16 (or 11) shows those of the whole file, 64 takes them all away. A file with #+STARTUP: inlineimages (or org_startup_with_link_previews) opens with them.
  • <Leader>oxl (org-latex-preview, C-c C-x C-l) shows the LaTeX fragments as images, made by Emacs (latex and dvipng, as Org makes them, into ltximg/ beside the file), with the same counts. A file with #+STARTUP: latexpreview (or org_startup_with_latex_preview) opens with them.

An image shows below the line of its link or fragment, in lines kept free for it, from where the line's text starts, and follows it as the window scrolls; it goes when its text does. PNG images show as they are; others are made PNG with ImageMagick (magick or convert) when it is installed: read as their extension says (a .gif file as a GIF), in at most ten seconds. Older versions of Neovim say that they cannot show images.

An image keeps its proportions: it shows as wide as org_image_actual_width says (its own width, a number of pixels, or the :width of the paragraph's #+ATTR_ORG:, 300, 50% or 0.5 of the window's text), at most org_image_max_width when at its own width (70 columns, Emacs's fill-column), and one larger than max_width or max_height (in cells) allows is given only the width or the height it may take, the terminal working out the other. The lines kept free below it are those it takes, by the size of the terminal's cells in pixels, which the terminal tells (Kitty, Ghostty and WezTerm do). Where it does not (some multiplexers), cells are taken as 10 by 20 pixels; set their size if images overlap the text below them or leave a gap:

require('org-lsp').setup({ images = { cell = { width = 9, height = 19 } } })

Vim#

Set g:org_lsp before the plugin loads; every key may be left out, and what you set is merged into the defaults.

OptionDefaultMeaning
cmdfoundThe server command, as a list. Unset: the build in the checkout (target/release), org-lsp on PATH, or the downloaded one.
download1When no server is found, download the build of release for this platform into ~/.local/share/vim/org-lsp (with curl and tar) and start it. :OrgLspDownload downloads it again, to update it.
release'nightly'The release to download: 'nightly' (built from the latest main), or a version tag such as 'v0.2.0'.
settings{}The server's options, passed to it as they are.
client'auto'The LSP client: 'lsp' (yegappan/lsp), 'coc', 'vim-lsp' or 'ale'. 'auto' takes the first of these that is installed.
folding1Fold with the server's folding ranges, and cycle with <Tab> and <S-Tab>.
startup_folded'''overview' opens files with every fold closed, 'showeverything' with every fold open. Empty: the server's org_startup_folded, the file's #+STARTUP: and its VISIBILITY properties decide, as in Emacs.
highlight1Highlight with the server's tokens.
indent1Indent as Org does, with the server: new lines through 'indentexpr' (org-indent-line), and = (org-indent-region), following org_adapt_indentation.
virtual_indent1Show files with org-indent-mode (org_startup_indented, #+STARTUP: indent) indented by level without changing them, and their hidden leading stars in the color of the background, as Org's org-hide face does. Needs Vim 9.0.0067 or later.
conceal1Hide what Org hides (link brackets and targets, emphasis markers with org_hide_emphasis_markers), and show what stands in for hidden text: entities as their characters, the bullets of org_bullets_mode, shrunk table fields. Sets 'conceallevel' 2 in Org windows (a level set before stays); the cursor's line shows everything. Needs Vim 9.0.0067 or later.
src_highlight1Highlight the code of source and export blocks and of inline source blocks with the syntax file of its language, where the server says it is, as Emacs's org-src-fontify-natively does.
win_split_mode'split'How the agenda and capture buffers open: 'split', 'vsplit', 'current', or an Ex command that opens a window ('botright split', 'tabnew').
win_split_size0How big that window is: lines for a split, columns for a vertical one (vsplit, vnew, vertical), or below 1 that part of the editor. 0 leaves it as the command makes it.
calendar1Pick dates in Org's calendar, as Emacs shows it while it asks for a date; i there types the date. 0 asks for the date as text only.
calendar_win_mode'botright split'The Ex command that opens the calendar's window ('topleft split', 'botright vsplit'). A split is as high as the calendar.
mappingsthe server'sKeys by scope (global, org, agenda, capture, calendar, columns); see keys/vim.org.

In a file shown indented (virtual_indent), a line that wraps goes on under its own text, a headline's title, an item's text ('breakindent', as Org's wrap-prefix), but without the prefix before it: Vim cannot repeat virtual text there.

For the clock in the statusline, and the relative timer or the countdown while one is on ([0:25] (Write the report) <0:05:23>):

set statusline=%f\ %=%{org_lsp#clock_status()}

User OrgLspClock fires when the clock starts or stops.

Leave the LSP client's own semantic highlighting and folding off for Org files (they are off by default in all four clients): the plugin does both.

With org_fontify_whole_heading_line, a headline's whole line takes the group of its level (OrgLsp_headline_level1 and on), through a sign without text, as the agenda's clocked line does: the sign column shows for them.

VS Code#

The settings go in settings.json (Preferences: Open User Settings (JSON)), or in a workspace's .vscode/settings.json for that folder only. The Settings UI shows them under Extensions › Org (org-lsp). In settings.json the server's options under org-lsp.settings are completed, described on hover and checked, as the extension knows them all with their types and defaults.

SettingDefaultMeaning
org-lsp.settings{}The server's options, passed to it as they are.
org-lsp.server.path""The server binary. Empty: the one bundled with the extension, or else org-lsp from PATH.
org-lsp.keys"emacs"Which keys are bound: "emacs" (Emacs's but those VS Code uses for text), "emacs_full" (all of Emacs's), "vim" (the Neovim plugin's, for VSCodeVim) or "custom" (none); see keys/vscode.org.
org-lsp.concealtrueHide what Org hides: link brackets and targets (org_link_descriptive), emphasis markers (org_hide_emphasis_markers). The line with the cursor shows everything.
org-lsp.imagestrueShow images in place of links to image files and of LaTeX fragments (C-c C-x C-v, C-c C-x C-l, #+STARTUP: inlineimages, latexpreview). VS Code cannot leave lines free for an image, so an image is as high as a line; hover over it to see it whole.
org-lsp.headlineLevelColorsfalseColor each level of headlines in a color of the theme, as Emacs's outline-N faces; see Headline levels in colors.
org-lsp.latexForeground""The color LaTeX previews are drawn in, such as "#d4d4d4". Empty: black on a light theme, light gray on a dark one.
org-lsp.winSplitMode"split"Where the agenda and capture buffers open: "split" in an editor group below the current one, "vsplit" beside it, "float" in a window of its own, "current" in the current group. A group that already has it is used again.
org-lsp.messages"notification"How Org's messages show (Priority of current item set to A): "notification" in the corner of the window, "statusBar" in the status bar for a few seconds. Errors always show as notifications.

When org-lsp.settings or org-lsp.server.path changes, the extension restarts the server, so the change applies at once. In a workspace VS Code does not trust (restricted mode), these two come from the user's settings only: a folder's .vscode/settings.json could otherwise name a program for the server to run (emacs, a capture template's function). They follow the folder's settings again once it is trusted. While a clock runs, the status bar shows it as Emacs's mode line does, such as [0:25/1:00] (Write the report); clicking it goes to the entry.

The extension also sets editor defaults for Org files, the agenda and the date prompt. Org files get semantic highlighting, and the light bulb and bracket pair colours are off. The agenda and the date prompt also lose line numbers, wrapping, folding and indentation guides. Any of these can be set back for the language as usual:

{
  "[org]": { "editor.lightbulb.enabled": "on" },
  "[org-agenda]": { "editor.lineNumbers": "on" }
}

The extension's colours go in workbench.colorCustomizations: org.agendaClockingBackground, the agenda's line of the clocked entry, and org.headlineLevel1Background to org.headlineLevel8Background, the background of a headline's line from edge to edge with org_fontify_whole_heading_line (none by default, as Org's org-level-N faces have none; a theme's token colours cannot give one):

{
  "workbench.colorCustomizations": { "org.headlineLevel1Background": "#2a3a4a" }
}

Sublime Text#

The package's settings are under Preferences › Package Settings › LSP › Servers › LSP-org, or Preferences: LSP-org Settings in the Command Palette, which opens the defaults beside your own Packages/User/LSP-org.sublime-settings.

SettingMeaning
commandThe server command. By default the package finds the server or downloads it; see sublime.org.
initializationOptionsThe server's options, passed to it as they are.
org_keysThe keys: "emacs" (the default: Emacs's but those Sublime Text uses for text), "emacs_full" (all of Emacs's), "vim" (for Vintage and NeoVintageous, in command mode) or "custom" (none); see keys/sublime.org.
org_imagesWhether images show below the lines of links to image files and of LaTeX fragments (C-c C-x C-v, C-c C-x C-l, #+STARTUP: inlineimages, latexpreview): true (the default) or false. PNG, JPEG and GIF only.
org_messagesHow Org's messages show: "popup" (the default), at the cursor for a few seconds and in the status bar, or "status", in the status bar only.
semantic_tokensThe scopes of the server's tokens; written from the server.

LSP draws the server's colors with "semantic_highlighting": true in its own settings (Preferences › Package Settings › LSP › Settings), and the time clocked and the … of shrunk columns with "show_inlay_hints": true.

Zed#

The settings go in Zed's settings (zed: open settings):

{
  "languages": {
    "Org": {
      "semantic_tokens": "combined",
      "document_folding_ranges": "on",
      "inlay_hints": { "enabled": true }
    }
  },
  "lsp": {
    "org-lsp": {
      "binary": { "path": "/path/to/org-lsp" },
      "initialization_options": { "org_agenda_files": ["~/org"] }
    }
  }
}
  • semantic_tokens: Zed asks a language server for semantic tokens only when a language's semantic_tokens says so. combined colors Org files with the tree-sitter grammar and the server's tokens on top; full uses the server's tokens alone. Source and export blocks show their code in its language's colors through the grammar's injections, with combined only. The grammar has no node for inline source blocks (src_python{…}), so their code is not colored.
  • document_folding_ranges: Zed asks the server for its folds (headlines, drawers, blocks) only with on; without it, an Org file has no folds at all.
  • inlay_hints: files with org-indent-mode (org_startup_indented, #+STARTUP: indent) show indented by level, without being changed, through inlay hints of blanks before their lines. The leading stars still show; Zed cannot hide them. With soft_wrap, a line that wraps goes on under those blanks and its own indentation, not under a headline's title or an item's text as in Org. Pretty entities (\alpha as α) and the clock's times are inlay hints too.
  • lsp.org-lsp.binary.path: a server binary of your own. Without it, the extension starts the one install.sh put beside it, org-lsp from PATH, or else downloads the nightly build for your platform once.
  • lsp.org-lsp.initialization_options: the server's options, passed to it as they are.

Helix#

Helix passes the config table under the server in languages.toml to it as it is, as the server's options. Two of them tell the server what Helix does without announcing it, as editors/helix/languages.toml sets them:

  • show_document = true: Helix opens the documents the server asks it to show (window/showDocument): the agenda, a capture buffer, an entry's file.
  • message_requests = false: Helix shows no list for a server (window/showMessageRequest), so a question's choices come first in the code actions (Space a).

Inlay hints show the indentation of org-indent-mode, the time clocked and the … of shrunk columns:

[editor.lsp]
display-inlay-hints = true

Every option, at its default#

Every option of the server, each under its own heading: what it means, the Org option it stands for, the values it takes and its default, in JSON and as a line of the shared configuration file. You would never write them all out: set only what you want different. The names and values are the same in every editor; only the syntax changes (above, and on each editor's page). config.toml has them all in one file, at their defaults, each with what it means.

TODO keywords and logging#

org_todo_keywords#

The TODO sequence, written like Org's #+TODO: line. | separates the states that count as done; without it the last keyword is the only done state. TODO(t) gives a keyword a key for fast selection, and WAIT(w@/!) makes it log a note (@) or the time (!) on entering and leaving it. Several sequences go in a list of lists, [["TODO", "|", "DONE"], ["REPORT", "|", "FIXED"]]; cycling stays in the sequence of the entry, and C-S-<right> switches to the next. A list that starts with type is a type sequence (#+TYP_TODO:): each of its keywords goes straight to done. A file's own #+TODO: lines take precedence.

Org's option
org-todo-keywords
Type
string[] | string[][]
Default
["TODO", "|", "DONE"]
org_todo_keywords = ["TODO", "|", "DONE"]

org_todo_interpretation#

What a list of keywords alone in org_todo_keywords is (Org's old syntax): a sequence, or types, each going straight to done. A list that starts with sequence or type says it itself.

Org's option
org-todo-interpretation
Type
"sequence", "type"
Default
"sequence"
org_todo_interpretation = "sequence"

org_todo_keyword_faces#

Faces for particular TODO keywords: a color, { "WAIT": "orange" }, or attributes written as Org writes them, { "CANCELLED": ":foreground gray :slant italic :strike-through t" } (:foreground, :background, :weight bold, :slant italic, :underline t, :strike-through t). Shown in Org files and in the agenda by Neovim, Vim and VS Code.

Org's option
org-todo-keyword-faces
Type
{ [keyword]: string }
Default
{}
org_todo_keyword_faces = {}

org_log_done#

Write CLOSED: with the time when an entry is done, and with note ask for a note too. A file's #+STARTUP: words logdone, lognotedone and nologdone change it there; an entry's LOGGING property (inherited) says what its state changes log instead: those words, logrepeat and its relatives, and keywords with what they log (WAIT(@/!)), or nil for nothing.

Org's option
org-log-done
Type
false, "time", "note"
Default
false
org_log_done = false

org_log_repeat#

Record when a repeating entry is done and moves to its next date. #+STARTUP: logrepeat, lognoterepeat and nologrepeat change it in a file, and the LOGGING property in an entry.

Org's option
org-log-repeat
Type
false, "time", "note"
Default
"time"
org_log_repeat = "time"

org_treat_S_cursor_todo_selection_as_state_change#

S-<left> and S-<right> on a headline change its TODO state as any change does: logged, and blocked by its dependencies. Off, they change it with nothing logged and nothing in the way.

Org's option
org-treat-S-cursor-todo-selection-as-state-change
Type
boolean
Default
true
org_treat_S_cursor_todo_selection_as_state_change = true

org_treat_insert_todo_heading_as_state_change#

The keyword of a heading org.insert.todo.heading (M-S-RET) makes is set as a TODO change: logged as the keyword says (a note wanted is a time only), with its tag triggers.

Org's option
org-treat-insert-todo-heading-as-state-change
Type
boolean
Default
false
org_treat_insert_todo_heading_as_state_change = false

org_track_ordered_property_with_tag#

A tag that org.ordered.toggle (C-c C-x o) puts on the headline with the ORDERED property and takes off without it: true for ORDERED, or a tag of your own. Only the property orders the subtasks.

Org's option
org-track-ordered-property-with-tag
Type
boolean, string
Default
false
org_track_ordered_property_with_tag = false

org_enforce_todo_dependencies#

An entry cannot be done while a child is not, or, under a parent with the ORDERED property, while an earlier sibling is not: the change is refused with what blocks it.

Org's option
org-enforce-todo-dependencies
Type
boolean
Default
false
org_enforce_todo_dependencies = false

org_enforce_todo_checkbox_dependencies#

An entry cannot be done while it has an unchecked box.

Org's option
org-enforce-todo-checkbox-dependencies
Type
boolean
Default
false
org_enforce_todo_checkbox_dependencies = false

org_log_refile#

Record when an entry is refiled (Refiled on [2026-05-18 Mon 10:30]), with note asking for a note too. #+STARTUP: logrefile, lognoterefile and nologrefile change it in the file refiled to.

Org's option
org-log-refile
Type
false, "time", "note"
Default
false
org_log_refile = false

org_log_reschedule#

Record when a scheduled date changes or is removed (Rescheduled from "[2026-05-18 Mon]" on …), with note asking for a note too. #+STARTUP: logreschedule, lognotereschedule and nologreschedule change it in a file.

Org's option
org-log-reschedule
Type
false, "time", "note"
Default
false
org_log_reschedule = false

org_log_redeadline#

Record when a deadline changes or is removed (New deadline from …), with note asking for a note too. #+STARTUP: logredeadline, lognoteredeadline and nologredeadline change it in a file.

Org's option
org-log-redeadline
Type
false, "time", "note"
Default
false
org_log_redeadline = false

org_log_into_drawer#

Put state changes and notes into a drawer: true for LOGBOOK, or the name of a drawer. #+STARTUP: logdrawer and nologdrawer change it in a file; an entry's LOG_INTO_DRAWER property (inherited) says which drawer for it (t for LOGBOOK, nil for none).

Org's option
org-log-into-drawer
Type
boolean, string
Default
false
org_log_into_drawer = false

org_log_done_with_time#

The CLOSED: timestamp of an entry done has the time, not only the date.

Org's option
org-log-done-with-time
Type
boolean
Default
true
org_log_done_with_time = true

org_log_note_headings#

The heading of each kind of note, by kind: done (CLOSING NOTE %t), state (State %-12s from %-12S %t), note, reschedule, delschedule, redeadline, deldeadline, refile and clock_out. In a heading %t is the time, %T the time active, %d and %D the date, %s the new state or date and %S the old one, %u the login name and %U the full name; an empty heading leaves the note its text only. Kinds left out keep Org's headings. Habits take notes with the done heading for days done.

Org's option
org-log-note-headings
Type
object
Default
unset: Org's headings

org_log_states_order_reversed#

Put a new state note, note or clock line above the others (false: below them). #+STARTUP: logstatesreversed and nologstatesreversed change it in a file.

Org's option
org-log-states-order-reversed
Type
boolean
Default
true
org_log_states_order_reversed = true

org_log_state_notes_insert_after_drawers#

Without a log drawer, put notes after the drawers right under the headline and planning line, not before them.

Org's option
org-log-state-notes-insert-after-drawers
Type
boolean
Default
false
org_log_state_notes_insert_after_drawers = false

org_log_note_clock_out#

Ask for a note when the clock stops (org.clock.out), which goes right after the clock line. #+STARTUP: lognoteclock-out and nolognoteclock-out change it in a file.

Org's option
org-log-note-clock-out
Type
boolean
Default
false
org_log_note_clock_out = false

org_provide_todo_statistics#

Update the [1/3] and [33%] cookies of the parent when a state changes, counting the entries with a keyword (true), every entry (all-headlines, those without a keyword as not done), those with these keywords and the done ones (a list), or those of the first list as not done and of the second as done (two lists). false leaves the cookies.

Org's option
org-provide-todo-statistics
Type
boolean, "all-headlines", string[], [string[], string[]]
Default
true
org_provide_todo_statistics = true

org_hierarchical_todo_statistics#

TODO statistics count the children only; false: the whole subtree, and the cookies above too. A COOKIE_DATA property with recursive does this for a subtree.

Org's option
org-hierarchical-todo-statistics
Type
boolean
Default
true
org_hierarchical_todo_statistics = true

org_closed_keep_when_no_todo#

Keep the CLOSED: timestamp when an entry is left with no keyword.

Org's option
org-closed-keep-when-no-todo
Type
boolean
Default
false
org_closed_keep_when_no_todo = false

org_todo_state_tags_triggers#

Tags that change with the state, by state: a keyword, "" for none, todo for any not done, done for any done; each a list of tags to set (+TAG) or remove (-TAG), in order: { "WAIT": ["+waiting"], "todo": ["-done"], "done": ["+done", "-waiting"] }.

Org's option
org-todo-state-tags-triggers
Type
object
Default
unset: none

org_use_fast_todo_selection#

How C-c C-t (org.todo) changes the TODO state where keywords have keys (TODO(t)): auto picks the state by key from a menu of them; expert by key too, the keys listed in the prompt alone (in Neovim and Vim; other editors show their menu); false goes to the next state, as where no keyword has a key. true is auto.

Org's option
org-use-fast-todo-selection
Type
"auto", "expert", false
Default
"auto"
org_use_fast_todo_selection = "auto"

org_todo_repeat_to_state#

The state a repeating entry returns to when it is done: a keyword, or true for the state it had.

Org's option
org-todo-repeat-to-state
Type
string, true
Default
unset: the first keyword of the sequence

Priorities#

org_priority_faces#

Faces for particular priorities, by their letter, written as in org_todo_keyword_faces: { "A": ":foreground red :weight bold" }.

Org's option
org-priority-faces
Type
{ [priority]: string }
Default
{}
org_priority_faces = {}

org_priority_enable_commands#

Whether the priority commands work. With false they refuse (Priority commands are disabled), and S-<up> and S-<down> on a headline do not change its priority.

Org's option
org-priority-enable-commands
Type
boolean
Default
true
org_priority_enable_commands = true

org_priority_highest#

The highest priority.

Org's option
org-priority-highest
Type
letter, or 0 to 64
Default
"A"
org_priority_highest = "A"

org_priority_lowest#

The lowest priority.

Org's option
org-priority-lowest
Type
letter, or 0 to 64
Default
"C"
org_priority_lowest = "C"

org_priority_default#

The priority of an entry without a cookie. A file's #+PRIORITIES: line takes precedence over the three priority options.

Org's option
org-priority-default
Type
letter, or 0 to 64
Default
"B"
org_priority_default = "B"

org_priority_start_cycle_with_default#

Raising or lowering the priority of an entry that has none starts at the default.

Org's option
org-priority-start-cycle-with-default
Type
boolean
Default
true
org_priority_start_cycle_with_default = true

Tags and properties#

org_tag_faces#

Faces for particular tags of headlines, written as in org_todo_keyword_faces: { "work": "orange" }. Shown in Org files (not the agenda, as in Emacs) by Neovim, Vim and VS Code.

Org's option
org-tag-faces
Type
{ [tag]: string }
Default
{}
org_tag_faces = {}

org_tags_column#

Where tags are aligned after a change to a headline. Negative: they end at that column.

Org's option
org-tags-column
Type
number
Default
-77
org_tags_column = -77

org_use_tag_inheritance#

Which tags entries inherit from their parents and from #+FILETAGS:: true for all, false for none, a list of tags, or a regexp (Emacs syntax) tags must match. Inherited tags count in tag searches and show in the agenda.

Org's option
org-use-tag-inheritance
Type
boolean, string[], string
Default
true
org_use_tag_inheritance = true

org_tags_exclude_from_inheritance#

Tags never inherited, when org_use_tag_inheritance is true or a regexp.

Org's option
org-tags-exclude-from-inheritance
Type
string[]
Default
[]
org_tags_exclude_from_inheritance = []

org_use_property_inheritance#

Which properties an entry without them takes from its parents, the file's property drawer and #+PROPERTY: lines, in property searches (OWNER="alice"): true for all, false for none, a list of names, or a regexp (Emacs syntax). CATEGORY and ARCHIVE are always inherited.

Org's option
org-use-property-inheritance
Type
boolean, string[], string
Default
false
org_use_property_inheritance = false

org_property_separators#

What joins the values of a property with those of its PROPERTY+ lines, and the inherited ones, instead of a space: [["AUTHOR", "COAUTHOR"], ", "] for the properties named, ["^TAG", ";"] for those an Emacs regexp matches, without regard to case. The first that fits counts.

Org's option
org-property-separators
Type
[names or regexp, separator][]
Default
[]
org_property_separators = []

org_property_format#

How a property line is written when it is indented (TAB, org.indent) or set: format's %s for the key with its colons, then the value, with a width (%-10s pads the key to 10 columns).

Org's option
org-property-format
Type
string
Default
"%-10s %s"
org_property_format = "%-10s %s"

org_global_properties#

Properties every entry inherits, after those of #+PROPERTY: lines: chiefly the allowed values of a property, which setting it offers and S-<right> and S-<left> go through on its line ({ "Effort_ALL": "0:10 0:30 1:00 2:00" }; :ETC allows others too).

Org's option
org-global-properties
Type
{ [name]: string }
Default
{}
org_global_properties = {}

org_complete_tags_always_offer_all_agenda_tags#

Completing a tag offers the tags of every agenda file, after those of the file. Off, only the file's own. Setting tags offers them too.

Org's option
org-complete-tags-always-offer-all-agenda-tags
Type
boolean
Default
false
org_complete_tags_always_offer_all_agenda_tags = false

org_tag_alist#

The tags offered when setting tags in a file without a #+TAGS: line, written like one: "work(w) home(h) { @office(o) @home(m) } [ GTD : Control Persp ]" gives work the key w, makes @office and @home exclusive, and groups Control and Persp under GTD; \n starts a new line. A list of these words does as well. Unset, the tags used in the file are offered.

Org's option
org-tag-alist
Type
string, string[]
Default
""
org_tag_alist = ""

org_tag_persistent_alist#

Tags offered in every file, before those of #+TAGS: or org_tag_alist, written the same way.

Org's option
org-tag-persistent-alist
Type
string, string[]
Default
""
org_tag_persistent_alist = ""

org_group_tags#

A group tag ([ GTD : Control Persp ], { Context : @home @office } in #+TAGS: or org_tag_alist) in the match string of a tags view stands for itself and the tags of its group.

Org's option
org-group-tags
Type
boolean
Default
true
org_group_tags = true

org_use_fast_tag_selection#

Pick tags by key, each key turning its tag on or off until RET: auto when some tag has a key, true always (keys are given to the tags without one), false never: the tags are typed instead.

Org's option
org-use-fast-tag-selection
Type
true, false, "auto"
Default
"auto"
org_use_fast_tag_selection = "auto"

org_fast_tag_selection_single_key#

In fast tag selection, the first key that changes the tags also ends it.

Org's option
org-fast-tag-selection-single-key
Type
boolean
Default
false
org_fast_tag_selection_single_key = false

org_tags_sort_function#

Sort the tags of a headline when they are set: alphabetically, or the other way.

Org's option
org-tags-sort-function
Type
"string<", "string>"
Default
unset: the order they were picked in

org_auto_align_tags#

Align the tags of a headline to org_tags_column when they are set.

Org's option
org-auto-align-tags
Type
boolean
Default
true
org_auto_align_tags = true

org_tags_match_list_sublevels#

Whether tags matches (agenda, sparse trees) and stuck projects list the entries below one they list: false passes over its subtree, indented shows them with a dot for each level below the first.

Org's option
org-tags-match-list-sublevels
Type
true, false, "indented"
Default
true
org_tags_match_list_sublevels = true

Lists#

org_list_allow_alphabetical#

Whether a letter may stand for the number of an ordered item (a., B)). A list of more than 26 items is numbered.

Org's option
org-list-allow-alphabetical
Type
boolean
Default
false
org_list_allow_alphabetical = false

org_plain_list_ordered_item_terminator#

What ends the number of an ordered item: ".", ")", or true for either.

Org's option
org-plain-list-ordered-item-terminator
Type
true, ".", ")"
Default
true
org_plain_list_ordered_item_terminator = true

org_list_two_spaces_after_bullet_regexp#

An Emacs regexp: the bullets it matches get two spaces after them when Org writes them (a new item, a bullet changed, a list repaired).

Org's option
org-list-two-spaces-after-bullet-regexp
Type
false, string
Default
false
org_list_two_spaces_after_bullet_regexp = false

org_list_demote_modify_bullet#

By bullet (-, +, *, 1., 1)), the bullet an item gets when it is indented: { "+": "-", "-": "+" }.

Org's option
org-list-demote-modify-bullet
Type
object
Default
{}
org_list_demote_modify_bullet = {}

org_list_indent_offset#

How many more columns sub-items are indented, past their parent's bullet.

Org's option
org-list-indent-offset
Type
integer
Default
0
org_list_indent_offset = 0

org_list_automatic_rules#

checkbox: the statistics cookies are counted again when a box changes, and colored as done or not. indent: indenting the first item of a list with its children (M-S-<right>) moves the whole list. A rule left out of the object is off.

Org's option
org-list-automatic-rules
Type
object
Default
{ "checkbox": true, "indent": true }
org_list_automatic_rules = { checkbox = true, indent = true }

org_checkbox_hierarchical_statistics#

A checkbox cookie counts the boxes of the items right below it; false counts every box further down too, as recursive in a COOKIE_DATA property does.

Org's option
org-checkbox-hierarchical-statistics
Type
boolean
Default
true
org_checkbox_hierarchical_statistics = true

org_list_use_circular_motion#

Moving to the next item from the last goes to the first, and back; moving the last item down puts it first, the first up puts it last.

Org's option
org-list-use-circular-motion
Type
boolean
Default
false
org_list_use_circular_motion = false

Tables#

org_table_number_regexp#

An Emacs regexp: the fields it matches are numbers, and a column mostly of numbers aligns right.

Org's option
org-table-number-regexp
Type
string
Default
unset: Org's: integers, decimals, 2.4e-08, 0x1F, nan, inf and their relatives

org_table_number_fraction#

How much of a column's filled fields must be numbers for it to align right.

Org's option
org-table-number-fraction
Type
number
Default
0.5
org_table_number_fraction = 0.5

org_table_automatic_realign#

TAB and RET in a table align it before they move; false: only C-c C-c and the commands that change rows or columns do.

Org's option
org-table-automatic-realign
Type
boolean
Default
true
org_table_automatic_realign = true

org_table_tab_jumps_over_hlines#

TAB at the end of a row before a horizontal line goes to the row after it; false: it makes a row before the line.

Org's option
org-table-tab-jumps-over-hlines
Type
boolean
Default
true
org_table_tab_jumps_over_hlines = true

org_table_shrunk_column_indicator#

What shows at the end of each field of a shrunk column.

Org's option
org-table-shrunk-column-indicator
Type
string
Default
"…"
org_table_shrunk_column_indicator = "…"

org_table_formula_constants#

Constants for the table formulas of every file, by name: { "c": "299792458." } gives $c. A file's #+CONSTANTS: come first.

Org's option
org-table-formula-constants
Type
object
Default
{}
org_table_formula_constants = {}

org_table_relative_ref_may_cross_hline#

Whether a relative reference in a formula (@-1) goes past a horizontal line: false stops at the field next to it, "error" makes the formula fail.

Org's option
org-table-relative-ref-may-cross-hline
Type
true, false, "error"
Default
true
org_table_relative_ref_may_cross_hline = true

org_table_formula_create_columns#

A field formula past the last column adds the columns it needs, rather than failing.

Org's option
org-table-formula-create-columns
Type
boolean
Default
false
org_table_formula_create_columns = false

org_table_duration_custom_format#

How a formula with ;t writes a duration: a number of seconds, minutes, hours or days, or hours and minutes.

Org's option
org-table-duration-custom-format
Type
"seconds", "minutes", "hours", "days", "hh:mm"
Default
"hours"
org_table_duration_custom_format = "hours"

org_table_duration_hour_zero_padding#

Durations of formulas (;T, ;U) have their hours on two digits: 08:32:34 rather than 8:32:34.

Org's option
org-table-duration-hour-zero-padding
Type
boolean
Default
true
org_table_duration_hour_zero_padding = true

org_calc_default_modes#

The modes table formulas start with: float_format, ["float", digits], ["fix", decimals] or ["sci", digits], and angle_mode, "deg" or "rad". A formula's own modes (;f2) win; Calc's other modes are not offered.

Org's option
org-calc-default-modes
Type
object
Default
{ "float_format": ["float", 8], "angle_mode": "deg" }
org_calc_default_modes = { float_format = ["float", 8], angle_mode = "deg" }

org_table_formula_evaluate_inline#

TAB and RET on a field that is a formula (=$1*2, :=...) evaluate it, which org-lsp refuses (the formula goes in a #+TBLFM: line); false leaves the field as text.

Org's option
org-table-formula-evaluate-inline
Type
boolean
Default
true
org_table_formula_evaluate_inline = true

org_table_allow_automatic_line_recalculation#

TAB, RET and C-c C-c on a line marked # recalculate it.

Org's option
org-table-allow-automatic-line-recalculation
Type
boolean
Default
true
org_table_allow_automatic_line_recalculation = true

org_id_method#

How a new ID is made (org.id.create, a link stored by ID, org-roam): a random UUID, the time in base 36 (org), or the time as org_id_ts_format writes it (ts).

Org's option
org-id-method
Type
"uuid", "org", "ts"
Default
"uuid"
org_id_method = "uuid"

org_id_prefix#

What a new ID starts with, before a colon: "Org" makes Org:….

Org's option
org-id-prefix
Type
false, string
Default
false
org_id_prefix = false

org_id_ts_format#

How the ts method writes the time, as format-time-string does.

Org's option
org-id-ts-format
Type
string
Default
"%Y%m%dT%H%M%S.%6N"
org_id_ts_format = "%Y%m%dT%H%M%S.%6N"

org_id_include_domain#

The org and ts methods end a new ID with @ and the machine's domain.

Org's option
org-id-include-domain
Type
boolean
Default
false
org_id_include_domain = false

org_id_track_globally#

IDs are looked for in other files than the link's own: those of org_id_search_archives, org_id_extra_files and org_id_locations_file, the agenda files, the open ones and org-roam's. Off, an id: link leads only within its file.

Org's option
org-id-track-globally
Type
boolean
Default
true
org_id_track_globally = true

org_id_search_archives#

IDs are looked for in the archive files of the agenda files too.

Org's option
org-id-search-archives
Type
boolean
Default
true
org_id_search_archives = true

org_id_extra_files#

More files to look for IDs in: paths or glob patterns.

Org's option
org-id-extra-files
Type
string[]
Default
unset: org_agenda_text_search_extra_files

org_id_locations_file#

The file where Emacs keeps the files it found IDs in: org-lsp looks in them too, and never writes it. Names in it that are not absolute are relative to its directory.

Org's option
org-id-locations-file
Type
string
Default
"~/.emacs.d/.org-id-locations"
org_id_locations_file = "~/.emacs.d/.org-id-locations"

org_id_completion_targets#

The headlines an id: link completes to (org.link.insert), as org_refile_targets names them: by default every headline of the file and of the files with IDs.

Org's option
org-id-completion-targets
Type
object[]
Default
[{ "files": "current", "all": true }, { "files": "org-id-files", "all": true }]
org_id_completion_targets = [{ files = "current", all = true }, { files = "org-id-files", all = true }]

What a link to a headline that is not there does: "query-to-create" asks whether to make it, at the end of the file, when the link is followed (org.open); true is an error; false looks for its words in the text.

Org's option
org-link-search-must-match-exact-headline
Type
boolean, "query-to-create"
Default
"query-to-create"
org_link_search_must_match_exact_headline = "query-to-create"

What a doi: link is opened at: this, then the DOI.

Org's option
org-link-doi-server-url
Type
string
Default
"https://doi.org/"
org_link_doi_server_url = "https://doi.org/"

An Emacs regexp: a shell: link whose command it matches runs when followed without asking Execute … in shell? first. Empty asks for every command.

Org's option
org-link-shell-skip-confirm-regexp
Type
string
Default
""
org_link_shell_skip_confirm_regexp = ""

Whether org.link.store (C-c l) links to an entry by its ID: true makes one when the entry has none, "create-if-interactive" only from the command (not for capture's %a), "create-if-interactive-and-no-custom-id" likewise unless the entry has a CUSTOM_ID, "use-existing" only when it has one already. Off, the link searches for the headline.

Org's option
org-id-link-to-org-use-id
Type
boolean, string
Default
false
org_id_link_to_org_use_id = false

Links to a place in a file search for it (file:notes.org::*Heading); C-u turns it around for one link.

Org's option
org-link-context-for-files
Type
boolean
Default
true
org_link_context_for_files = true

ID links to a place below the entry's headline search for it as well (id:…::name).

Org's option
org-id-link-use-context
Type
boolean
Default
true
org_id_link_use_context = true

An ID link may use the ID of a parent entry, with a search for the place.

Org's option
org-id-link-consider-parent-id
Type
boolean
Default
false
org_id_link_consider_parent_id = false

How links to files write the path: "adaptive" relative below the file's directory and absolute elsewhere, "absolute" (with ~), "noabbrev" (without), "relative".

Org's option
org-link-file-path-type
Type
string
Default
"adaptive"
org_link_file_path_type = "adaptive"

Stored links stay stored once inserted.

Org's option
org-link-keep-stored-after-insertion
Type
boolean
Default
false
org_link_keep_stored_after_insertion = false

org_cite_global_bibliography#

Bibliography files for the citations of every document ([cite:@key]), after those its #+BIBLIOGRAPHY: lines name: BibTeX (.bib, .bibtex) or CSL-JSON (.json). Their entries are completed after @, shown over a key, and where following a key goes; a key none has is marked.

Org's option
org-cite-global-bibliography
Type
string[]
Default
[]
org_cite_global_bibliography = []

org_cite_insert_processor#

The citation processor org.cite.insert inserts with: basic, as Org's own does; Org's other processors cannot insert, and those of packages (citar) are not run; false for none.

Org's option
org-cite-insert-processor
Type
string, false
Default
"basic"
org_cite_insert_processor = "basic"

org_bibtex_autogen_keys#

Whether org.bibtex.create and org.bibtex.check make the key of a new BibTeX entry from its author, year and title, as bibtex-generate-autokey makes it (through Emacs), instead of asking for it (id).

Org's option
org-bibtex-autogen-keys
Type
boolean
Default
false
org_bibtex_autogen_keys = false

org_bibtex_prefix#

What the names of the properties the BibTeX commands write start with (BIB_ gives BIB_AUTHOR), but for the key's; they read the names with it and without.

Org's option
org-bibtex-prefix
Type
string
Default
unset: none

org_bibtex_treat_headline_as_title#

A headline without a TITLE property is the title of its BibTeX entry, and org.bibtex.check does not ask for one.

Org's option
org-bibtex-treat-headline-as-title
Type
boolean
Default
true
org_bibtex_treat_headline_as_title = true

org_bibtex_export_arbitrary_fields#

With org_bibtex_prefix, every property whose name has the prefix is a field of the entry exported (org.bibtex.export, org.bibtex.copy), not only those of its type.

Org's option
org-bibtex-export-arbitrary-fields
Type
boolean
Default
false
org_bibtex_export_arbitrary_fields = false

org_bibtex_key_property#

The property that holds an entry's BibTeX key. ID makes the key a global ID.

Org's option
org-bibtex-key-property
Type
string
Default
"CUSTOM_ID"
org_bibtex_key_property = "CUSTOM_ID"

org_bibtex_tags#

Tags given to the entries the BibTeX commands make.

Org's option
org-bibtex-tags
Type
string[]
Default
[]
org_bibtex_tags = []

org_bibtex_tags_are_keywords#

The keywords field of an entry read is its tags (spaces as _, other characters a tag cannot have left out), and an entry's own tags are its keywords when exported, but for those of org_bibtex_tags and org_bibtex_no_export_tags.

Org's option
org-bibtex-tags-are-keywords
Type
boolean
Default
false
org_bibtex_tags_are_keywords = false

org_bibtex_no_export_tags#

Tags that are not exported as keywords, with org_bibtex_tags_are_keywords.

Org's option
org-bibtex-no-export-tags
Type
string[]
Default
[]
org_bibtex_no_export_tags = []

org_bibtex_inherit_tags#

With org_bibtex_tags_are_keywords, the tags an entry inherits are keywords too.

Org's option
org-bibtex-inherit-tags
Type
boolean
Default
false
org_bibtex_inherit_tags = false

org_bibtex_type_property_name#

The property that holds an entry's BibTeX type (article); a headline without it is no entry.

Org's option
org-bibtex-type-property-name
Type
string
Default
"btype"
org_bibtex_type_property_name = "btype"

Link abbreviations: [[gh:org-lsp]] with { "gh": "https://github.com/%s" } follows https://github.com/org-lsp. %s stands for what follows the colon, %h for it URL-encoded; without either it goes at the end. A file's #+LINK: lines come first. %(my-function) calls an Emacs function with what follows the colon (through Emacs), one emacs_config marks safe, as Org asks: (put 'my-function 'org-link-abbrev-safe t).

Org's option
org-link-abbrev-alist
Type
{ [abbreviation]: string }
Default
{}
org_link_abbrev_alist = {}

org_file_apps#

What opens a linked file, the first entry that matches: a match is an extension (txt), an Emacs regular expression for the file name (\\.pdf\\' in JSON; with groups %1, %2... in the command, it matches the file followed by the link's :: part), directory, remote, system (what C-u C-u C-c C-o uses), auto-mode (every file the editor can show) or t (any other file). A command is emacs (the editor), default (the system entry, else the editor), system or mailcap (the system's application, through the editor), or a shell command where %s is the file. C-u C-c C-o opens the file in the editor. A Lisp function is not a command here.

Org's option
org-file-apps
Type
[match, command][]
Default
[["auto-mode", "emacs"], ["directory", "emacs"], ["\\.mm\\'", "default"], ["\\.x?html?\\'", "default"], ["\\.pdf\\'", "default"]]
org_file_apps = [["auto-mode", "emacs"], ["directory", "emacs"], ["\\.mm\\'", "default"], ["\\.x?html?\\'", "default"], ["\\.pdf\\'", "default"]]

Show a link as its description (or its target, when it has none) and hide the rest: the brackets, and the target of a link with a description. The text is marked hidden in the highlighting, and editors that can conceal text conceal it.

Org's option
org-link-descriptive
Type
boolean
Default
true
org_link_descriptive = true

RET (org.return) on a link, a timestamp or a citation follows it, as org.open (C-c C-o) does. In a table RET still moves down.

Org's option
org-return-follows-link
Type
boolean
Default
false
org_return_follows_link = false

Dates and times#

org_edit_timestamp_down_means_later#

S-<down> makes a timestamp later and S-<up> earlier, the other way round from Org's default.

Org's option
org-edit-timestamp-down-means-later
Type
boolean
Default
false
org_edit_timestamp_down_means_later = false

org_time_stamp_rounding_minutes#

The step in which the minutes of a timestamp change (the second number of Org's option).

Org's option
org-time-stamp-rounding-minutes
Type
number
Default
5
org_time_stamp_rounding_minutes = 5

org_read_date_prefer_future#

A date typed without a year or month is the next one to come. With time, a time that has passed today is tomorrow's.

Org's option
org-read-date-prefer-future
Type
boolean, "time"
Default
true
org_read_date_prefer_future = true

org_read_date_force_compatible_dates#

A typed year is kept within 1970 to 2037.

Org's option
org-read-date-force-compatible-dates
Type
boolean
Default
true
org_read_date_force_compatible_dates = true

org_display_custom_times#

Show timestamps in org_timestamp_custom_formats: the date and time inside the brackets is hidden and the custom form shows in its place, as entities do. #+STARTUP: customtime turns it on for a file, and C-c C-x C-t (org.timestamp.overlays.toggle) on and off. Exports through Emacs use them too; the date prompt shows its answer in Org's own form.

Org's option
org-display-custom-times
Type
boolean
Default
false
org_display_custom_times = false

org_timestamp_custom_formats#

The formats of org_display_custom_times, as format-time-string reads them (%d.%m.%Y); brackets around a format are dropped.

Org's option
org-timestamp-custom-formats
Type
[date, date with time]
Default
["%m/%d/%y %a", "%m/%d/%y %a %H:%M"]
org_timestamp_custom_formats = ["%m/%d/%y %a", "%m/%d/%y %a %H:%M"]

calendar_months#

How many months the calendar of the date prompt shows: 3 side by side, as Emacs's calendar shows them, the one with the selected day in the middle; or 1, that month alone, for a narrow window, with the answer on a line under the prompt.

Type
1 | 3
Default
3
calendar_months = 3

calendar_week_start_day#

The day the weeks of the date prompt's calendar start on: 1 starts them on Monday.

Org's option
calendar-week-start-day
Type
0 to 6 (0 is Sunday)
Default
0
calendar_week_start_day = 0

org_duration_format#

How durations are written (clock tables, clock lines, efforts): "h:mm" or "h:mm:ss", or a list of units each with whether it is written when zero (["d", false]), with perhaps ["special", "h:mm"] (the hours and minutes as H:MM after the larger units), ["special", "h:mm:ss"], ["special", 2] (one unit with 2 decimals) and "compact" (no space between units). The units are those of org_duration_units.

Org's option
org-duration-format
Type
"h:mm", "h:mm:ss", or a list
Default
[["d", false], ["special", "h:mm"]]
org_duration_format = [["d", false], ["special", "h:mm"]]

org_duration_units#

The units of durations and the minutes in each, for reading efforts and writing durations: ["d", 480] for days of 8 hours.

Org's option
org-duration-units
Type
[unit, minutes][]
Default
[["min", 1], ["h", 60], ["d", 1440], ["w", 10080], ["m", 43200], ["y", 525960]]
org_duration_units = [["min", 1], ["h", 60], ["d", 1440], ["w", 10080], ["m", 43200], ["y", 525960]]

org_extend_today_until#

The hour before which it is still yesterday: for the agenda's today, the date prompt with nothing to start from, the times capture templates put in and the day of a datetree, .+ and ++ repeaters, clock report ranges and org-journal's new entries.

Org's option
org-extend-today-until
Type
number
Default
0
org_extend_today_until = 0

org_use_effective_time#

Before the hour org_extend_today_until, a TODO change records 23:59 of the day before: in CLOSED:, LAST_REPEAT and the notes' timestamps. org.todo.yesterday does so at any hour.

Org's option
org-use-effective-time
Type
boolean
Default
false
org_use_effective_time = false

org_use_last_clock_out_time_as_effective_time#

A TODO change records the end of the first closed clock of the subtree instead of the time now, when there is one; this comes before org_use_effective_time.

Org's option
org-use-last-clock-out-time-as-effective-time
Type
boolean
Default
false
org_use_last_clock_out_time_as_effective_time = false

Capture, refile and archive#

org_refile_targets#

Where entries can be refiled to. Each entry has files: current (the entry's own file), agenda, org-id-files (the files with IDs), a path or a list of paths; and one of level, maxlevel, tag, todo, regexp (the Rust regex crate's syntax) or all (true), which says which headlines there are targets.

Org's option
org-refile-targets
Type
object[]
Default
[{ "files": "current", "level": 1 }]
org_refile_targets = [{ files = "current", level = 1 }]

org_refile_use_outline_path#

Name targets by their outline path (Projects/Alpha/). The three names start the path with the file, and offer the file itself, for its top level.

Org's option
org-refile-use-outline-path
Type
boolean, "file", "full-file-path", "title"
Default
false
org_refile_use_outline_path = false

org_refile_active_region_within_subtree#

A selection that is not whole subtrees is refiled too: its first line becomes a headline first (org-toggle-heading, run by Emacs), a level below the entry it is in.

Org's option
org-refile-active-region-within-subtree
Type
boolean
Default
false
org_refile_active_region_within_subtree = false

org_refile_allow_creating_parent_nodes#

A target that is not there yet can be named after an existing one, Projects/New: it is made, as the last child of Projects, and the entry goes under it. confirm asks first.

Org's option
org-refile-allow-creating-parent-nodes
Type
boolean, "confirm"
Default
false
org_refile_allow_creating_parent_nodes = false

org_refile_target_verify_function#

The name of an Emacs Lisp function that decides which headlines are refile targets: the server's Emacs calls it at the start of each, and keeps those it says yes to. Where it leaves the point, the search goes on: a function can skip a subtree.

Org's option
org-refile-target-verify-function
Type
string
Default
unset: none

org_reverse_note_order#

A refiled entry goes first under its target, not last.

Org's option
org-reverse-note-order
Type
boolean
Default
false
org_reverse_note_order = false

org_archive_location#

Where archived subtrees go: a file, ::, and a headline under which they go (they go to the end of the file without one). %s is the name of the file the subtree is in; an empty file part is that file. datetree/ as the headline files them under year, month and day, by when they were closed. An ARCHIVE property of the entry or a parent, or a #+ARCHIVE: line, says otherwise.

Org's option
org-archive-location
Type
string
Default
"%s_archive::"
org_archive_location = "%s_archive::"

org_archive_reversed_order#

An archived subtree goes first under its archive headline, not last.

Org's option
org-archive-reversed-order
Type
boolean
Default
false
org_archive_reversed_order = false

org_archive_mark_done#

Mark archived entries done: true for the first done keyword, or the keyword to use.

Org's option
org-archive-mark-done
Type
boolean, string
Default
false
org_archive_mark_done = false

org_archive_subtree_add_inherited_tags#

Give an archived subtree the tags it inherited: always, never, or when it stays in its file.

Org's option
org-archive-subtree-add-inherited-tags
Type
boolean, "infile"
Default
"infile"
org_archive_subtree_add_inherited_tags = "infile"

org_archive_save_context_info#

What an archived entry keeps as ARCHIVE_… properties: time, file, olpath (its outline path), category, todo, itags (inherited tags), ltags (its own tags) and olid (its parent's ID).

Org's option
org-archive-save-context-info
Type
string[]
Default
["time", "file", "olpath", "category", "todo", "itags"]
org_archive_save_context_info = ["time", "file", "olpath", "category", "todo", "itags"]

org_archive_sibling_heading#

The headline of the sibling org.archive.sibling archives under.

Org's option
org-archive-sibling-heading
Type
string
Default
"Archive"
org_archive_sibling_heading = "Archive"

org_archive_file_header_format#

What a new archive file starts with; %s is the path of the file the subtree came from.

Org's option
org-archive-file-header-format
Type
string, false
Default
"\nArchived entries from file %s\n\n"
org_archive_file_header_format = "\nArchived entries from file %s\n\n"

org_archive_default_command#

What org.archive.default does: archive the subtree, archive it under its sibling, or tag it.

Org's option
org-archive-default-command
Type
"subtree", "sibling", "tag"
Default
"subtree"
org_archive_default_command = "subtree"

org_archive_subtree_save_file_p#

Whether the archive file is saved once a subtree goes there: always (true), when archiving from an Org file (from-org), from the agenda (from-agenda), or never (false). Unsaved, it is left with its changes in the editor, as auto_save does not save it.

Org's option
org-archive-subtree-save-file-p
Type
boolean, "from-org", "from-agenda"
Default
"from-org"
org_archive_subtree_save_file_p = "from-org"

org_capture_use_agenda_date#

Capturing from the agenda takes the day of the line the cursor is on, at midnight (or the hour of org_extend_today_until), for %t, %U and the like and for the date of a date tree, which a time_prompt template then does not ask for.

Org's option
org-capture-use-agenda-date
Type
boolean
Default
false
org_capture_use_agenda_date = false

org_capture_templates_contexts#

Where templates are offered. Each has the key of a template, contexts, rules such as { "in_file": "work" } (in_file, in_mode, in_buffer, not_in_file, not_in_mode or not_in_buffer, each with a regexp of the regex crate's syntax, matched ignoring case), and maybe use, the key of the template it stands for there. A template with contexts is offered only where one of their rules holds. The mode is org-mode in an Org file and org-agenda-mode in the agenda, where there is no file; the buffer's name is the file's.

Org's option
org-capture-templates-contexts
Type
object[]
Default
[]
org_capture_templates_contexts = []

org_capture_templates#

Capture templates. Each has a key, a description, a type (entry, the default, plain, item, checkitem or table-line), a target and a template (text, or a list of lines), and may have prepend, empty_lines, empty_lines_before, empty_lines_after, immediate_finish, tree_type, time_prompt, table_line_pos, clock_in, clock_keep, clock_resume, jump_to_captured and unnarrowed. The target is a list: file and a path; file+headline, a path and a headline; file+olp, a path and the headlines of an outline path; file+regexp, a path and a regular expression; file+olp+datetree, a path and the headlines of an outline path, maybe none, for a date tree under them; id and an ID; clock, the entry clocked now; file+function, a path and the name of an Emacs Lisp function that moves the point there, or function and the name of one that visits the file too (run by the server's Emacs). An empty path is org_default_notes_file, and without a target the entry goes at the end of org_default_notes_file. A template with only a key and a description groups the templates whose keys start with its key.

Org's option
org-capture-templates
Type
object[]
Default
[{ "key": "t", "description": "Task", "target": ["file+headline", "", "Tasks"], "template": "* TODO %?\n %u\n %a" }]
org_capture_templates = [{ key = "t", description = "Task", target = ["file+headline", "", "Tasks"], template = "* TODO %?\n  %u\n  %a" }]

org_directory#

Where the relative paths of capture targets are.

Org's option
org-directory
Type
string
Default
"~/org"
org_directory = "~/org"

org_default_notes_file#

The target of a capture template whose file is empty.

Org's option
org-default-notes-file
Type
string
Default
"~/.notes"
org_default_notes_file = "~/.notes"

org-protocol#

org_protocol_default_template_key#

The keys of the capture template an org-protocol://capture URL uses when it names none (template=).

Org's option
org-protocol-default-template-key
Type
string
Default
unset: none: the menu of templates

org_protocol_data_separator#

An Emacs regular expression: what separates the parts of an old-style org-protocol URL (org-protocol://capture:/x/URL/TITLE/BODY).

Org's option
org-protocol-data-separator
Type
string
Default
"/+\\|\\?"
org_protocol_data_separator = "/+\\|\\?"

org_protocol_project_alist#

Where the files of org-protocol://open-source URLs are on this computer. Each has a name, the base_url of the pages (with its last slash) and the working_directory of their files (with its last slash, ~/ for the home directory), and may have an online_suffix taken off the URL (.html), a working_suffix put on in its place (.org), and rewrites, pairs of an Emacs regular expression on the URL, whose first group is taken out of it, and what goes after it, for a URL whose file is not there. The first whose base_url the URL has is tried first.

Org's option
org-protocol-project-alist
Type
object[]
Default
[]
org_protocol_project_alist = []

org_protocol_editor#

The editor org-lsp protocol starts when no org-lsp runs, as a command line (code, zed, kitty nvim): it opens org_default_notes_file in it, or the file of an open-source URL, and the org-lsp that starts there takes the URL, within two minutes. Read from the shared file only. Without it, a stored link is kept for the next org-lsp that starts, and a capture fails.

Type
string
Default
unset: none: a capture waits for an editor with org-lsp

Clocking#

org_clock_into_drawer#

Where CLOCK: lines go: true for the drawer of org_log_into_drawer (LOGBOOK when that is not a name), the name of a drawer, or false for the entry itself.

Org's option
org-clock-into-drawer
Type
boolean, string
Default
true
org_clock_into_drawer = true

org_clock_out_remove_zero_time_clocks#

Clocking out after less than a minute removes the CLOCK: line.

Org's option
org-clock-out-remove-zero-time-clocks
Type
boolean
Default
false
org_clock_out_remove_zero_time_clocks = false

org_clock_out_when_done#

Marking the clocked entry done stops the clock.

Org's option
org-clock-out-when-done
Type
boolean
Default
true
org_clock_out_when_done = true

org_clock_display_default_range#

The span whose clocks org.clock.display (C-c C-x C-d) adds up.

Org's option
org-clock-display-default-range
Type
"today" | "yesterday" | "thisweek" | "lastweek" | "thismonth" | "lastmonth" | "thisyear" | "lastyear" | "untilnow"
Default
"thisyear"
org_clock_display_default_range = "thisyear"

org_clock_idle_time#

After how many minutes without a message from the editor a clock that runs asks what to do with the idle time: keep it, subtract it (and clock out), or cancel the clock.

Org's option
org-clock-idle-time
Type
integer
Default
unset: none

org_clock_auto_clock_resolution#

Clocking in first asks about each clock left running in the open and agenda files, as org.clock.resolve does: when-no-clock-is-running when no clock runs, true always (the clock that runs too), false never. A clock found running when the server starts, or written by hand, is no clock the server ran: it is asked about.

Org's option
org-clock-auto-clock-resolution
Type
boolean, "when-no-clock-is-running"
Default
"when-no-clock-is-running"
org_clock_auto_clock_resolution = "when-no-clock-is-running"

org_clock_resolve_expert#

Ask what to do with a dangling clock or idle time with the keys in the prompt alone ([jkKtTgGSscCiq]?), without the list of what each one does.

Org's option
org-clock-resolve-expert
Type
boolean
Default
false
org_clock_resolve_expert = false

org_clock_history_length#

How many entries clocked into the clock history keeps, for org.clock.in with a count and org.clock.in.last.

Org's option
org-clock-history-length
Type
integer
Default
5
org_clock_history_length = 5

org_clock_in_resume#

Clocking into an entry whose CLOCK: line was left without an end goes on with that clock, from when it started, rather than starting a new line.

Org's option
org-clock-in-resume
Type
boolean
Default
false
org_clock_in_resume = false

org_clock_persist#

Keep the running clock and the clock history when the server stops, and take them back when it starts: true both, clock the running clock alone, history the history alone (what C-u C-c C-x C-i offers). The running clock runs again if its CLOCK: line is still open. They are kept in Emacs's own file, in its form, so Emacs and org-lsp take the clock from each other.

Org's option
org-clock-persist
Type
boolean, "clock", "history"
Default
false
org_clock_persist = false

org_clock_persist_file#

The file org_clock_persist keeps the clock in: Emacs's, org-clock-save.el in its directory.

Org's option
org-clock-persist-file
Type
string
Default
"~/.emacs.d/org-clock-save.el"
org_clock_persist_file = "~/.emacs.d/org-clock-save.el"

org_clock_persist_query_resume#

Ask before the clock the last session kept runs again (Resume clock (…)?).

Org's option
org-clock-persist-query-resume
Type
boolean
Default
true
org_clock_persist_query_resume = true

org_clock_goto_may_find_recent_task#

With no clock running, org.clock.goto goes to the entry clocked last. With false, it says No active or recent clock task.

Org's option
org-clock-goto-may-find-recent-task
Type
boolean
Default
true
org_clock_goto_may_find_recent_task = true

org_clock_clocktable_default_properties#

The parameters a new clock table gets on its #+BEGIN: line from org.clock.report (C-c C-x C-r), after :scope, as Emacs Lisp reads them (:maxlevel 3 :link t).

Org's option
org-clock-clocktable-default-properties
Type
string
Default
":maxlevel 2"
org_clock_clocktable_default_properties = ":maxlevel 2"

org_clocktable_defaults#

The parameters every clock table has unless its #+BEGIN: line gives them, as Emacs Lisp reads them. Set, it replaces Org's whole list.

Org's option
org-clocktable-defaults
Type
string
Default
unset: Org's: :maxlevel 2 :lang "en" :scope file :narrow 40! :indent t, the others nil

org_clock_clocktable_language_setup#

The words of a clock table in each language its :lang names: the language, then its words for File, L, Timestamp, Headline, Time, ALL, Total time, File time and Clock summary at. A word left out stays English. Set, it replaces Org's languages.

Org's option
org-clock-clocktable-language-setup
Type
string[][]
Default
unset: Org's: en, de, es, fr, nl, nn, pl, pt-BR and sk

org_clock_report_include_clocking_task#

A clock table counts the time of the clock that runs, for its entry, when the table covers a time (:block, :tstart and :tend) and the clock started within it.

Org's option
org-clock-report-include-clocking-task
Type
boolean
Default
false
org_clock_report_include_clocking_task = false

org_clock_rounding_minutes#

Clocking in and out happens at the multiple of this many minutes nearest now; a clock never starts later than now. Below 1, at the minute.

Org's option
org-clock-rounding-minutes
Type
number
Default
0
org_clock_rounding_minutes = 0

org_clock_continuously#

A clock starts when the last one stopped, not now.

Org's option
org-clock-continuously
Type
boolean
Default
false
org_clock_continuously = false

org_clock_total_time_cell_format#

How a clock table writes its total time and the words before it; %s is the text.

Org's option
org-clock-total-time-cell-format
Type
string
Default
"*%s*"
org_clock_total_time_cell_format = "*%s*"

org_clock_file_time_cell_format#

How a clock table over several files writes the words before a file's time; %s is the text.

Org's option
org-clock-file-time-cell-format
Type
string
Default
"*%s*"
org_clock_file_time_cell_format = "*%s*"

org_clock_in_switch_to_state#

The TODO state an entry is put in when the clock starts on it (NEXT), unless it has it already.

Org's option
org-clock-in-switch-to-state
Type
string
Default
unset: none

org_clock_out_switch_to_state#

The TODO state an entry is put in when the clock stops on it.

Org's option
org-clock-out-switch-to-state
Type
string
Default
unset: none

org_agenda_clockreport_parameter_plist#

The parameters of the clock report's table, as those of a clock table block (:maxlevel 3 :tags t); :block, :tstart, :tend and :scope are the agenda's.

Org's option
org-agenda-clockreport-parameter-plist
Type
string
Default
":link t :maxlevel 2"
org_agenda_clockreport_parameter_plist = ":link t :maxlevel 2"

org_agenda_clock_report_header#

Text on a line of its own (or lines) before the clock report.

Org's option
org-agenda-clock-report-header
Type
string
Default
unset: none

Habits#

org_modules#

Org modules to load. org-habit turns habits on: entries with the STYLE property habit and a scheduled date with a repeater (.+2d, .+2d/4d for a deadline too) show in the agenda with a graph of the days they were done. ol-man makes [[man:ls]] a link to a man page (org_man_command). org-ctags follows links to the tags of a TAGS file, as loading it and calling org-ctags-enable does (org_ctags_open_link_functions). Others are ignored.

Org's option
org-modules
Type
string[]
Default
[]
org_modules = []

org_habit_graph_column#

The column the consistency graph of a habit starts at in the agenda.

Org's option
org-habit-graph-column
Type
number
Default
40
org_habit_graph_column = 40

org_habit_preceding_days#

How many days before today a habit's graph shows.

Org's option
org-habit-preceding-days
Type
number
Default
21
org_habit_preceding_days = 21

org_habit_following_days#

How many days after today a habit's graph shows.

Org's option
org-habit-following-days
Type
number
Default
7
org_habit_following_days = 7

org_habit_show_habits#

Show habits in the agenda.

Org's option
org-habit-show-habits
Type
boolean
Default
true
org_habit_show_habits = true

org_habit_show_habits_only_for_today#

Show habits only on today's date, not on future days of the agenda.

Org's option
org-habit-show-habits-only-for-today
Type
boolean
Default
true
org_habit_show_habits_only_for_today = true

org_habit_show_all_today#

Show every habit today, even those not scheduled for today.

Org's option
org-habit-show-all-today
Type
boolean
Default
false
org_habit_show_all_today = false

org_habit_today_glyph#

The mark of today in a habit's graph.

Org's option
org-habit-today-glyph
Type
string
Default
"!"
org_habit_today_glyph = "!"

org_habit_completed_glyph#

The mark of a day a habit was done in its graph.

Org's option
org-habit-completed-glyph
Type
string
Default
"*"
org_habit_completed_glyph = "*"

org_habit_show_done_always_green#

A day a habit was done is green in its graph even when it was done late.

Org's option
org-habit-show-done-always-green
Type
boolean
Default
false
org_habit_show_done_always_green = false

org_habit_scheduled_past_days#

How many days a habit that is not done keeps showing up.

Org's option
org-habit-scheduled-past-days
Type
number
Default
unset: org_scheduled_past_days

The agenda#

org_agenda_files#

Files, directories and glob patterns (*, ?, **) the agenda is built from. ~/ is the home directory, and a directory stands for the Org files directly in it. When empty, the agenda is built from the Org files under the workspace folders (hidden directories, node_modules and target left out), or else from the Org files that are open.

Org's option
org-agenda-files
Type
string[]
Default
[]
org_agenda_files = []

org_agenda_file_regexp#

Which files of a directory in org_agenda_files are agenda files: an Emacs regular expression their names match, such as \\.txt\\' for the names that end in .txt.

Org's option
org-agenda-file-regexp
Type
string
Default
unset: the .org files whose names do not start with a dot

org_agenda_skip_unavailable_files#

Leave out the files of org_agenda_files that are not there. With false, opening an agenda view asks about each: r removes it from the list until the server starts again, anything else aborts.

Org's option
org-agenda-skip-unavailable-files
Type
boolean
Default
false
org_agenda_skip_unavailable_files = false

org_agenda_dim_blocked_tasks#

Dim the tasks of the agenda and the TODO list that their dependencies keep from being done (with org_enforce_todo_dependencies or org_enforce_todo_checkbox_dependencies); invisible leaves them out instead, except those blocked by checkboxes, which stay dimmed.

Org's option
org-agenda-dim-blocked-tasks
Type
true, false, "invisible"
Default
true
org_agenda_dim_blocked_tasks = true

org_agenda_jump_prefer_future#

How the agenda's j (org.agenda.goto.date) reads a date typed without a year or month, as org_read_date_prefer_future does for every other prompt.

Org's option
org-agenda-jump-prefer-future
Type
boolean, "time"
Default
unset: as org_read_date_prefer_future

org_agenda_span#

How much time the agenda shows.

Org's option
org-agenda-span
Type
"day", "week", "fortnight", "month", "year", or a number of days
Default
"week"
org_agenda_span = "week"

org_agenda_start_on_weekday#

The day a week or fortnight starts on; false starts it today.

Org's option
org-agenda-start-on-weekday
Type
0 to 6 (0 is Sunday), or false
Default
1
org_agenda_start_on_weekday = 1

org_deadline_warning_days#

How many days before a deadline it shows up.

Org's option
org-deadline-warning-days
Type
number
Default
14
org_deadline_warning_days = 14

org_scheduled_delay_days#

How many days after its date a scheduled entry shows up.

Org's option
org-scheduled-delay-days
Type
number
Default
0
org_scheduled_delay_days = 0

org_scheduled_past_days#

How many days a scheduled entry that is not done keeps showing up.

Org's option
org-scheduled-past-days
Type
number
Default
10000
org_scheduled_past_days = 10000

org_deadline_past_days#

How many days a missed deadline keeps showing up.

Org's option
org-deadline-past-days
Type
number
Default
10000
org_deadline_past_days = 10000

org_agenda_skip_scheduled_if_done#

Leave out scheduled entries that are done.

Org's option
org-agenda-skip-scheduled-if-done
Type
boolean
Default
false
org_agenda_skip_scheduled_if_done = false

org_agenda_skip_deadline_if_done#

Leave out deadlines of entries that are done.

Org's option
org-agenda-skip-deadline-if-done
Type
boolean
Default
false
org_agenda_skip_deadline_if_done = false

org_agenda_skip_timestamp_if_done#

Leave out timestamps of entries that are done.

Org's option
org-agenda-skip-timestamp-if-done
Type
boolean
Default
false
org_agenda_skip_timestamp_if_done = false

org_agenda_time_leading_zero#

Write times with two digits for the hour (08:00).

Org's option
org-agenda-time-leading-zero
Type
boolean
Default
false
org_agenda_time_leading_zero = false

org_agenda_timegrid_use_ampm#

Write the times of the agenda, the time grid's too, in 12-hour form (8:00am).

Org's option
org-agenda-timegrid-use-ampm
Type
boolean
Default
false
org_agenda_timegrid_use_ampm = false

org_agenda_search_headline_for_time#

Take a time in a headline (Call at 15:00) as the time of its entry.

Org's option
org-agenda-search-headline-for-time
Type
boolean
Default
true
org_agenda_search_headline_for_time = true

org_agenda_remove_times_when_in_prefix#

Take a time out of the headline when the prefix shows it; beg only one at the start of the headline.

Org's option
org-agenda-remove-times-when-in-prefix
Type
boolean, "beg"
Default
true
org_agenda_remove_times_when_in_prefix = true

org_agenda_default_appointment_duration#

Minutes an entry with a start time and no end time lasts: the agenda shows it as a range.

Org's option
org-agenda-default-appointment-duration
Type
integer
Default
unset: none

org_agenda_remove_timeranges_from_blocks#

Take a date range out of the headline of its lines.

Org's option
org-agenda-remove-timeranges-from-blocks
Type
boolean
Default
false
org_agenda_remove_timeranges_from_blocks = false

org_agenda_diary_sexp_prefix#

A regexp (Emacs's syntax): what it matches of a diary sexp's text goes in front of the line, as a scheduled date's Scheduled: does.

Org's option
org-agenda-diary-sexp-prefix
Type
string
Default
unset: none

org_agenda_show_inherited_tags#

Show the inherited tags of an entry on its agenda lines: where org_agenda_use_tag_inheritance has them (true), always, never (false), or in these kinds of views (agenda, todo, search). Sorting by tag and org_agenda_max_tags go by the tags a line shows.

Org's option
org-agenda-show-inherited-tags
Type
boolean, "always", string[]
Default
true
org_agenda_show_inherited_tags = true

org_agenda_use_tag_inheritance#

The kinds of views whose lines have inherited tags (true: all). Tags matches always have them.

Org's option
org-agenda-use-tag-inheritance
Type
boolean, string[]
Default
["todo", "search", "agenda"]
org_agenda_use_tag_inheritance = ["todo", "search", "agenda"]

org_agenda_hide_tags_regexp#

A regexp (Emacs's syntax): the tags it matches are not shown on agenda lines, but filters still see them.

Org's option
org-agenda-hide-tags-regexp
Type
string
Default
unset: none

org_agenda_include_deadlines#

Show deadlines in the agenda.

Org's option
org-agenda-include-deadlines
Type
boolean
Default
true
org_agenda_include_deadlines = true

org_agenda_skip_additional_timestamps_same_entry#

Once a timestamp of an entry has made a line for a day, leave out its other timestamps on that day.

Org's option
org-agenda-skip-additional-timestamps-same-entry
Type
boolean
Default
false
org_agenda_skip_additional_timestamps_same_entry = false

org_agenda_fontify_priorities#

Highlight the priority cookies of agenda lines (cookies), or each line from its cookie on (true; links and tags keep their own look); the highest priority shows in bold, the lowest in italic. false highlights none. Org's list of faces by priority is not read here: org_priority_faces gives them.

Org's option
org-agenda-fontify-priorities
Type
boolean, "cookies"
Default
"cookies"
org_agenda_fontify_priorities = "cookies"

org_agenda_prefer_last_repeat#

Show a repeating scheduled date, deadline or timestamp at its last repeat up to today instead of its base date, for every entry (true) or for those with one of these TODO keywords.

Org's option
org-agenda-prefer-last-repeat
Type
boolean, string[]
Default
false
org_agenda_prefer_last_repeat = false

org_agenda_skip_deadline_prewarning_if_scheduled#

For a scheduled entry, show its deadline only on its date (true), not before its scheduled date (pre-scheduled), or from N days before it (a number).

Org's option
org-agenda-skip-deadline-prewarning-if-scheduled
Type
boolean, "pre-scheduled", number
Default
false
org_agenda_skip_deadline_prewarning_if_scheduled = false

org_agenda_skip_scheduled_delay_if_deadline#

For an entry with a deadline, drop the delay of its scheduled date (--2d) (true), or keep it no later than the deadline (post-deadline). A number drops it too, as Org's code does.

Org's option
org-agenda-skip-scheduled-delay-if-deadline
Type
boolean, "post-deadline", number
Default
false
org_agenda_skip_scheduled_delay_if_deadline = false

org_agenda_skip_scheduled_if_deadline_is_shown#

Leave out a scheduled date on a day its entry's deadline shows (true), only when it was scheduled before today (not-today); repeated-after-deadline is org_agenda_skip_scheduled_repeats_after_deadline. Not for habits.

Org's option
org-agenda-skip-scheduled-if-deadline-is-shown
Type
boolean, "not-today", "repeated-after-deadline"
Default
false
org_agenda_skip_scheduled_if_deadline_is_shown = false

org_agenda_skip_scheduled_repeats_after_deadline#

Leave out the repeats of a scheduled date that come after the entry's deadline.

Org's option
org-agenda-skip-scheduled-repeats-after-deadline
Type
boolean
Default
false
org_agenda_skip_scheduled_repeats_after_deadline = false

org_agenda_skip_comment_trees#

Leave out of every view the entries of a commented subtree (COMMENT after the stars).

Org's option
org-agenda-skip-comment-trees
Type
boolean
Default
true
org_agenda_skip_comment_trees = true

org_agenda_skip_archived_trees#

Leave out of every view the entries of an archived subtree (tagged ARCHIVE), unless archives mode (v a) shows them. Org advises leaving it on and using v a instead.

Org's option
org-agenda-skip-archived-trees
Type
boolean
Default
true
org_agenda_skip_archived_trees = true

org_agenda_todo_list_sublevels#

Show in the TODO list the TODO entries below another one. Off, the list skips the subtree of each entry it shows or leaves out for a date.

Org's option
org-agenda-todo-list-sublevels
Type
boolean
Default
true
org_agenda_todo_list_sublevels = true

org_agenda_todo_ignore_with_date#

Leave out of the TODO list the entries with an active timestamp anywhere in their text, scheduled and deadline dates too.

Org's option
org-agenda-todo-ignore-with-date
Type
boolean
Default
false
org_agenda_todo_ignore_with_date = false

org_agenda_todo_ignore_scheduled#

Leave out of the TODO list the scheduled entries: all of them (true, all), those scheduled after today (future), today or before (past), or with a number N, N days from now or later (a negative N: N days ago or before).

Org's option
org-agenda-todo-ignore-scheduled
Type
boolean, "future", "past", "all", number
Default
false
org_agenda_todo_ignore_scheduled = false

org_agenda_todo_ignore_deadlines#

Leave out of the TODO list the entries with a deadline: in its warning period, that is, shown in the agenda (true, near), not yet in it (far), all of them (all), after today (future), today or before (past), or with a number as for org_agenda_todo_ignore_scheduled.

Org's option
org-agenda-todo-ignore-deadlines
Type
boolean, "near", "far", "all", "future", "past", number
Default
false
org_agenda_todo_ignore_deadlines = false

org_agenda_todo_ignore_timestamp#

Leave out of the TODO list the entries with an active timestamp that is no scheduled or deadline date, with the values of org_agenda_todo_ignore_scheduled.

Org's option
org-agenda-todo-ignore-timestamp
Type
boolean, "future", "past", "all", number
Default
false
org_agenda_todo_ignore_timestamp = false

org_agenda_todo_ignore_time_comparison_use_seconds#

Compare the dates of the org_agenda_todo_ignore_* settings with now to the second instead of by day: future is then later than now, and a number counts seconds.

Org's option
org-agenda-todo-ignore-time-comparison-use-seconds
Type
boolean
Default
false
org_agenda_todo_ignore_time_comparison_use_seconds = false

org_agenda_tags_todo_honor_ignore_options#

Have the org_agenda_todo_ignore_* settings leave entries out of tags-todo matches as well.

Org's option
org-agenda-tags-todo-honor-ignore-options
Type
boolean
Default
false
org_agenda_tags_todo_honor_ignore_options = false

org_agenda_sorting_strategy#

How the lines of a day (agenda), the TODO list (todo), a tags match (tags, tags-todo too) and a search (search) are ordered: the strategies in turn, each deciding when the ones before do not. A view without a list takes agenda's, and without that time-up, category-keep, urgency-down; one list alone is for every view. time-up~​/​-down~ the time of day; timestamp-, scheduled-, deadline-, ts- (active) and tsia- (inactive) up~​/​~down the date of that kind (in the TODO list and a tags match, the entry's); priority- the priority, urgency- the priority with how near or overdue the date is; effort-, category- (and category-keep, the order the entries come in), tag- (the last tag), todo-state- (where the keyword is in the file's list, done ones first), habit-, alpha- (the headline), stats- (the statistics cookie). user-defined-up and -down call Lisp, which the server does not run.

Org's option
org-agenda-sorting-strategy
Type
{ agenda?, todo?, tags?, search? } of string[], or string[]
Default
{ "agenda": ["habit-down", "time-up", "urgency-down", "category-keep"], "todo": ["urgency-down", "category-keep"], "tags": ["urgency-down", "category-keep"], "search": ["category-keep"] }
org_agenda_sorting_strategy = { agenda = ["habit-down", "time-up", "urgency-down", "category-keep"], todo = ["urgency-down", "category-keep"], tags = ["urgency-down", "category-keep"], search = ["category-keep"] }

org_agenda_sort_notime_is_late#

Lines without a time (or without the date a strategy sorts by) come after those with one.

Org's option
org-agenda-sort-notime-is-late
Type
boolean
Default
true
org_agenda_sort_notime_is_late = true

org_agenda_sort_noeffort_is_high#

Entries without an effort count as having the highest when sorted, filtered or limited by effort.

Org's option
org-agenda-sort-noeffort-is-high
Type
boolean
Default
true
org_agenda_sort_noeffort_is_high = true

org_agenda_max_entries#

How many entries a day of the agenda, the TODO list, a tags match or a search shows at most: one number for all, or one for each kind of view. Other lines, such as those of the time grid, go as well; with a negative number they stay.

Org's option
org-agenda-max-entries
Type
integer, or { agenda?, todo?, tags?, search? } of integers
Default
unset: no limit

org_agenda_max_todos#

How many entries with a TODO keyword a view shows at most, the other lines going as well; with a negative number, those stay.

Org's option
org-agenda-max-todos
Type
integer, or { agenda?, todo?, tags?, search? } of integers
Default
unset: no limit

org_agenda_max_tags#

How many entries with tags a view shows at most, the other lines going as well; with a negative number, those stay.

Org's option
org-agenda-max-tags
Type
integer, or { agenda?, todo?, tags?, search? } of integers
Default
unset: no limit

org_agenda_max_effort#

The most minutes of effort the entries of a view add up to: entries show while their efforts, in order, stay within it (an entry without one counts as the highest, or as -1 with org_agenda_sort_noeffort_is_high off).

Org's option
org-agenda-max-effort
Type
integer, or { agenda?, todo?, tags?, search? } of integers
Default
unset: no limit

org_agenda_show_future_repeats#

Show the future dates of repeating entries: all of them, none, or only the next.

Org's option
org-agenda-show-future-repeats
Type
boolean, "next"
Default
true
org_agenda_show_future_repeats = true

org_agenda_show_all_dates#

Show days without entries.

Org's option
org-agenda-show-all-dates
Type
boolean
Default
true
org_agenda_show_all_dates = true

org_agenda_tags_column#

Where tags are aligned in the agenda: a column (negative: where they end), or auto for the right edge of the window. With auto, the editors that tell the server how wide the agenda's window is (Neovim, Vim, Sublime Text) have the tags there, and the agenda follows the window as it is resized; the others (VS Code, Zed) have them end at column 80.

Org's option
org-agenda-tags-column
Type
number, "auto"
Default
"auto"
org_agenda_tags_column = "auto"

org_agenda_use_time_grid#

Draw the time grid.

Org's option
org-agenda-use-time-grid
Type
boolean
Default
true
org_agenda_use_time_grid = true

org_agenda_time_grid#

The time grid, as Org writes it: the days that have it (daily: a one-day agenda; weekly: every day of a longer one; today: today; require-timed: only days with an entry that has a time; remove-match: no grid line at a time an entry already has), the times of its lines (800 for 8:00), what follows a time that has no end time, and the text of a grid line.

Org's option
org-agenda-time-grid
Type
[string[], number[], string, string]
Default
[["daily", "today", "require-timed"], [800, 1000, 1200, 1400, 1600, 1800, 2000], "......", "----------------"]
org_agenda_time_grid = [["daily", "today", "require-timed"], [800, 1000, 1200, 1400, 1600, 1800, 2000], "......", "----------------"]

org_agenda_current_time_string#

The text of the line for the current time.

Org's option
org-agenda-current-time-string
Type
string
Default
"now - - - - - - - - - - - - - - - - - - - - - - - - -"
org_agenda_current_time_string = "now - - - - - - - - - - - - - - - - - - - - - - - - -"

org_agenda_show_current_time_in_grid#

Show the current time in the grid.

Org's option
org-agenda-show-current-time-in-grid
Type
boolean
Default
true
org_agenda_show_current_time_in_grid = true

org_agenda_weekend_days#

The days drawn as the weekend (0 is Sunday).

Org's option
org-agenda-weekend-days
Type
number[]
Default
[6, 0]
org_agenda_weekend_days = [6, 0]

org_agenda_start_with_log_mode#

Start the agenda in log mode, which shows what was closed and clocked each day (l toggles it).

Org's option
org-agenda-start-with-log-mode
Type
boolean
Default
false
org_agenda_start_with_log_mode = false

org_agenda_start_with_clockreport_mode#

Start the agenda with the clock report under it (R toggles it).

Org's option
org-agenda-start-with-clockreport-mode
Type
boolean
Default
false
org_agenda_start_with_clockreport_mode = false

org_agenda_start_with_archives_mode#

Start the agenda with entries in archived trees (trees; v a toggles it), or those and the files the agenda files archive to (files; v A).

Org's option
org-agenda-start-with-archives-mode
Type
"trees" | "files" | false
Default
false
org_agenda_start_with_archives_mode = false

org_agenda_log_mode_items#

What log mode shows: closed entries, clock lines and state changes.

Org's option
org-agenda-log-mode-items
Type
string[]
Default
["closed", "clock"]
org_agenda_log_mode_items = ["closed", "clock"]

org_agenda_log_mode_add_notes#

Show the note of a state change or a clock line after the headline in log mode.

Org's option
org-agenda-log-mode-add-notes
Type
boolean
Default
true
org_agenda_log_mode_add_notes = true

org_agenda_move_date_from_past_immediately_to_today#

Moving a date of the past one day later from the agenda (S-<right>) takes it to today.

Org's option
org-agenda-move-date-from-past-immediately-to-today
Type
boolean
Default
true
org_agenda_move_date_from_past_immediately_to_today = true

org_agenda_persistent_marks#

Keep the marks of a bulk action (B) after it (p in its menu toggles this for one action).

Org's option
org-agenda-persistent-marks
Type
boolean
Default
false
org_agenda_persistent_marks = false

org_agenda_show_outline_path#

As the cursor moves in the agenda, show where the entry of its line is: the file's name and the headlines above it (work.org/Projects/Report), in the echo area or the status bar. With title the file's #+TITLE: comes first instead of its name.

Org's option
org-agenda-show-outline-path
Type
boolean, "title"
Default
true
org_agenda_show_outline_path = true

org_agenda_start_with_follow_mode#

Start the agenda in follow mode, which shows the entry of the cursor's line in another window as the cursor moves (F toggles it).

Org's option
org-agenda-start-with-follow-mode
Type
boolean
Default
false
org_agenda_start_with_follow_mode = false

org_agenda_start_with_entry_text_mode#

Start the agenda with some text of each entry under its line (E toggles it).

Org's option
org-agenda-start-with-entry-text-mode
Type
boolean
Default
false
org_agenda_start_with_entry_text_mode = false

org_agenda_entry_text_maxlines#

The most lines of an entry's text E shows.

Org's option
org-agenda-entry-text-maxlines
Type
integer
Default
5
org_agenda_entry_text_maxlines = 5

org_agenda_entry_text_leaders#

What each line of an entry's text starts with in the agenda.

Org's option
org-agenda-entry-text-leaders
Type
string
Default
" > "
org_agenda_entry_text_leaders = "    > "

org_agenda_entry_text_exclude_regexps#

Emacs regexps whose matches are left out of the entry text E shows.

Org's option
org-agenda-entry-text-exclude-regexps
Type
string[]
Default
[]
org_agenda_entry_text_exclude_regexps = []

org_agenda_add_entry_text_maxlines#

The most lines of each entry's text written under its line when the agenda is written to a plain text file (C-x C-w), each after four spaces and >; 0 writes none. The text E shows is not written.

Org's option
org-agenda-add-entry-text-maxlines
Type
integer
Default
0
org_agenda_add_entry_text_maxlines = 0

org_agenda_add_entry_text_descriptive_links#

Whether links in the text org_agenda_add_entry_text_maxlines writes show as their descriptions. In Org 9.8.10 a plain text file has the links as they are either way, and so does org-lsp.

Org's option
org-agenda-add-entry-text-descriptive-links
Type
boolean
Default
true
org_agenda_add_entry_text_descriptive_links = true

org_agenda_view_columns_initially#

Show column view (through Emacs) each time an agenda view is made, as C-c C-x C-c there would.

Org's option
org-agenda-view-columns-initially
Type
boolean
Default
false
org_agenda_view_columns_initially = false

org_agenda_persistent_filter#

A new agenda view keeps the filters by tag, category, regexp and effort of the agenda still open, rather than starting without them.

Org's option
org-agenda-persistent-filter
Type
boolean
Default
false
org_agenda_persistent_filter = false

org_agenda_block_separator#

What goes between the blocks of a block agenda: one character repeated across 79 columns, a longer text as it is, or false for nothing. In a block's settings, the separator above that block.

Org's option
org-agenda-block-separator
Type
string | false
Default
"="
org_agenda_block_separator = "="

org_agenda_compact_blocks#

Leave out the separators between blocks and the header over agenda blocks.

Org's option
org-agenda-compact-blocks
Type
boolean
Default
false
org_agenda_compact_blocks = false

agenda_hide_empty_blocks#

Leave out the blocks of a block agenda that show no entries. Not in Org.

Type
boolean
Default
false
agenda_hide_empty_blocks = false

org_agenda_search_view_always_boolean#

Read every search string of the search view (s) as words that must (+word, word) or must not (-word) occur, regexps in braces ({regexp}) and "quoted phrases". Off, it is a phrase whose spaces match any whitespace, unless its first word starts with +, - or {.

Org's option
org-agenda-search-view-always-boolean
Type
boolean
Default
false
org_agenda_search_view_always_boolean = false

org_agenda_search_view_force_full_words#

The words of a Boolean search match whole words only, as a search string starting with : asks.

Org's option
org-agenda-search-view-force-full-words
Type
boolean
Default
false
org_agenda_search_view_force_full_words = false

org_agenda_search_view_max_outline_level#

The search view shows headlines down to this level, a match below one counting for the headline above: 0 for every level.

Org's option
org-agenda-search-view-max-outline-level
Type
number
Default
0
org_agenda_search_view_max_outline_level = 0

org_agenda_text_search_extra_files#

Files the search view (s) searches besides the agenda files, after them, as org_agenda_files names them. agenda-archives first adds the files the agenda files archive to. A file listed twice is searched at its last place.

Org's option
org-agenda-text-search-extra-files
Type
string[]
Default
[]
org_agenda_text_search_extra_files = []

org_agenda_prefix_format#

What comes before the headline on a line of the agenda (agenda), the TODO list (todo), tags searches (tags) and text searches (search): %c the category, %t the time, %s the leader (Scheduled: ~), ~%e the effort, %l a blank per level, %T the last tag, %b the headlines above (breadcrumbs), %i the icon (none). A width pads (%-12c on the right, %12c on the left), .N cuts, %? leaves out an empty field, and a character before the letter follows a value that is not empty (%-12:c). %(…) is Emacs Lisp, run by Emacs (the emacs option) on the entry's headline with category, extra, level … bound, as Org runs it: %(org-entry-get nil "X"), or a function of emacs_config. Without Emacs it is empty.

Org's option
org-agenda-prefix-format
Type
{ agenda?, todo?, tags?, search? }
Default
{ "agenda": " %i %-12:c%?-12t% s", "todo": " %i %-12:c", "tags": " %i %-12:c", "search": " %i %-12:c" }
org_agenda_prefix_format = { agenda = " %i %-12:c%?-12t% s", todo = " %i %-12:c", tags = " %i %-12:c", search = " %i %-12:c" }

org_agenda_todo_keyword_format#

How a TODO keyword is written in the agenda: %-4s pads it to four columns, so that the titles line up; an empty format leaves keywords out.

Org's option
org-agenda-todo-keyword-format
Type
string
Default
"%-1s"
org_agenda_todo_keyword_format = "%-1s"

org_agenda_scheduled_leaders#

The leader of a scheduled entry on its day, and on today when its day has passed (%d: the days since).

Org's option
org-agenda-scheduled-leaders
Type
string[]
Default
["Scheduled: ", "Sched.%2dx: "]
org_agenda_scheduled_leaders = ["Scheduled: ", "Sched.%2dx: "]

org_agenda_deadline_leaders#

The leader of a deadline on its day, on today before it (%d: the days left), and on today after it (%d: the days since).

Org's option
org-agenda-deadline-leaders
Type
string[]
Default
["Deadline: ", "In %3d d.: ", "%2d d. ago: "]
org_agenda_deadline_leaders = ["Deadline:  ", "In %3d d.: ", "%2d d. ago: "]

org_agenda_deadline_faces#

The look of a deadline in the agenda by the part of its warning time that has passed: the first whose part is no more than that, none past the last. The faces are Org's: org-imminent-deadline (or org-warning), org-upcoming-deadline, org-upcoming-distant-deadline; any other name is the plain look.

Org's option
org-agenda-deadline-faces
Type
[part, face][]
Default
[[1, "org-imminent-deadline"], [0.5, "org-upcoming-deadline"], [0, "org-upcoming-distant-deadline"]]
org_agenda_deadline_faces = [[1, "org-imminent-deadline"], [0.5, "org-upcoming-deadline"], [0, "org-upcoming-distant-deadline"]]

org_agenda_timerange_leaders#

The leader of a time range within a day, and of a range over days (%d: which day of it, %d: how many days).

Org's option
org-agenda-timerange-leaders
Type
string[]
Default
["", "(%d/%d): "]
org_agenda_timerange_leaders = ["", "(%d/%d): "]

org_agenda_inactive_leader#

What goes before an inactive timestamp's line, when the agenda shows them ([, v [).

Org's option
org-agenda-inactive-leader
Type
string
Default
"["
org_agenda_inactive_leader = "["

org_agenda_remove_tags#

Leave the tags out of the agenda's lines; prefix only when the prefix shows a tag (%T).

Org's option
org-agenda-remove-tags
Type
boolean, "prefix"
Default
false
org_agenda_remove_tags = false

org_stuck_projects#

What the stuck projects view (#) lists: the projects the match string finds whose subtree has no entry with one of the TODO keywords (* for any not done) or tags (* for any), and no match of the regexp.

Org's option
org-stuck-projects
Type
[string, string[], string[], string]
Default
["+LEVEL=2/-DONE", ["TODO", "NEXT", "NEXTACTION"], [], ""]
org_stuck_projects = ["+LEVEL=2/-DONE", ["TODO", "NEXT", "NEXTACTION"], [], ""]

org_agenda_breadcrumbs_separator#

What goes between the headlines of %b.

Org's option
org-agenda-breadcrumbs-separator
Type
string
Default
"->"
org_agenda_breadcrumbs_separator = "->"

org_agenda_format_date#

How the agenda writes a day, as format-time-string does: %A %d %B %Y, %a %Y-%m-%d.

Org's option
org-agenda-format-date
Type
string
Default
unset: as Wednesday 7 October 2026, the week's number added on Mondays

org_agenda_start_day#

The day the agenda starts from, as the date prompt reads it: -1d, +2d, 2026-10-01.

Org's option
org-agenda-start-day
Type
string
Default
unset: today

org_agenda_custom_commands_contexts#

Where the commands of org_agenda_custom_commands are offered, as for org_capture_templates_contexts.

Org's option
org-agenda-custom-commands-contexts
Type
object[]
Default
[]
org_agenda_custom_commands_contexts = []

org_agenda_custom_commands#

Commands of the agenda menu. Each has a key and a description, and either a type (agenda, alltodo, todo, tags or tags-todo) with a match (keywords such as NEXT|WAIT for todo, a match string such as work-home or PRIORITY="A" for tags), or blocks, a list of such views shown one after the other. header replaces a view's header (empty: none), and settings holds agenda options for the command or a block (org_agenda_span, org_agenda_start_day …). A command with only a key and a description groups the commands whose keys start with its key.

Org's option
org-agenda-custom-commands
Type
object[]
Default
[]
org_agenda_custom_commands = []

Notifications#

appt_message_warning_time#

How many minutes before an appointment (an entry of today's agenda with a time of day) its reminders start: one then, and one each appt_display_interval minutes after, as Emacs's appt.el reminds; an entry's APPT_WARNTIME property says it for that entry. As org-lsp's own, a list gives the minutes before the appointment of each reminder: [10, 0] reminds ten minutes before and when it is due. org-lsp notify reminds this way; through Emacs (Add today's appointments from the agenda files), a list stands for its largest number.

Org's option
appt-message-warning-time
Type
number, or number[]
Default
12
appt_message_warning_time = 12

appt_display_interval#

Minutes between two reminders of an appointment, from the first, appt_message_warning_time minutes before it.

Org's option
appt-display-interval
Type
number
Default
3
appt_display_interval = 3

notification_use_timestamp_warning#

As org-lsp's own, org-lsp notify also reminds of an appointment from a deadline or a timestamp as many hours before it as the timestamp's warning cookie says: once, 60 minutes before <2026-10-22 Thu 21:00 -1h>, besides the reminders of appt_message_warning_time. A scheduled date's cookie is a delay and does not count, nor do cookies in days, weeks, months or years. Emacs's appt.el reads no cookie.

Type
boolean
Default
false
notification_use_timestamp_warning = false

notification_deadline_summary_time#

The time of day, as HH:MM, at which org-lsp notify lists the deadlines the day's agenda shows that are not done: those of the day, those whose warning period has begun, and those past.

Type
string
Default
unset: no summary

notification_match#

The entries org-lsp notify reminds of: a match string of the tags view, such as +meeting|+call or -private.

Type
string
Default
unset: every entry

notification_command#

A program org-lsp notify runs for each notification, and its arguments, in which %t stands for the title, %b for the text and %% for %: ["ntfy", "publish", "--title", "%t", "mytopic", "%b"]. It runs instead of the desktop notification, unless notification_desktop is on. No shell reads it. With a placeholder of an entry (those of notification_title_format), it runs once for each appointment, with that appointment's title, text and values.

Type
string[]
Default
unset: none

notification_title_format#

The title of an appointment's notification from org-lsp notify, in which %h stands for the headline, %k its TODO keyword, %p its priority, %T its tags, %c its category, %s and %d its scheduled and deadline timestamps, %w the appointment's time, %m the minutes left, %e the effort, %f and %F the file's path and name, %l the headline's line, %a the line appt.el shows and %% %: "%k %h". Appointments due together share the first one's.

Type
string
Default
unset: the mode line of appt.el, such as Appointment in 10 minutes

notification_body_format#

The text of an appointment's notification from org-lsp notify, with the placeholders of notification_title_format: "%w %c %T". Appointments due together have a line each.

Type
string
Default
unset: %a, the line appt.el shows

notification_deadline_line_format#

A line of the deadline summary of org-lsp notify, with the placeholders of notification_title_format and %D for the agenda's leader (In 3 d.:, 2 d. ago:, Deadline:); there %a is the headline as the agenda shows it.

Type
string
Default
unset: %c: %D %a

notification_desktop#

Whether org-lsp notify shows a desktop notification: with notify-send on Linux and the other Unix systems, terminal-notifier on macOS when it is installed and osascript otherwise, PowerShell on Windows (BurntToast if it is installed).

Type
boolean
Default
unset: on unless notification_command is set

notification_icon#

The image of the desktop notifications of org-lsp notify: the path of a PNG file (~/ for the home directory), or "" for none. Unset, the logo, which it writes to org-lsp/icon.png in the user's data directory (~/.local/share on Linux). osascript shows no image: on macOS it takes terminal-notifier.

Type
string
Default
unset: the org-lsp logo

Display#

org_hide_emphasis_markers#

Hide the markers around *bold*, /italic/, _underline_, +strike-through+, =verbatim= and ~code~, as for links.

Org's option
org-hide-emphasis-markers
Type
boolean
Default
false
org_hide_emphasis_markers = false

org_fontify_emphasized_text#

Show *bold*, /italic/, _underline_, +strike-through+, =verbatim= and ~code~ in their looks. With false they look as the text around them, their markers shown.

Org's option
org-fontify-emphasized-text
Type
boolean
Default
true
org_fontify_emphasized_text = true

org_emphasis_alist#

The look of each kind of emphasis, by its marker (*, /, _, =, ~, +): a face of Org's, bold, italic, bold-italic, underline, org-code or org-verbatim, attributes as Org writes them (:weight bold :slant italic :underline t :strike-through t), or a list of them; false for none. As in Emacs, a marker left out has no look. Colors are not shown.

Org's option
org-emphasis-alist
Type
{ [marker]: face | face[] | false }
Default
unset: Org's: bold, italic, underline, org-verbatim, org-code and :strike-through t

org_hidden_keywords#

The keywords hidden before their values, such as #+TITLE: with ["title"], in editors that conceal text.

Org's option
org-hidden-keywords
Type
("title" | "subtitle" | "author" | "email" | "date")[]
Default
[]
org_hidden_keywords = []

org_hide_macro_markers#

Hide the braces of macro calls, {{{ and }}}, in editors that conceal text.

Org's option
org-hide-macro-markers
Type
boolean
Default
false
org_hide_macro_markers = false

org_entities_user#

Entities of your own, used as \name: what each is in LaTeX (and whether that needs math mode), HTML, ASCII, Latin-1 and UTF-8, as ["myarrow", "\\to", true, "&rarr;", "->", "->", "→"]. A name is letters only, and one of Org's own is replaced. The server shows them as org_pretty_entities says and completes them; Emacs exports them.

Org's option
org-entities-user
Type
[name, LaTeX, math?, HTML, ASCII, Latin-1, UTF-8][]
Default
[]
org_entities_user = []

org_pretty_entities#

Show entities (\alpha, \to) as their character (α, →): the entity is hidden as link brackets are, and its character is an inlay hint in its place.

Org's option
org-pretty-entities
Type
boolean
Default
false
org_pretty_entities = false

org_pretty_entities_include_sub_superscripts#

With org_pretty_entities, show sub- and superscripts (x^2, H_{2}O, a_{n}) raised and lowered: in Unicode (x², H₂O, aₙ) where every character has a raised or lowered form, as an inlay hint in place of the hidden text; the others are left as they are.

Org's option
org-pretty-entities-include-sub-superscripts
Type
boolean
Default
true
org_pretty_entities_include_sub_superscripts = true

org_use_sub_superscripts#

Which sub- and superscripts org_pretty_entities shows: all, only those in braces (a_{b}, "{}"), or none.

Org's option
org-use-sub-superscripts
Type
true, "{}" or false
Default
true
org_use_sub_superscripts = true

org_startup_folded#

How files show when opened: "overview" (or "fold") only the top headlines, "content" all the headlines, "show2levels" to "show5levels" the headlines down to that level, "showeverything" (or "nofold", "showall") everything. #+STARTUP: decides for a file. Unless everything shows, a subtree's VISIBILITY property (folded, children, content, all) decides for it, archived subtrees are folded, and drawers too. Folds hide whole subtrees, so where Org shows a headline's children but not its text, the text shows.

Org's option
org-startup-folded
Type
string
Default
"showeverything"
org_startup_folded = "showeverything"

org_startup_align_all_tables#

Align every table of a file when it opens (an edit of the file, as in Emacs). #+STARTUP: align and noalign decide for a file.

Org's option
org-startup-align-all-tables
Type
boolean
Default
false
org_startup_align_all_tables = false

org_startup_shrink_all_tables#

Shrink the columns of every table that have a width cookie (<10>) when a file opens. #+STARTUP: shrink decides for a file. Shrunk fields show their first characters and …, in editors that can hide text.

Org's option
org-startup-shrink-all-tables
Type
boolean
Default
false
org_startup_shrink_all_tables = false

org_cycle_hide_block_startup#

Fold blocks when a file opens folded (org_startup_folded). #+STARTUP: hideblocks and nohideblocks decide for a file.

Org's option
org-cycle-hide-block-startup
Type
boolean
Default
false
org_cycle_hide_block_startup = false

org_cycle_hide_drawer_startup#

Fold drawers when a file opens folded (org_startup_folded).

Org's option
org-cycle-hide-drawer-startup
Type
boolean
Default
true
org_cycle_hide_drawer_startup = true

org_cycle_open_archived_trees#

Leave archived subtrees open when a file opens folded (org_startup_folded).

Org's option
org-cycle-open-archived-trees
Type
boolean
Default
false
org_cycle_open_archived_trees = false

org_adapt_indentation#

Indent the lines of an entry past its headline's stars: true for all of them, "headline-data" for the planning line, drawers and clock lines right below the headline. Applies to new lines, to re-indenting (range formatting) and to what commands write.

Org's option
org-adapt-indentation
Type
boolean | "headline-data"
Default
false
org_adapt_indentation = false

org_image_actual_width#

How wide the image of a link shows: true at its own width; a number, that many pixels; false or a list of one number, the :width of the paragraph's #+ATTR_ORG: or else of another #+ATTR_…: (pixels, 50% or a fraction up to 2 of the text's width, t for its own width), else the list's number. An entry's ORG-IMAGE-ACTUAL-WIDTH property decides for its own text.

Org's option
org-image-actual-width
Type
boolean, number, or [number]
Default
true
org_image_actual_width = true

org_image_max_width#

How wide at most an image shown at its own width is: "fill-column", 70 columns; "window", the window's width; an integer, that many pixels; a float, that part of the window's width; null for no limit.

Org's option
org-image-max-width
Type
"fill-column", "window", number, or null
Default
"fill-column"
org_image_max_width = "fill-column"

Show the images of links to image files in place when a file opens, as C-c C-x C-v (org.link.preview) shows them. #+STARTUP: inlineimages (or linkpreviews) and noinlineimages decide for a file. Editors that can show images: Neovim from 0.13 (vim.ui.img), in a terminal with the Kitty graphics protocol.

Org's option
org-startup-with-link-previews
Type
boolean
Default
false
org_startup_with_link_previews = false

org_startup_with_latex_preview#

Show the LaTeX fragments as images when a file opens, as C-c C-x C-l (org.latex.preview) shows them, made by Emacs. #+STARTUP: latexpreview and nolatexpreview decide for a file.

Org's option
org-startup-with-latex-preview
Type
boolean
Default
false
org_startup_with_latex_preview = false

org_startup_indented#

Show files indented by level without changing them (org-indent-mode): the text under a headline lines up with its title, and leading stars are hidden. #+STARTUP: indent and noindent decide for a file, and org.indent.mode turns it on and off. It turns org_adapt_indentation off in such files, unless that is "headline-data". The lines a long line wraps into go on under its text, a headline's title or an item's text (wrap-prefix) in Neovim and Vim, without the prefix; under the prefix in Zed and Helix.

Org's option
org-startup-indented
Type
boolean
Default
false
org_startup_indented = false

org_startup_numerated#

Number the headlines of files (org-num-mode): 1, 1.1, 1.2~​… after the stars, shown as inlay hints without changing the file. ~#+STARTUP: num and nonum decide for a file, and org.num.mode turns it on and off.

Org's option
org-startup-numerated
Type
boolean
Default
false
org_startup_numerated = false

org_hide_leading_stars#

Hide all the stars of a headline but the last; they keep their place. #+STARTUP: hidestars and showstars decide for a file.

Org's option
org-hide-leading-stars
Type
boolean
Default
false
org_hide_leading_stars = false

org_indent_mode_turns_on_hiding_stars#

Where org_startup_indented (or #+STARTUP: indent) shows a file indented, hide the leading stars too, whatever org_hide_leading_stars says.

Org's option
org-indent-mode-turns-on-hiding-stars
Type
boolean
Default
true
org_indent_mode_turns_on_hiding_stars = true

org_indent_mode_turns_off_org_adapt_indentation#

Where a file shows indented, org_adapt_indentation is off (unless it is headline-data): new and moved text is not indented to its headline.

Org's option
org-indent-mode-turns-off-org-adapt-indentation
Type
boolean
Default
true
org_indent_mode_turns_off_org_adapt_indentation = true

org_indent_indentation_per_level#

How many columns a file shown indented moves each level of headlines and their text in; 0 shows them as they are.

Org's option
org-indent-indentation-per-level
Type
integer
Default
2
org_indent_indentation_per_level = 2

org_fontify_done_headline#

Show a headline marked done in the look of done headlines past its keyword (org-headline-done).

Org's option
org-fontify-done-headline
Type
boolean
Default
true
org_fontify_done_headline = true

org_fontify_todo_headline#

Show a headline marked with a keyword not done in the look of TODO headlines past its keyword (org-headline-todo, the token modifier todo).

Org's option
org-fontify-todo-headline
Type
boolean
Default
false
org_fontify_todo_headline = false

org_fontify_quote_and_verse_blocks#

Show the lines inside quote and verse blocks in their own look (org-quote, org-verse: the token types quote and verse).

Org's option
org-fontify-quote-and-verse-blocks
Type
boolean
Default
false
org_fontify_quote_and_verse_blocks = false

org_fontify_whole_heading_line#

Show the look of a headline's level past the end of its text, to the edge of the window: for looks with a background. Editors that can show it: Neovim, Vim and VS Code (org-lsp/lineHighlights, VS Code's colors org.headlineLevel1Background and on).

Org's option
org-fontify-whole-heading-line
Type
boolean
Default
false
org_fontify_whole_heading_line = false

org_ellipsis#

What a closed fold shows after its first line, such as " ▾", in the highlight group OrgLspEllipsis (Neovim). Editors that can show it: Neovim and Vim.

Org's option
org-ellipsis
Type
string
Default
unset: the standard three dots, ...

org_bullets_mode#

org-bullets: the last star of each headline shows as a bullet, those of org_bullets_bullet_list by level, and the stars before it are hidden, as with org_hide_leading_stars.

Org's option
org-bullets-mode
Type
boolean
Default
false
org_bullets_mode = false

org_bullets_bullet_list#

The bullets of org_bullets_mode, one a level, repeating after the last.

Org's option
org-bullets-bullet-list
Type
string[]
Default
["◉", "○", "✸", "✿"]
org_bullets_bullet_list = ["◉", "○", "✸", "✿"]

org_bullets_list_bullet#

What org_bullets_mode shows in place of the -, + or * of an item, as org-bullets.nvim does; false leaves them as they are.

Type
false, or a string
Default
"•"
org_bullets_list_bullet = "•"

org_bullets_checkboxes#

What org_bullets_mode shows between the brackets of a checkbox, [ ], [-] and [X], as org-bullets.nvim does; false leaves them as they are. A state left out keeps its default.

Type
false, or { todo, half, done }
Default
{ "todo": " ", "half": "-", "done": "✓" }
org_bullets_checkboxes = { todo = " ", half = "-", done = "✓" }

Source blocks and tangling#

org_src_lang_modes#

The major mode, without -mode, of a language of source blocks, over Org's own (elisp → emacs-lisp, sh → sh): { "ipython": "python" }. Neovim and Vim color the code of a block in the language of its mode (org-lsp/codeBlocks), by their name for it (emacs-lisp → elisp, sh → bash); Emacs, where it edits or exports a block, takes it too.

Org's option
org-src-lang-modes
Type
{ [language]: mode }
Default
{}
org_src_lang_modes = {}

org_src_preserve_indentation#

Leave the code of source blocks as it is indented when re-indenting.

Org's option
org-src-preserve-indentation
Type
boolean
Default
false
org_src_preserve_indentation = false

org_babel_tangle_lang_exts#

By language, the extension of the file :tangle yes writes its blocks to, before Org's own (emacs-lisp → el): { "python": "py" }. A language without one gives its name.

Org's option
org-babel-tangle-lang-exts
Type
object
Default
{}
org_babel_tangle_lang_exts = {}

Whether the link comments of tangled files (:comments link) point back to the Org file by a relative path; with false by its whole path.

Org's option
org-babel-tangle-use-relative-file-links
Type
boolean
Default
true
org_babel_tangle_use_relative_file_links = true

org_babel_tangle_comment_format_beg#

The comment before a tangled block (:comments link): %link the link back to it, %source-name its name, %file the Org file, %start-line the line its code starts on.

Org's option
org-babel-tangle-comment-format-beg
Type
string
Default
"[[%link][%source-name]]"
org_babel_tangle_comment_format_beg = "[[%link][%source-name]]"

org_babel_tangle_comment_format_end#

The comment after a tangled block, with the keys of org_babel_tangle_comment_format_beg.

Org's option
org-babel-tangle-comment-format-end
Type
string
Default
"%source-name ends here"
org_babel_tangle_comment_format_end = "%source-name ends here"

org_babel_tangle_uncomment_comments#

Write the comments of tangled blocks as they are: not commented, and no line break after them.

Org's option
org-babel-tangle-uncomment-comments
Type
boolean
Default
false
org_babel_tangle_uncomment_comments = false

org_babel_process_comment_text#

The function the Org text of :comments org goes through: org-remove-indentation takes its common indentation away, identity leaves it; Emacs tangles with any other.

Org's option
org-babel-process-comment-text
Type
string
Default
"org-remove-indentation"
org_babel_process_comment_text = "org-remove-indentation"

org_babel_tangle_default_file_mode#

In octal, the mode a symbolic :tangle-mode (u+x) changes.

Org's option
org-babel-tangle-default-file-mode
Type
string
Default
"644"
org_babel_tangle_default_file_mode = "644"

org_babel_tangle_remove_file_before_write#

Whether a file tangling writes again is deleted first: true always (a link to it becomes a file of its own), false never (a read-only file refuses), "auto" when it is read-only.

Org's option
org-babel-tangle-remove-file-before-write
Type
true, false, "auto"
Default
"auto"
org_babel_tangle_remove_file_before_write = "auto"

org_babel_noweb_wrap_start#

What opens a Noweb reference in a source block (<<name>>).

Org's option
org-babel-noweb-wrap-start
Type
string
Default
"<<"
org_babel_noweb_wrap_start = "<<"

org_babel_noweb_wrap_end#

What closes a Noweb reference.

Org's option
org-babel-noweb-wrap-end
Type
string
Default
">>"
org_babel_noweb_wrap_end = ">>"

org_src_content_indentation#

How far code is indented past its source block: when re-indenting, and when the code of a block edited in a file of its own (C-c ') is written back. Formerly org_edit_src_content_indentation, which is still read.

Org's option
org-src-content-indentation
Type
number
Default
2
org_src_content_indentation = 2

org-super-agenda#

org_super_agenda_mode#

org-super-agenda: show the lines of the agenda's views in the groups of org_super_agenda_groups, each under a header. Off, the groups are not used.

Org's option
org-super-agenda-mode
Type
boolean
Default
false
org_super_agenda_mode = false

org_super_agenda_groups#

org-super-agenda's groups, in turn taking the lines they select: each an object of selectors and their arguments in Emacs's order, { name = "Today", time-grid = true }, or a list of them in turn; true is t, false is nil (and for name, none: no header). The lines no group takes come last, under org_super_agenda_unmatched_name. In a custom command's settings, the groups of that command or block.

Org's option
org-super-agenda-groups
Type
object[]
Default
[]
org_super_agenda_groups = []

org_super_agenda_unmatched_name#

The header of the lines no group takes.

Org's option
org-super-agenda-unmatched-name
Type
string
Default
"Other items"
org_super_agenda_unmatched_name = "Other items"

org_super_agenda_unmatched_order#

Where the lines no group takes come among the groups: groups show lowest order first.

Org's option
org-super-agenda-unmatched-order
Type
integer
Default
99
org_super_agenda_unmatched_order = 99

org_super_agenda_header_separator#

What goes before each header: text, or one character repeated across the window, then a newline.

Org's option
org-super-agenda-header-separator
Type
string
Default
"\n"
org_super_agenda_header_separator = "\n"

org_super_agenda_header_prefix#

What each header starts with.

Org's option
org-super-agenda-header-prefix
Type
string
Default
" "
org_super_agenda_header_prefix = " "

org_super_agenda_final_group_separator#

What goes after the last group: text put at the end of its last line, or one character repeated across the window on a line of its own.

Org's option
org-super-agenda-final-group-separator
Type
string
Default
""
org_super_agenda_final_group_separator = ""

org_super_agenda_date_format#

The headers of the groups of auto-planning and auto-ts, as format-time-string writes dates.

Org's option
org-super-agenda-date-format
Type
string
Default
"%e %B %Y"
org_super_agenda_date_format = "%e %B %Y"

org_super_agenda_hide_empty_groups#

Leave out the headers of groups whose lines the agenda's filters all hide.

Org's option
org-super-agenda-hide-empty-groups
Type
boolean
Default
false
org_super_agenda_hide_empty_groups = false

org_super_agenda_keep_order#

Sort the lines of each group again, as the view sorts its lines: a group of several selectors puts the lines of its first selector first.

Org's option
org-super-agenda-keep-order
Type
boolean
Default
false
org_super_agenda_keep_order = false

org_super_agenda_group_property_name#

The property auto-group groups lines by.

Org's option
org-super-agenda-group-property-name
Type
string
Default
"agenda-group"
org_super_agenda_group_property_name = "agenda-group"

org_super_agenda_properties_inherit#

Look for the properties of property, auto-property and auto-group in the entries above too.

Org's option
org-super-agenda-properties-inherit
Type
boolean
Default
true
org_super_agenda_properties_inherit = true

org-roam#

org_roam_enabled#

org-roam: the files of org_roam_directory are a network of notes, whose nodes (files and entries with an ID) are found, linked to and made with the org.roam.* commands. Off, those commands only say so.

Type
boolean
Default
false
org_roam_enabled = false

org_roam_directory#

The directory of org-roam's files, in all its subdirectories. ~/ is the home directory.

Org's option
org-roam-directory
Type
string
Default
"~/org-roam/"
org_roam_directory = "~/org-roam/"

org_roam_file_extensions#

The extensions of org-roam's files; each may be followed by .gpg or .age, which the server cannot read.

Org's option
org-roam-file-extensions
Type
string[]
Default
["org"]
org_roam_file_extensions = ["org"]

org_roam_file_exclude_regexp#

Emacs regexps for the files that are not org-roam's, matched against their names relative to org_roam_directory; the default leaves out attachments.

Org's option
org-roam-file-exclude-regexp
Type
string or string[]
Default
["data/"]
org_roam_file_exclude_regexp = ["data/"]

org_roam_node_display_template#

How a node is offered: ${field} for its title, tags, todo, file, olp, aliases and the other fields of org-roam-node, ${field:N} in N columns, ${field:*} in what is left of the window's 79 columns.

Org's option
org-roam-node-display-template
Type
string
Default
"${title}"
org_roam_node_display_template = "${title}"

org_roam_node_formatter#

The description of a link org.roam.node.insert makes, a template as org_roam_node_display_template is (${title} (${file})); empty for the node's title.

Org's option
org-roam-node-formatter
Type
string
Default
""
org_roam_node_formatter = ""

Where else org-roam finds links than where Org does: in property drawers (node-property) and keyword lines (keyword).

Org's option
org-roam-db-extra-links-elements
Type
array
Default
["node-property", "keyword"]
org_roam_db_extra_links_elements = ["node-property", "keyword"]

By node-property and keyword, the properties and keywords whose links are not links, in any case. A list given replaces the default one.

Org's option
org-roam-db-extra-links-exclude-keys
Type
object
Default
{ "node-property": ["ROAM_REFS"], "keyword": ["transclude"] }
org_roam_db_extra_links_exclude_keys = { node-property = ["ROAM_REFS"], keyword = ["transclude"] }

org_roam_graph_executable#

The Graphviz program that draws org.roam.graph's graph, found on PATH or a path.

Org's option
org-roam-graph-executable
Type
string
Default
"dot"
org_roam_graph_executable = "dot"

org_roam_graph_viewer#

The program that shows the graph, given its file.

Org's option
org-roam-graph-viewer
Type
string
Default
unset: the editor's: it opens the file as the system does

org_roam_graph_filetype#

What Graphviz draws the graph as (its -T): svg, png, ~pdf~​…

Org's option
org-roam-graph-filetype
Type
string
Default
"svg"
org_roam_graph_filetype = "svg"

org_roam_graph_extra_config#

Graphviz's attributes of the graph, in their order: { "rankdir": "LR" }.

Org's option
org-roam-graph-extra-config
Type
object
Default
{}
org_roam_graph_extra_config = {}

org_roam_graph_edge_extra_config#

Graphviz's attributes of the links: { "dir": "back" }.

Org's option
org-roam-graph-edge-extra-config
Type
object
Default
{}
org_roam_graph_edge_extra_config = {}

org_roam_graph_node_extra_config#

Graphviz's attributes of the nodes, by the type of the link to them: id for org-roam's nodes, https for the web pages linked to.

Org's option
org-roam-graph-node-extra-config
Type
object
Default
{ "id": { "style": "bold,rounded,filled", "fillcolor": "#EEEEEE", "color": "#C9C9C9", "fontcolor": "#111111" }, "http": { "style": "rounded,filled", "fillcolor": "#EEEEEE", "color": "#C9C9C9", "fontcolor": "#0A97A6" }, "https": { "style": "rounded,filled", "fillcolor": "#EEEEEE", "color": "#C9C9C9", "fontcolor": "#0A97A6" } }
org_roam_graph_node_extra_config = { id = { style = "bold,rounded,filled", fillcolor = "#EEEEEE", color = "#C9C9C9", fontcolor = "#111111" }, http = { style = "rounded,filled", fillcolor = "#EEEEEE", color = "#C9C9C9", fontcolor = "#0A97A6" }, https = { style = "rounded,filled", fillcolor = "#EEEEEE", color = "#C9C9C9", fontcolor = "#0A97A6" } }

The types of links the graph leaves out.

Org's option
org-roam-graph-link-hidden-types
Type
string[]
Default
["file"]
org_roam_graph_link_hidden_types = ["file"]

org_roam_graph_max_title_length#

The width a title takes in the graph, at most.

Org's option
org-roam-graph-max-title-length
Type
integer
Default
100
org_roam_graph_max_title_length = 100

org_roam_graph_shorten_titles#

What becomes of a title wider than org_roam_graph_max_title_length: cut with ... (truncate), over lines (wrap), or nothing (false).

Org's option
org-roam-graph-shorten-titles
Type
"truncate", "wrap", false
Default
"truncate"
org_roam_graph_shorten_titles = "truncate"

org_roam_extract_new_file_path#

The file org.roam.extract offers for a node, relative to org_roam_directory: %<…> is the time as format-time-string writes it, ${title}, ${slug} and ${id} the node's.

Org's option
org-roam-extract-new-file-path
Type
string
Default
"%<%Y%m%d%H%M%S>-${slug}.org"
org_roam_extract_new_file_path = "%<%Y%m%d%H%M%S>-${slug}.org"

Turn the roam: links of org-roam's files into id: links to their nodes as the files are saved, and as a link is followed.

Org's option
org-roam-link-auto-replace
Type
boolean
Default
true
org_roam_link_auto_replace = true

org_roam_completion_everywhere#

In org-roam's files, offer the titles of the nodes for the word at the cursor, not only in a link; the one picked becomes a link to its node.

Org's option
org-roam-completion-everywhere
Type
boolean
Default
false
org_roam_completion_everywhere = false

org_roam_mode_sections#

The sections of the org-roam buffer, in turn: backlinks (the nodes that link to the node), reflinks (those that link to or cite its references) and unlinked-references (the places that name it without a link, found by the server itself).

Org's option
org-roam-mode-sections
Type
string[]
Default
["backlinks", "reflinks"]
org_roam_mode_sections = ["backlinks", "reflinks"]

org_roam_capture_templates#

The templates of new nodes, as org_capture_templates writes them, with org-roam's targets: file and a path, file+head, a path and the text a new file starts with, file+olp, a path and the headlines of an outline path, file+head+olp, both, and node and the title, alias or ID of a node. The path, relative to org_roam_directory, and the texts may have ${title}, ${slug}, ${id} and ${name}, which asks for name (${name=default} starts the answer with default), besides the escapes of org_capture_templates. unnarrowed shows the whole file in the capture buffer.

Org's option
org-roam-capture-templates
Type
object[]
Default
[{ "key": "d", "description": "default", "type": "plain", "target": ["file+head", "%<%Y%m%d%H%M%S>-${slug}.org", "#+title: ${title}\n"], "template": "%?", "unnarrowed": true }]
org_roam_capture_templates = [{ key = "d", description = "default", type = "plain", target = ["file+head", "%<%Y%m%d%H%M%S>-${slug}.org", "#+title: ${title}\n"], template = "%?", unnarrowed = true }]

org_roam_dailies_directory#

Where the daily notes are, relative to org_roam_directory.

Org's option
org-roam-dailies-directory
Type
string
Default
"daily/"
org_roam_dailies_directory = "daily/"

org_roam_dailies_capture_templates#

The templates of the daily notes, as org_roam_capture_templates writes them, with paths relative to org_roam_dailies_directory; %<…> is the note's day.

Org's option
org-roam-dailies-capture-templates
Type
object[]
Default
[{ "key": "d", "description": "default", "type": "entry", "target": ["file+head", "%<%Y-%m-%d>.org", "#+title: %<%Y-%m-%d>\n"], "template": "* %?" }]
org_roam_dailies_capture_templates = [{ key = "d", description = "default", type = "entry", target = ["file+head", "%<%Y-%m-%d>.org", "#+title: %<%Y-%m-%d>\n"], template = "* %?" }]

org-journal#

org_journal_enabled#

org-journal: a journal in org_journal_dir, a file a day (or week, month, year), written with the org.journal.* commands. Off, those commands only say so.

Type
boolean
Default
false
org_journal_enabled = false

org_journal_dir#

The directory of the journal's files. ~/ is the home directory.

Org's option
org-journal-dir
Type
string
Default
"~/Documents/journal/"
org_journal_dir = "~/Documents/journal/"

org_journal_file_type#

A file a day (daily), week (weekly), month (monthly) or year (yearly); but daily, each entry has its date in a CREATED property.

Org's option
org-journal-file-type
Type
string
Default
"daily"
org_journal_file_type = "daily"

org_journal_start_on_weekday#

The day a weekly file starts on: 1 is Monday, 7 Sunday.

Org's option
org-journal-start-on-weekday
Type
number
Default
1
org_journal_start_on_weekday = 1

org_journal_file_format#

The names of the files, as format-time-string writes the date their entries start on: with %Y, %m and %d (a yearly file needs only %Y, a monthly one %Y and %m). A name without .org is an Org file to org-journal, but not to most editors.

Org's option
org-journal-file-format
Type
string
Default
"%Y%m%d"
org_journal_file_format = "%Y%m%d"

org_journal_date_format#

The date of an entry, after org_journal_date_prefix, as format-time-string writes it, in the C locale: %x is 10/09/26.

Org's option
org-journal-date-format
Type
string
Default
"%A, %x"
org_journal_date_format = "%A, %x"

org_journal_date_prefix#

What comes before the date of an entry: a headline, or ~#+title: ~ in a daily file.

Org's option
org-journal-date-prefix
Type
string
Default
"* "
org_journal_date_prefix = "* "

org_journal_time_format#

The time of a new entry of the day, as format-time-string writes it; empty for none.

Org's option
org-journal-time-format
Type
string
Default
"%R "
org_journal_time_format = "%R "

org_journal_time_format_post_midnight#

The time of an entry made after midnight while it is still yesterday (org_extend_today_until); empty for org_journal_time_format.

Org's option
org-journal-time-format-post-midnight
Type
string
Default
""
org_journal_time_format_post_midnight = ""

org_journal_time_prefix#

What comes before the time of an entry: its stars give its level.

Org's option
org-journal-time-prefix
Type
string
Default
"** "
org_journal_time_prefix = "** "

org_journal_hide_entries_p#

Fold all but the new entry.

Org's option
org-journal-hide-entries-p
Type
boolean
Default
true
org_journal_hide_entries_p = true

org_journal_follow_mode#

In the calendar (org.goto.calendar), the entry of the day ] and [ move to shows in another window.

Org's option
org-journal-follow-mode
Type
boolean
Default
false
org_journal_follow_mode = false

org_journal_find_file_fn#

Where a new entry and today's file (org.journal.open.current) show: in another window, or ("find-file") in the window of the command.

Org's option
org-journal-find-file-fn
Type
"find-file-other-window", "find-file"
Default
"find-file-other-window"
org_journal_find_file_fn = "find-file-other-window"

org_journal_carryover_items#

The items of the entry before that move to today's, with the headlines above them: a match of the tags view (m); empty for none.

Org's option
org-journal-carryover-items
Type
string
Default
"TODO=\"TODO\""
org_journal_carryover_items = "TODO=\"TODO\""

org_journal_skip_carryover_drawers#

Drawers left out of the items carried over.

Org's option
org-journal-skip-carryover-drawers
Type
string[]
Default
[]
org_journal_skip_carryover_drawers = []

org_journal_carryover_delete_empty_journal#

What happens to an entry or file left empty by the carryover: never deleted, always, or ask.

Org's option
org-journal-carryover-delete-empty-journal
Type
string
Default
"never"
org_journal_carryover_delete_empty_journal = "never"

org_journal_file_header#

What a new file starts with, as format-time-string writes it: #+title: Journal %Y.

Org's option
org-journal-file-header
Type
string
Default
""
org_journal_file_header = ""

org_journal_created_property_timestamp_format#

The date in the CREATED property of an entry of a file that is not daily.

Org's option
org-journal-created-property-timestamp-format
Type
string
Default
"%Y%m%d"
org_journal_created_property_timestamp_format = "%Y%m%d"

org_journal_scheduled_string#

What comes before the timestamp of an entry for a day to come (org.journal.new.scheduled.entry).

Org's option
org-journal-scheduled-string
Type
string
Default
""
org_journal_scheduled_string = ""

org_journal_enable_encryption#

Tag the date of a new entry with crypt, for org-crypt to encrypt (org.crypt.encrypt.all, or as the file is saved with org-crypt-use-before-save-magic in the Emacs configuration).

Org's option
org-journal-enable-encryption
Type
boolean
Default
false
org_journal_enable_encryption = false

org_journal_enable_agenda_integration#

Add the journal's files of today and the days to come to the agenda's files.

Org's option
org-journal-enable-agenda-integration
Type
boolean
Default
false
org_journal_enable_agenda_integration = false

org_journal_search_result_date_format#

The date of each result of a search of the journal, as format-time-string writes it.

Org's option
org-journal-search-result-date-format
Type
string
Default
"%A, %x"
org_journal_search_result_date_format = "%A, %x"

org_journal_search_results_order_by#

The order of the results of a search of the journal: asc, the first day first, or desc, the last.

Org's option
org-journal-search-results-order-by
Type
string
Default
"asc"
org_journal_search_results_order_by = "asc"

Editing and motion#

org_M_RET_may_split_line#

Inserting a heading, an item or a table row (M-RET) in the middle of a line splits it, the rest going to the new one; false: it goes in after the line. One by context: { "headline": false, "item": true, "table": true }, default for those not named.

Org's option
org-M-RET-may-split-line
Type
boolean, object
Default
true
org_M_RET_may_split_line = true

org_blank_before_new_entry#

Whether a new heading (heading) and a new item (plain_list_item) get an empty line before them: true, false, or "auto", as the headings or items around them have.

Org's option
org-blank-before-new-entry
Type
object
Default
unset: auto for both

org_insert_heading_respect_content#

M-RET and M-S-RET outside lists put the new heading after the subtree, as C-RET does.

Org's option
org-insert-heading-respect-content
Type
boolean
Default
false
org_insert_heading_respect_content = false

org_special_ctrl_a_e#

How C-a and C-e (org.beginning.of.line, org.end.of.line) move on a headline or an item: true to the start of the headline's title, after the stars, TODO keyword and priority, or after the item's bullet and check-box, and to the end of the title, before the tags; the same key again to the line's own start or end. reversed goes to the line's start or end first, and to those places on the same key right after. A pair, as [true, false], sets C-a and C-e apart. With false the key keeps the editor's own meaning.

Org's option
org-special-ctrl-a/e
Type
false, true, "reversed", [C-a, C-e]
Default
false
org_special_ctrl_a_e = false

org_sparse_tree_open_archived_trees#

A sparse tree (C-c /, and a link's /regexp/) shows its matches in archived subtrees (tagged ARCHIVE); with false those subtrees stay folded under their headline.

Org's option
org-sparse-tree-open-archived-trees
Type
boolean
Default
false
org_sparse_tree_open_archived_trees = false

Whether a sparse tree (C-c /, and a link's /regexp/) ignores case; "smart" ignores it unless what is searched for has an upper-case letter.

Org's option
org-occur-case-fold-search
Type
true, false, "smart"
Default
true
org_occur_case_fold_search = true

org_highlight_sparse_tree_matches#

Highlight the matches of a sparse tree (C-c /, and a link's /regexp/) until the text changes; with false, only their lines show.

Org's option
org-highlight-sparse-tree-matches
Type
boolean
Default
true
org_highlight_sparse_tree_matches = true

org_remove_highlights_with_change#

The highlights of a sparse tree (C-c / by a regexp, TODO keywords or dates, and a link's /regexp/) and the times of C-c C-x C-d go at the next change of the text; with false they stay until C-c C-c. Those of a sparse tree by tags or a property always stay, as in Emacs.

Org's option
org-remove-highlights-with-change
Type
boolean
Default
true
org_remove_highlights_with_change = true

org_sparse_tree_default_date_type#

The timestamps the date sparse trees (C-c / b, a, D) look at first: null for scheduled and deadline dates, or one kind; c in the menu turns to the next kind.

Org's option
org-sparse-tree-default-date-type
Type
null, "all", "active", "inactive", "scheduled", "deadline", "closed"
Default
null

org_yank_adjusted_subtrees#

C-y (org.yank, Emacs keys) of one or more subtrees at the start of a line, or after the stars of an otherwise empty headline, pastes them as org.paste.subtree does: at the level of the headlines around them. Anything else is the editor's own paste.

Org's option
org-yank-adjusted-subtrees
Type
boolean
Default
false
org_yank_adjusted_subtrees = false

org_yank_folded_subtrees#

C-y (org.yank, Emacs keys) of one or more subtrees at the start of a line folds them, unless that would hide text after them (Inserted text not folded because that would swallow text), and leaves the cursor on the line after them. With false (and org_yank_adjusted_subtrees off) it is the editor's own paste.

Org's option
org-yank-folded-subtrees
Type
boolean
Default
true
org_yank_folded_subtrees = true

org_allow_promoting_top_level_subtree#

Promoting a headline of level 1 makes it a comment line: # ~ in place of ~* ~, its children a level up with a subtree's promotion. With ~false it is an error.

Org's option
org-allow-promoting-top-level-subtree
Type
boolean
Default
false
org_allow_promoting_top_level_subtree = false

org_odd_levels_only#

Only odd levels: *, ***, *****, each counted as the next level. Promoting and demoting go two stars at a time, and a headline is colored and matched (LEVEL) by the level it counts as. #+STARTUP: odd and oddeven set it for a file.

Org's option
org-odd-levels-only
Type
boolean
Default
false
org_odd_levels_only = false

org_inlinetask_min_level#

A headline of at least this many stars (twice as many less one with org_odd_levels_only) is an inline task: a task inside the text of its entry, closed by a line of as many stars and END. It is no part of the outline: it has no subtree, the outline and the motion between headings pass it, and it folds its text up to its END line. false: there are no inline tasks, as in Emacs before org-inlinetask is loaded.

Org's option
org-inlinetask-min-level
Type
number, false
Default
15
org_inlinetask_min_level = 15

org_inlinetask_show_first_star#

The stars of an inline task but the last two are hidden, as org_hide_leading_stars hides those of a headline; with true none are.

Org's option
org-inlinetask-show-first-star
Type
boolean
Default
false
org_inlinetask_show_first_star = false

org_inlinetask_default_state#

The TODO keyword of a new inline task (org.inlinetask.insert).

Org's option
org-inlinetask-default-state
Type
string
Default
unset: no keyword

org_support_shift_select#

Where Shift and the arrows select text, as they do in the editor, instead of running Org's commands (S-<left> and its kin, C-S-<left> and C-S-<right>): always everywhere but on a timestamp and the #+BEGIN: line of a clock table; true everywhere but there, on headlines, list items' bullets, property lines and tables; false nowhere, Org's commands wherever they apply. With text selected, always and true extend it. Emacs's default is false; org-lsp's is always, as editors select with these keys.

Org's option
org-support-shift-select
Type
"always", true, false
Default
"always"
org_support_shift_select = "always"

org_special_ctrl_o#

org.open.line (C-o) in a table inserts a row above; with false it opens a line there too.

Org's option
org-special-ctrl-o
Type
boolean
Default
true
org_special_ctrl_o = true

org_special_ctrl_k#

C-k (org.kill.line) on a headline kills the text to the tags, and the tags when the cursor is past the title; at the start of the line, the whole line. With false the key keeps the editor's own meaning, but on a line a closed fold starts on (see org_ctrl_k_protect_subtree).

Org's option
org-special-ctrl-k
Type
boolean
Default
false
org_special_ctrl_k = false

org_ctrl_k_protect_subtree#

C-k (org.kill.line) on a line a closed fold starts on (a headline's only from its start with org_special_ctrl_k) kills what the fold hides with the line, as Emacs's kill-line does: true asks first (Kill hidden subtree along with headline?), "error" refuses (‘C-k’ aborted as it would kill a hidden subtree), false kills. Needs an editor that says which folds are closed (not VS Code).

Org's option
org-ctrl-k-protect-subtree
Type
false, true, "error"
Default
false
org_ctrl_k_protect_subtree = false

org_lint#

Org's linter checks the documents and reports what it finds as diagnostics: misplaced headings and planning lines, links to nowhere, duplicate names, footnotes without definitions… What it finds is information, a hint for a checker Org trusts little: an Org file is text, nothing in it is an error or a warning.

Org's option
org-lint
Type
boolean
Default
true
org_lint = true

org_lint_ignore#

The org-lint checkers to leave out, by name, as a diagnostic's code shows it ("misplaced-heading").

Org's option
org-lint
Type
string[]
Default
[]
org_lint_ignore = []

org_man_command#

The program that writes the man page of a man: link, when ol-man is in org_modules: the page is shown as text, at the line before the first match of what follows :: (man:ls::-l). "woman", Emacs's own reader, is man too.

Org's option
org-man-command
Type
string
Default
"man"
org_man_command = "man"

org_info_other_documents#

The pages on the web of Info manuals: following an info: link to one of them, or to one of Emacs's manuals, opens its page at the node. Another manual is shown as text, as the info program writes the node.

Org's option
org-info-other-documents
Type
{ [manual]: string }
Default
{ "dir": "https://www.gnu.org/manual/manual.html", "libc": "https://www.gnu.org/software/libc/manual/html_mono/libc.html", "make": "https://www.gnu.org/software/make/manual/make.html" }
org_info_other_documents = { dir = "https://www.gnu.org/manual/manual.html", libc = "https://www.gnu.org/software/libc/manual/html_mono/libc.html", make = "https://www.gnu.org/software/make/manual/make.html" }

org_ctags_path_to_ctags#

The ctags program (Exuberant or Universal Ctags) that org.ctags.create runs to make the TAGS file of a directory, when org-ctags is in org_modules.

Org's option
org-ctags-path-to-ctags
Type
string
Default
"ctags"
org_ctags_path_to_ctags = "ctags"

With org-ctags in org_modules, what following a link to a headline, a target or a custom ID tries first, in turn, until one is done: org-ctags-find-tag (the tag of the TAGS file of the file's directory), org-ctags-ask-rebuild-tags-file-then-find-tag and org-ctags-rebuild-tags-file-then-find-tag (the TAGS file made again, then the tag), org-ctags-ask-append-topic and org-ctags-append-topic (a new topic at the end of the file), org-ctags-ask-visit-buffer-or-file and org-ctags-visit-buffer-or-file (the Org file of that name in the directory, made when asked), org-ctags-fail-silently (nothing more). When none is done, the link is followed as without them.

Org's option
org-ctags-open-link-functions
Type
string[]
Default
["org-ctags-find-tag", "org-ctags-ask-rebuild-tags-file-then-find-tag", "org-ctags-ask-append-topic"]
org_ctags_open_link_functions = ["org-ctags-find-tag", "org-ctags-ask-rebuild-tags-file-then-find-tag", "org-ctags-ask-append-topic"]

org_ctags_new_topic_template#

The text of a new topic org_ctags_open_link_functions makes, %t the link's text capitalized.

Org's option
org-ctags-new-topic-template
Type
string
Default
"* <<%t>>\n\n\n\n\n\n"
org_ctags_new_topic_template = "* <<%t>>\n\n\n\n\n\n"

org_open_non_existing_files#

Open a linked file that is not there with the application org_file_apps gives it, rather than saying No such file. The editor opens such a file either way.

Org's option
org-open-non-existing-files
Type
boolean
Default
false
org_open_non_existing_files = false

org_open_directory_means_index_dot_org#

Following a link to a directory opens the index.org in it, rather than the directory.

Org's option
org-open-directory-means-index-dot-org
Type
boolean
Default
false
org_open_directory_means_index_dot_org = false

return_uses_meta_return#

RET on the first line of a list item makes the next item, numbered as M-RET (org-meta-return) makes it (without a checkbox, which M-S-RET adds), the items after it renumbered, as nvim-orgmode's org_return_uses_meta_return does. Off, RET is Org's: a new line in the item. org.return.item (<S-CR>, Shift+Enter, with the vim keys) always does it.

Type
boolean
Default
false
return_uses_meta_return = false

org_goto_max_level#

The deepest headings org.goto (C-c C-j) offers.

Org's option
org-goto-max-level
Type
number
Default
5
org_goto_max_level = 5

org_cycle_separator_lines#

With at least this many blank lines after a subtree, the last one stays outside its fold. Negative: all of them stay outside. 0: none does.

Org's option
org-cycle-separator-lines
Type
number
Default
2
org_cycle_separator_lines = 2

org_cycle_include_plain_lists#

Whether list items fold, as subtrees do. integrate makes them part of the outline: TAB showing a headline's children folds its lists to their top items too. false: they do not fold.

Org's option
org-cycle-include-plain-lists
Type
true, false, "integrate"
Default
true
org_cycle_include_plain_lists = true

org_cycle_max_level#

The deepest headlines that fold; deeper ones are text of the subtree they are in.

Org's option
org-cycle-max-level
Type
number
Default
unset: every level

org_cycle_global_at_bob#

TAB at the very start of the file, when its first line is no headline, cycles the whole file as S-TAB does.

Org's option
org-cycle-global-at-bob
Type
boolean
Default
false
org_cycle_global_at_bob = false

org_cycle_level_after_item_entry_creation#

TAB on a new, empty headline makes it a child of the headline before, then each level up, then a sibling again; on an empty item, it indents and outdents the item the same way.

Org's option
org-cycle-level-after-item/entry-creation
Type
boolean
Default
true
org_cycle_level_after_item_entry_creation = true

org_display_remote_inline_images#

Whether the images of http: and https: links show (C-c C-x C-v): "skip" not; "download" downloaded each time they show; "cache" downloaded once and kept for the session. The download follows org_resource_download_policy; an image larger than 20 MB is not downloaded.

Org's option
org-display-remote-inline-images
Type
"skip", "download" or "cache"
Default
"skip"
org_display_remote_inline_images = "skip"

org_resource_download_policy#

Which remote resources are downloaded (the images of links, and in Emacs a file attached from a URL, C-c C-a u, or a remote #+INCLUDE: or #+SETUPFILE: in an export): true all of them; "prompt" those considered safe, and the others when the answer to Emacs's question says so (in Emacs, a yes or no: yes downloads it this once); "safe" only those considered safe; false none but those.

Org's option
org-resource-download-policy
Type
true, "prompt", "safe" or false
Default
"prompt"
org_resource_download_policy = "prompt"

org_safe_remote_resources#

The remote resources considered safe: Emacs regexps matched against a resource's URL and against the file:// URL of the file asking for it. The answers !, d and f to the download question add one for the rest of the session. Emacs has them too, for what it downloads.

Org's option
org-safe-remote-resources
Type
string[]
Default
[]
org_safe_remote_resources = []

org_num_max_level#

The deepest level org-num-mode numbers.

Org's option
org-num-max-level
Type
integer
Default
unset: every level

org_num_skip_commented#

org-num-mode leaves COMMENT subtrees unnumbered.

Org's option
org-num-skip-commented
Type
boolean
Default
false
org_num_skip_commented = false

org_num_skip_footnotes#

org-num-mode leaves the footnotes section (* Footnotes) unnumbered.

Org's option
org-num-skip-footnotes
Type
boolean
Default
false
org_num_skip_footnotes = false

org_num_skip_tags#

org-num-mode leaves the subtrees of headlines with one of these tags (their own, not inherited) unnumbered.

Org's option
org-num-skip-tags
Type
string[]
Default
[]
org_num_skip_tags = []

org_num_skip_unnumbered#

org-num-mode leaves the subtrees of headlines with an UNNUMBERED property unnumbered.

Org's option
org-num-skip-unnumbered
Type
boolean
Default
false
org_num_skip_unnumbered = false

org_custom_properties#

The properties org.custom.properties.toggle (org-toggle-custom-properties-visibility) hides in the property drawers, and shows again: ["ID", "CUSTOM_ID"]. Editors that can hide them: Neovim from 0.11, and Sublime Text, in a fold.

Org's option
org-custom-properties
Type
string[]
Default
[]
org_custom_properties = []

org_n_level_faces#

How many looks headlines take by level, from 1 to 8 (the token modifiers level1 to level8, Org's org-level-1 to org-level-8): with 4, a headline of level 5 looks as one of level 1, or as one of level 4 with org_cycle_level_faces off.

Org's option
org-n-level-faces
Type
integer
Default
8
org_n_level_faces = 8

org_cycle_level_faces#

Past the last look of org_n_level_faces, headlines take the looks of the levels from the first again; with false, those deeper all keep the last.

Org's option
org-cycle-level-faces
Type
boolean
Default
true
org_cycle_level_faces = true

Emacs and the server#

emacs#

The Emacs program, for what only Org itself does: export (org.export.dispatch). The server starts it (emacs --batch -Q) when that is first asked for and keeps it running, so that Org loads once. Without Emacs, everything else works as before.

Type
string
Default
"emacs"
emacs = "emacs"

emacs_config_file#

A file of Emacs Lisp that Emacs loads before Org, for the variables export reads (org-export-backends, org-html-…, org-latex-…, org-publish-project-alist): a file of its own, or your init file. ~/ is the home directory.

Type
string
Default
unset: none

emacs_config#

Emacs Lisp that Emacs evaluates after emacs_config_file and before loading Org, for a few settings without a file that emacs_options cannot say: a function or a hook, or (add-to-list 'load-path "~/src/org-mode/lisp") for another Org. A yes-or-no question Emacs asks while it works (org-confirm-babel-evaluate) is asked in the editor.

Type
string
Default
unset: none

emacs_options#

Org's options for what Emacs does, by their names in Org, which Emacs sets as Customize does: { "org-attach-method": "mv", "org-export-with-toc": false }. true is t and false nil, a list is a list and a table an association list; a string is a symbol where the option takes one, or a function, by its name. Each is set when Emacs loads the library it is in, after emacs_config_file and emacs_config, and so wins over them. A value the option does not take is left out, with a message naming the part that does not fit. The editor's go over the shared file's option by option. The options, each with Org's documentation of it, are in docs/emacs-options.org; the others are settings of the server, or Lisp (hooks, functions written out), which goes in emacs_config.

Type
{ [option]: value }
Default
{}
emacs_options = {}

auto_save#

Save the files a command changes other than the one it was run in: an entry's file changed from the agenda, the target of a capture or of a refile. The editor saves them once it has made the change. Off, they are left with unsaved changes, as Emacs leaves them.

Type
boolean
Default
true
auto_save = true

mcp_edits#

Let the assistants org-lsp mcp serves change files: its tools set_todo_state, capture, refile, schedule, deadline, set_tags, set_property, delete_property, set_priority, set_effort, add_note, archive and delete_entry, which write the agenda files, the capture targets, the files of org_refile_targets and the archive files directly. Off, it only reads. It is read from the shared configuration file, as everything org-lsp mcp reads.

Type
boolean
Default
false
mcp_edits = false