···11---
22title: feat: add keybind to extraction archive
33-status: todo
33+status: done
44priority_value: 50
55priority: low
66owner: brookjeynes
77created: 2026-01-11T21:52:59Z
88+completed: 2026-01-21T07:05:03Z
89---
910Allow users to extract archives via a keybind
+16-11
README.md
···5757v :Verbose mode. Provides more information about selected entry.
5858y :Yank selected item.
5959p :Past yanked item.
6060+x :Extract archive to `<name>/`.
60616162Input mode:
6263<Esc> :Cancel input.
···7071:trash :Navigate to trash directory if it exists.
7172:empty_trash :Empty trash if it exists. This action cannot be undone.
7273:cd <path> :Change directory via path. Will enter input mode.
7474+:extract :Extract archive under cursor.
7375```
74767577## Configuration
···8789Config = struct {
8890 .show_hidden: bool = true,
8991 .sort_dirs: bool = true,
9090- .show_images: bool = true, -- Images are only supported in a terminal
9191- supporting the `kitty image protocol`.
9292+ .show_images: bool = true, -- Images are only supported in a terminal
9393+ supporting the `kitty image protocol`.
9294 .preview_file: bool = true,
9393- .empty_trash_on_exit: bool = false, -- Emptying the trash permanently deletes
9494- all files within the trash. These
9595- files are not recoverable past this
9696- point.
9797- .true_dir_size: bool = false, -- Display size of directory including
9898- all its children. This can and will
9999- cause lag on deeply nested directories.
100100- .archive_traversal_limit: usize = 100, -- How many files to be traversed when reading
101101- an archive (zip, tar, etc.).
9595+ .empty_trash_on_exit: bool = false, -- Emptying the trash permanently deletes
9696+ all files within the trash. These
9797+ files are not recoverable past this
9898+ point.
9999+ .true_dir_size: bool = false, -- Display size of directory including
100100+ all its children. This can and will
101101+ cause lag on deeply nested directories.
102102+ .archive_traversal_limit: usize = 100, -- How many files to be traversed when reading
103103+ an archive (zip, tar, etc.).
104104+ .keep_partial_extraction: bool = false, -- If extraction fails, keep the partial
105105+ extracted directory instead of cleaning up.
102106 .keybinds: Keybinds,
103107 .styles: Styles
104108}
···119123 not recoverable
120124 .yank: ?Char = 'y'
121125 .paste: ?Char = 'p'
126126+ .extract_archive: ?Char = 'x'
122127}
123128124129NotificationStyles = struct {
+2
src/app.zig
···4242 "v :Verbose mode. Provides more information about selected entry. ",
4343 "y :Yank selected item.",
4444 "p :Past yanked item.",
4545+ "x :Extract archive to `<name>/`",
4546 "",
4647 "Input mode:",
4748 "<Esc> :Cancel input.",
···5556 ":trash :Navigate to trash directory if it exists.",
5657 ":empty_trash :Empty trash if it exists. This action cannot be undone.",
5758 ":cd <path> :Change directory via path. Will enter input mode.",
5959+ ":extract :Extract archive under cursor.",
5860};
59616062pub const State = enum {