Skip to content

Configuration ​

Blank reads its settings from blank.json in the app config folder. The file is optional: list only what you want to change, everything else keeps its default.

SystemConfig file
Linux~/.config/com.github.fpurchess.blank/blank.json
macOS~/Library/Application Support/com.github.fpurchess.blank/blank.json
Windows%APPDATA%\com.github.fpurchess.blank\blank.json

Restart Blank after changing the file. If the file is not valid JSON, Blank ignores it and uses the defaults. A single setting that Blank can't use, such as a key it doesn't know or "false" in quotes instead of false, never stops Blank from starting: it keeps the default for that setting and tells you which ones it ignored.

Keyboard shortcuts ​

Map a command to a key under keymap. Keys are written like Mod-Shift-s, where Mod is Cmd on macOS and Ctrl elsewhere. This example saves with Ctrl Alt S and exports the PDF with Mod P:

json
{
  "keymap": {
    "file.save": "Ctrl-Alt-s",
    "export.pdf": "Mod-p"
  }
}

You can also write the modifiers the way your keyboard names them: Option works like Alt, and Command, Cmd and Super work like Meta. Case doesn't matter, so option-p is fine too.

The default configuration, with every command and its key
json
{
  "keymap": {
    "undo": "Mod-z",
    "redo": "Mod-Shift-z",
    "blocktype.paragraph": "Mod-0",
    "blocktype.heading1": "Mod-1",
    "blocktype.heading2": "Mod-2",
    "blocktype.heading3": "Mod-3",
    "blocktype.heading4": "Mod-4",
    "blocktype.heading5": "Mod-5",
    "blocktype.heading6": "Mod-6",
    "blocktype.bullet_list": "Mod-8",
    "blocktype.ordered_list": "Mod-9",
    "insert.horizontal_rule": "Mod-h",
    "insert.image": "Mod-Alt-i",
    "format.indent": "Tab",
    "format.unindent": "Shift-Tab",
    "format.bold": "Mod-b",
    "format.italic": "Mod-i",
    "format.code": "Mod-e",
    "format.link": "Mod-k",
    "format.blockquote": "Mod-g",
    "file.new": "Mod-n",
    "file.save": "Mod-s",
    "file.save_as": "Mod-Shift-s",
    "file.open": "Mod-o",
    "export.pdf": "Mod-Alt-p",
    "export.docx": "Mod-Alt-w",
    "theme.cycle": "Mod-Alt-t",
    "language.choose": "Mod-Alt-l",
    "spellcheck.toggle": "Mod-Alt-s",
    "spellcheck.next": "Mod-Alt-n",
    "spellcheck.previous": "Mod-Alt-Shift-n",
    "menu.context": "Shift-F10"
  },
  "autocorrect": {
    "arrows": true,
    "dashes": true,
    "symbols": true,
    "formatting": true,
    "links": true,
    "quotes": true,
    "capitalize": true,
    "blocks": true,
    "replace": {
      "*": {}
    }
  },
  "spellcheck": {
    "ignoreUppercase": true,
    "ignoreWordsWithNumbers": true
  }
}

Autocorrect ​

Each group can be turned off with false. replace adds your own replacements, either for all languages (*) or for one:

json
{
  "autocorrect": {
    "capitalize": false,
    "replace": {
      "*": { "btw": "by the way" },
      "de": { "mfg": "Mit freundlichen Grüßen" }
    }
  }
}

The groups are arrows, dashes, symbols, formatting, links, quotes, capitalize and blocks. All are on by default. A replacement for a language also applies to its regional variants: one for de works in de-CH too.

Spell check ​

Spell check leaves words in capitals and words with digits alone. Set these to false to check them as well:

json
{
  "spellcheck": {
    "ignoreUppercase": false,
    "ignoreWordsWithNumbers": false
  }
}

The words you add to the dictionary are kept next to blank.json, in the dictionaries folder.