diff --git a/CHANGELOG.md b/CHANGELOG.md index f472457..580a811 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ Procedure when bumping the version number: ## Unreleased +## v0.7.0 - 2023-05-14 + ### Added - Auto-generated config documentation - in [CONFIG.md](CONFIG.md) diff --git a/CONFIG.md b/CONFIG.md index 4f2a456..a3f25ac 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -1,8 +1,74 @@ -# Configuration options +# Config file format Cove's config file uses the [TOML](https://toml.io/) format. -## `data_dir` +Here is an example config that changes a few different options: + +```toml +measure_widths = true +rooms_sort_order = "importance" + +[euph.rooms.welcome] +autojoin = true + +[euph.rooms.test] +username = "badingle" +force_username = true + +[euph.rooms.private] +password = "foobar" + +[keys] +general.abort = ["esc", "ctrl+c"] +general.exit = "ctrl+q" +tree.action.fold_tree = "f" +``` + +If you want to configure lots of rooms, TOML lets you write this in a more +compact way: + +```toml +[euph.rooms] +foo = { autojoin = true } +bar = { autojoin = true } +baz = { autojoin = true } +private = { autojoin = true, password = "foobar" } +``` + +## Key bindings + +Key bindings are specified as strings or lists of strings. Each string specifies +a main key and zero or more modifier keys. The modifier keys (if any) are listed +first, followed by the main key. They are separated by the `+` character and +**no** whitespace. + +Examples of key bindings: +- `"ctrl+c"` +- `"X"` (not `"shift+x"`) +- `"space"` or `" "` (both space bar) +- `["g", "home"]` +- `["K", "ctrl+up"]` +- `["f1", "?"]` +- `"ctrl+alt+f3"` +- `["enter", "any+enter"]` (matches `enter` regardless of modifiers) + +Available main keys: +- Any single character that can be typed +- `esc`, `enter`, `space`, `tab`, `backtab` +- `backspace`, `delete`, `insert` +- `left`, `right`, `up`, `down` +- `home`, `end`, `pageup`, `pagedown` +- `f1`, `f2`, ... + +Available modifiers: +- `shift` (must not be used with single characters) +- `ctrl` +- `alt` +- `any` (matches as long as at least one modifier is pressed) + +## Available options + +### `data_dir` **Required:** no **Type:** path @@ -15,7 +81,7 @@ Relative paths are interpreted relative to the user's home directory. See also the `--data-dir` command line option. -## `ephemeral` +### `ephemeral` **Required:** yes **Type:** boolean @@ -28,7 +94,7 @@ any options related to the data dir. See also the `--ephemeral` command line option. -## `euph.rooms..autojoin` +### `euph.rooms..autojoin` **Required:** yes **Type:** boolean @@ -36,7 +102,7 @@ See also the `--ephemeral` command line option. Whether to automatically join this room on startup. -## `euph.rooms..force_username` +### `euph.rooms..force_username` **Required:** yes **Type:** boolean @@ -46,7 +112,7 @@ If `euph.rooms..username` is set, this will force cove to set the username even if there is already a different username associated with the current session. -## `euph.rooms..password` +### `euph.rooms..password` **Required:** no **Type:** string @@ -54,7 +120,7 @@ the current session. If set, cove will try once to use this password to authenticate, should the room be password-protected. -## `euph.rooms..username` +### `euph.rooms..username` **Required:** no **Type:** string @@ -62,7 +128,502 @@ the room be password-protected. If set, cove will set this username upon joining if there is no username associated with the current session. -## `offline` +### `keys.cursor.down` + +**Required:** yes +**Type:** key binding +**Default:** `["j", "down"]` + +Move down. + +### `keys.cursor.to_bottom` + +**Required:** yes +**Type:** key binding +**Default:** `["G", "end"]` + +Move to bottom. + +### `keys.cursor.to_top` + +**Required:** yes +**Type:** key binding +**Default:** `["g", "home"]` + +Move to top. + +### `keys.cursor.up` + +**Required:** yes +**Type:** key binding +**Default:** `["k", "up"]` + +Move up. + +### `keys.editor.action.backspace` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+h", "backspace"]` + +Delete before cursor. + +### `keys.editor.action.clear` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+l"` + +Clear editor contents. + +### `keys.editor.action.delete` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+d", "delete"]` + +Delete after cursor. + +### `keys.editor.action.external` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+x", "alt+e"]` + +Edit in external editor. + +### `keys.editor.cursor.down` + +**Required:** yes +**Type:** key binding +**Default:** `"down"` + +Move down. + +### `keys.editor.cursor.end` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+e", "end"]` + +Move to end of line. + +### `keys.editor.cursor.left` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+b", "left"]` + +Move left. + +### `keys.editor.cursor.left_word` + +**Required:** yes +**Type:** key binding +**Default:** `["alt+b", "ctrl+left"]` + +Move left a word. + +### `keys.editor.cursor.right` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+f", "right"]` + +Move right. + +### `keys.editor.cursor.right_word` + +**Required:** yes +**Type:** key binding +**Default:** `["alt+f", "ctrl+right"]` + +Move right a word. + +### `keys.editor.cursor.start` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+a", "home"]` + +Move to start of line. + +### `keys.editor.cursor.up` + +**Required:** yes +**Type:** key binding +**Default:** `"up"` + +Move up. + +### `keys.general.abort` + +**Required:** yes +**Type:** key binding +**Default:** `"esc"` + +Abort/close. + +### `keys.general.confirm` + +**Required:** yes +**Type:** key binding +**Default:** `"enter"` + +Confirm. + +### `keys.general.exit` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+c"` + +Quit cove. + +### `keys.general.focus` + +**Required:** yes +**Type:** key binding +**Default:** `"tab"` + +Advance focus. + +### `keys.general.help` + +**Required:** yes +**Type:** key binding +**Default:** `"f1"` + +Show this help. + +### `keys.general.log` + +**Required:** yes +**Type:** key binding +**Default:** `"f12"` + +Show log. + +### `keys.room.action.account` + +**Required:** yes +**Type:** key binding +**Default:** `"A"` + +Manage account. + +### `keys.room.action.authenticate` + +**Required:** yes +**Type:** key binding +**Default:** `"a"` + +Authenticate. + +### `keys.room.action.more_messages` + +**Required:** yes +**Type:** key binding +**Default:** `"m"` + +Download more messages. + +### `keys.room.action.nick` + +**Required:** yes +**Type:** key binding +**Default:** `"n"` + +Change nick. + +### `keys.room.action.present` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+p"` + +Open room's plugh.de/present page. + +### `keys.rooms.action.change_sort_order` + +**Required:** yes +**Type:** key binding +**Default:** `"s"` + +Change sort order. + +### `keys.rooms.action.connect` + +**Required:** yes +**Type:** key binding +**Default:** `"c"` + +Connect to selected room. + +### `keys.rooms.action.connect_all` + +**Required:** yes +**Type:** key binding +**Default:** `"C"` + +Connect to all rooms. + +### `keys.rooms.action.connect_autojoin` + +**Required:** yes +**Type:** key binding +**Default:** `"a"` + +Connect to all autojoin rooms. + +### `keys.rooms.action.delete` + +**Required:** yes +**Type:** key binding +**Default:** `"X"` + +Delete room. + +### `keys.rooms.action.disconnect` + +**Required:** yes +**Type:** key binding +**Default:** `"d"` + +Disconnect from selected room. + +### `keys.rooms.action.disconnect_all` + +**Required:** yes +**Type:** key binding +**Default:** `"D"` + +Disconnect from all rooms. + +### `keys.rooms.action.disconnect_non_autojoin` + +**Required:** yes +**Type:** key binding +**Default:** `"A"` + +Disconnect from all non-autojoin rooms. + +### `keys.rooms.action.new` + +**Required:** yes +**Type:** key binding +**Default:** `"n"` + +Connect to new room. + +### `keys.scroll.center_cursor` + +**Required:** yes +**Type:** key binding +**Default:** `"z"` + +Center cursor. + +### `keys.scroll.down_full` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+f", "pagedown"]` + +Scroll down a full screen. + +### `keys.scroll.down_half` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+d"` + +Scroll down half a screen. + +### `keys.scroll.down_line` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+e"` + +Scroll down one line. + +### `keys.scroll.up_full` + +**Required:** yes +**Type:** key binding +**Default:** `["ctrl+b", "pageup"]` + +Scroll up a full screen. + +### `keys.scroll.up_half` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+u"` + +Scroll up half a screen. + +### `keys.scroll.up_line` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+y"` + +Scroll up one line. + +### `keys.tree.action.fold_tree` + +**Required:** yes +**Type:** key binding +**Default:** `"space"` + +Fold current message's subtree. + +### `keys.tree.action.inspect` + +**Required:** yes +**Type:** key binding +**Default:** `"i"` + +Inspect selected element. + +### `keys.tree.action.links` + +**Required:** yes +**Type:** key binding +**Default:** `"I"` + +List links found in message. + +### `keys.tree.action.mark_older_seen` + +**Required:** yes +**Type:** key binding +**Default:** `"ctrl+s"` + +Mark all older messages as seen. + +### `keys.tree.action.mark_visible_seen` + +**Required:** yes +**Type:** key binding +**Default:** `"S"` + +Mark all visible messages as seen. + +### `keys.tree.action.new_thread` + +**Required:** yes +**Type:** key binding +**Default:** `"t"` + +Start a new thread. + +### `keys.tree.action.reply` + +**Required:** yes +**Type:** key binding +**Default:** `"r"` + +Reply to message, inline if possible. + +### `keys.tree.action.reply_alternate` + +**Required:** yes +**Type:** key binding +**Default:** `"R"` + +Reply opposite to normal reply. + +### `keys.tree.action.toggle_seen` + +**Required:** yes +**Type:** key binding +**Default:** `"s"` + +Toggle current message's seen status. + +### `keys.tree.cursor.to_above_sibling` + +**Required:** yes +**Type:** key binding +**Default:** `["K", "ctrl+up"]` + +Move to above sibling. + +### `keys.tree.cursor.to_below_sibling` + +**Required:** yes +**Type:** key binding +**Default:** `["J", "ctrl+down"]` + +Move to below sibling. + +### `keys.tree.cursor.to_newer_message` + +**Required:** yes +**Type:** key binding +**Default:** `["l", "right"]` + +Move to newer message. + +### `keys.tree.cursor.to_newer_unseen_message` + +**Required:** yes +**Type:** key binding +**Default:** `["L", "ctrl+right"]` + +Move to newer unseen message. + +### `keys.tree.cursor.to_older_message` + +**Required:** yes +**Type:** key binding +**Default:** `["h", "left"]` + +Move to older message. + +### `keys.tree.cursor.to_older_unseen_message` + +**Required:** yes +**Type:** key binding +**Default:** `["H", "ctrl+left"]` + +Move to older unseen message. + +### `keys.tree.cursor.to_parent` + +**Required:** yes +**Type:** key binding +**Default:** `"p"` + +Move to parent. + +### `keys.tree.cursor.to_root` + +**Required:** yes +**Type:** key binding +**Default:** `"P"` + +Move to root. + +### `measure_widths` + +**Required:** yes +**Type:** boolean +**Default:** `false` + +Whether to measure the width of characters as displayed by the terminal +emulator instead of guessing the width. + +Enabling this makes rendering a bit slower but more accurate. The screen +might also flash when encountering new characters (or, more accurately, +graphemes). + +See also the `--measure-graphemes` command line option. + +### `offline` **Required:** yes **Type:** boolean @@ -76,11 +637,11 @@ pressing `a` in the rooms list. See also the `--offline` command line option. -## `rooms_sort_order` +### `rooms_sort_order` **Required:** yes **Type:** string -**Values:** `alphabet`, `importance` +**Values:** `"alphabet"`, `"importance"` **Default:** `alphabet` Initial sort order of rooms list. diff --git a/Cargo.lock b/Cargo.lock index e2bbbce..783365c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -249,7 +249,7 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cove" -version = "0.6.1" +version = "0.7.0" dependencies = [ "anyhow", "async-trait", @@ -279,7 +279,7 @@ dependencies = [ [[package]] name = "cove-config" -version = "0.6.1" +version = "0.7.0" dependencies = [ "cove-input", "cove-macro", @@ -290,7 +290,7 @@ dependencies = [ [[package]] name = "cove-input" -version = "0.6.1" +version = "0.7.0" dependencies = [ "cove-macro", "crossterm", @@ -304,7 +304,7 @@ dependencies = [ [[package]] name = "cove-macro" -version = "0.6.1" +version = "0.7.0" dependencies = [ "case", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index beacc35..8f5be76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "2" members = ["cove", "cove-*"] [workspace.package] -version = "0.6.1" +version = "0.7.0" edition = "2021" [workspace.dependencies]