···11+---
22+title: feat: display archive contents
33+status: done
44+priority_value: 50
55+priority: medium
66+owner: brookjeynes
77+created: 2026-01-14T21:48:51Z
88+completed: 2026-01-14T21:49:06Z
99+---
1010+When a user scrolls past a compressed file (.tar, .zip, etc.), they should be
1111+able to see the top level contents.
+11
.gila/done/grave_zone_233/grave_zone_233.md
···11+---
22+title: feat: support cursor placement in input
33+status: done
44+priority_value: 50
55+priority: high
66+owner: brookjeynes
77+created: 2026-01-11T21:53:52Z
88+completed: 2026-01-14T21:48:27Z
99+---
1010+Currently the user cannot move their cursor left or right when typing in the
1111+input field. This is painful when renaming files or changing directories.
···11+---
22+title: feat: add keybind to extraction archive
33+status: done
44+priority_value: 50
55+priority: low
66+owner: brookjeynes
77+created: 2026-01-11T21:52:59Z
88+completed: 2026-01-21T07:05:03Z
99+---
1010+Allow users to extract archives via a keybind
+11
.gila/todo/helpful_heat_b1b/helpful_heat_b1b.md
···11+---
22+title: feat: add keybind to compress item
33+status: todo
44+priority_value: 50
55+priority: low
66+owner: brookjeynes
77+created: 2026-01-14T21:46:27Z
88+---
99+Allow users to compress files/folders via a keybind
1010+1111+This should have a config option as to what file format to compress as.
···11+# Changelog
22+33+## v1.3.0 (2025-05-26)
44+- feat: add `--choose-dir` arg
55+- feat: add `--entry-dir=PATH` arg
66+77+## v1.2.0 (2025-05-26)
88+- feat(images): Cache images to avoid unecessary re-processing
99+1010+## v1.1.0 (2025-05-21)
1111+- fix(images): Improve performance by only locking critical parts of image loading
1212+- fix(images): Thread the image loading process as not to block user input
1313+1414+## v1.0.1 (2025-04-14)
1515+- fix(errors): Ensure logged enums are wrapped in `@tagName()` for readability.
1616+1717+## v1.0.0 (2025-04-06)
1818+- New Keybinds:
1919+ - Added ability to copy files.
2020+ This is done by (y)anking the file, then (p)asting in the desired directory.
2121+ This action can be (u)ndone and behind the scenes is a deletion.
2222+ Currently this feature only supports files, folders, and symlinks.
2323+ - Added force delete keybind. It's unbound by default.
2424+ - Added keybind `v` to view additional information about the selected entry.
2525+- A huge audit of `try` usages was conducted. As a result of this, Jido is much
2626+ more resiliant to errors and should crash less often in known cases.
2727+- Added `:h` command to view help / keybind menu.
2828+- Added config option `true_dir_size` to see the true size of directories.
2929+- Added [-v | --version] and [-h | --help] args.
3030+- File permissions are now displayed in the file information bar to the bottom
3131+ of Jido.
3232+- Keybinds can now be unbound. Some keybinds are now unbound by default.
3333+ See [Configuration](https://github.com/BrookJeynes/jido?tab=readme-ov-file#configuration)
3434+ for more information.
3535+- Fixes:
3636+ - fix: Scrolling command history now provides the correct values.
3737+ - fix: Ensure complete Git branch is displayed. Previously if the branch
3838+ contained slashes, it would only retrieve the ending split.
3939+ - fix: Allow the cursor to be moved left and right on text input.
4040+ - fix: The keybind " " (spacebar) is now accepted by the config.
4141+ - fix: Multi-char keybinds now throw errors instead of crashing.
4242+ - fix: Undoing a delete/rename wont overwrite an item with the same name now.
4343+4444+## v0.9.9 (2025-04-06)
4545+- feat: Added ability to copy folders.
4646+- fix: Scrolling command history now provides the correct values.
4747+4848+## v0.9.8 (2025-04-04)
4949+- fix: Ensure complete Git branch is displayed.
5050+- refactor: Audit try usage to improve system resiliance.
5151+- refactor: Removed need for enum based notifications.
5252+5353+## v0.9.7 (2025-04-01)
5454+- feat: Added ability to copy files.
5555+ This is done by (y)anking the file, then (p)asting in the desired directory.
5656+ This action can be (u)ndone and behind the scenes is a deletion.
5757+- fix: Allow the cursor to be moved left and right.
5858+- refactor: Changed action struct field names to be more clear.
5959+- refactor: Better ergonomics around writing to the log file.
6060+6161+## v0.9.6 (2025-03-31)
6262+- feat: Added ability to unbound keybinds.
6363+- feat: Added force delete keybind. It's unbound by default.
6464+6565+## v0.9.5 (2025-03-29)
6666+- feat: Added [-v | --version] and [-h | --help] args.
6767+6868+## v0.9.4 (2025-03-29)
6969+- feat: Added keybind `h` to view help / keybind menu.
7070+- refactor: `List` drawing logic is now handled by the `Drawer{}`.
7171+7272+## v0.9.3 (2025-03-27)
7373+- feat: The keybind " " is now accepted. This allows spacebar to be bound.
7474+- feat: Duplicate keybind notification now includes additional information.
7575+- fix: Multi-char keybinds now throw errors instead of crashing.
7676+- fix: Remove need to init notification handler. This fixes many issues with
7777+ the places in the code notifications could be produced.
7878+7979+## v0.9.2 (2025-03-25)
8080+- feat: Added keybind `v` to view additional information about the selected entry.
8181+- feat: Added config option `true_dir_size` to see the true size of directories.
8282+- fix: Undoing a delete/rename wont overwrite an item with the same name now.
8383+8484+## v0.9.1 (2025-03-23)
8585+- feat: File permissions are now displayed in the file information bar to the
8686+ bottom of Jido.
8787+8888+## v0.9.0 (2025-03-21)
8989+- New Keybinds:
9090+ - Added keybind `<CTRL-r>` to reload config while Jido is running.
9191+ - Added keybind `.` to hide/show hidden files at runtime.
9292+ Default behaviour is still read from the config file if set.
9393+- Added keybind rebinding.
9494+ Jido now allows you to rebind certain keys. These can be rebound via the config
9595+ file. See [Configuration](https://github.com/BrookJeynes/jido?tab=readme-ov-file#configuration)
9696+ for more information.
9797+- Added file logger.
9898+ This file logger allows Jido to provide users with more detailed log messages
9999+ the notification system cannot. The log file can be found within the config
100100+ directory under the file `log.txt`.
101101+- Jido is now built with the latest stable version of Zig, v0.14.0.
102102+- Fixes:
103103+ - Hiding/showing hidden files after cd would cause all the files to visually
104104+ disappear.
105105+ - Off by one error when traversing command history causing the list to skip
106106+ some entries.
107107+ - Empty commands are no longer added to the command history. This now means
108108+ commands are whitespace trimmed.
109109+ - Move logic to hide dot files from renderer to directory reader.
110110+ This moves the logic to hide dot files out from the renderer to the
111111+ directory reader. This means if hidden files are turned off, they aren't
112112+ even stored.
113113+ - Default styling didn't specify styling for notification box text. This
114114+ would cause visual issues for light mode users.
115115+116116+## v0.8.3 (2025-03-19)
117117+- feat: Added keybind `<CTRL-r>` to reload config while Jido is running.
118118+- fix: Hiding/showing hidden files after cd would display no files.
119119+- fix: Off by one error when traversing command history...
120120+- fix: Dont add empty commands to command history.
121121+- docs: Updated readme to mention new keybind.
122122+- docs: Reordered keybinds section to add "Global" section.
123123+124124+## v0.8.2 (2025-03-18)
125125+- fix: Move logic to hide dot files from renderer to directory reader.
126126+ this moves the logic to hide dot files out from the renderer to the
127127+ directory reader. This means if hidden files are turned off, they aren't
128128+ even stored.
129129+- feat: Added keybind `.` to hide/show hidden files at runtime.
130130+ Default behaviour is still read from the config file if set.
131131+132132+## v0.8.1 (2025-03-11)
133133+- feat: Jido is now built with zig 0.14.0.
134134+- chore: Update packages.
135135+136136+## v0.8.0 (2025-01-07)
137137+- Rebrand from zfe to Jido by @BrookJeynes in #16
138138+ I felt that I wanted this project to have more of its own identity so I
139139+ decided now that this project is getting closer to a v1.0 release, it's time
140140+ to give it a proper name.
141141+- Added command mode by @BrookJeynes in #14
142142+ Command mode is a way for users to enter Jido commands.
143143+ Currently supported commands:
144144+ ```
145145+ Command mode:
146146+ :q :Exit.
147147+ :config :Navigate to config directory if it exists.
148148+ :trash :Navigate to trash directory if it exists.
149149+ :empty_trash :Empty trash if it exists. This action cannot be undone.
150150+ ```
151151+- Deletes are now sent to `<config>/trash` instead of `/tmp`. by @BrookJeynes in #15
152152+ Previously, deletes were sent to `/tmp`. This made it convenient for cleanup
153153+ however caused issues on certain distros. This was because the `/tmp` dir was
154154+ on a separate mount point and therefore the file was unable to be moved there.
155155+ Tying into this, there is now a new `empty_trash_on_exit` config option set to
156156+ false by default.
157157+- Reworked the notification stylings. Notification stylings are now under the
158158+ notification namespace within the config file.
159159+- The code used to detect the git branch no longer needs git installed on the
160160+ system.
161161+- Displayed file size now shows the correct file size for files.
162162+163163+## v0.7.0 (2025-01-01)
164164+- Fix notification segfaults by @BrookJeynes in #9
165165+- Conform codebase styling by @BrookJeynes in #10
166166+- Create release action by @BrookJeynes in #11
167167+- Separate event and draw logic by @BrookJeynes in #12
168168+- Updated config location from `$HOME/.config/zfe` to `$HOME/.zfe` by @BrookJeynes in 3cb9bb2
169169+ - This means that the config can be found at either `$HOME/.zfe/` or
170170+ `$XDG_CONFIG_HOME/zfe/config/`. The old path will continue to work for
171171+ the meantime but has been deprecated.
172172+- Show git branch when available by @BrookJeynes in #13
173173+174174+## v0.6.1 (2024-12-03)
175175+- Updated libvaxis and refactored build.zig by @BrookJeynes in #7
176176+- Notifications are now their own windows that appear to the right by @BrookJeynes in #8
177177+ - Notifications are now their own windows that appear to the right of the
178178+ screen. they disappear after 3 seconds but note that renders only occur
179179+ after an action has been polled. this means that if you wait for 3 seconds
180180+ without an action, the notification wont disappear until an action occurs.
181181+ - Added info notifications on actions such as renaming, deleting, changing
182182+ dir, etc.
183183+ - Added notification_box colour setting to config.
184184+185185+## v0.5.0 (2024-06-05)
186186+- Updated libvaxis dependency.
187187+- Fixed an issue where viewing a PDF would freeze zfe. This fixes issue #5
188188+- Added additional "Optional Dependencies" section to README to specify optional
189189+ dependencies for zfe (such as pdftotext for PDF viewing).
190190+- Updated the way images are streamed in. This should help with #4 but I don't
191191+ think it ultimately fixes the issue at hand.
192192+193193+## v0.4.0 (2024-06-05)
194194+- Fixed bug where cursor would jump back to the top after deleting, renaming,
195195+ creating, or undoing.
196196+- Added new keybind `c` to change directory via path.
197197+- Previous positions are saved when entering a new directory.
198198+- PDFs can now be read if `pdftotext` is installed.
199199+- Undo history can now only store the last 100 events.
200200+- List scrolling is now squeaky smooth.
201201+- Other general refactors and bug fixes.
202202+203203+## v0.3.0 (2024-05-30)
204204+- Moved render and event handling logic to their own functions. This will make
205205+ it a more pleasant experience for contributors.
206206+- Added issue templates for easier and more concise bug reports and feature
207207+ requests.
208208+- Fixed issue where images would stop rendering if an event was emitted without
209209+ changing selected item.
210210+- Implemented ability to delete files and folders.
211211+- Implemented ability to rename files and folders.
212212+- Implemented ability to undo deletions and renames within a session.
213213+- Implemented ability to create folders and directories.
214214+- Updated README with new keybinds.
215215+- Added config option for styling info bar.
216216+217217+## v0.2.0 (2024-05-26)
218218+- Implemented fuzzy search for items in a directory.
219219+- Files can now be opened with `$EDITOR`.
220220+- Error messages now displayed in app.
221221+- Better errors when failing to read config.
222222+- Stopped supporting Windows.
223223+224224+## v0.1.1 (2024-05-25)
225225+- Added better error handling.
226226+- Added new config style for error bar.
227227+- Updated README to include config schema.
228228+- Added MIT license.
229229+230230+## v0.1.0 (2024-05-24)
+73-25
README.md
···11# 地圖 (Jido)
2233-
44-55-> **Note:** Previously known as **zfe**, this project has been renamed to
66-**Jido** to better reflect its purpose and functionality.
33+
7485**Jido** is a lightweight Unix TUI file explorer designed for speed and
96simplicity.
···129purpose: helping you navigate and explore your file system with ease. With
1310Vim-like bindings and a minimalist interface, Jido focuses on speed and
1411simplicity.
1212+1313+Jido is built with Zig v`0.15.2`.
15141615- [Installation](#installation)
1716- [Integrations](#integrations)
···2827- A terminal supporting the `kitty image protocol` to view images.
29283029## Key manual
3030+Below are the default keybinds. Keybinds can be overwritten via the `Keybinds`
3131+config option. Some keybinds are unbound by default, see [Configuration](#configuration)
3232+for more information.
3333+3134```
3535+Global:
3636+<CTRL-c> :Exit.
3737+<CTRL-r> :Reload config.
3838+3239Normal mode:
3333-<CTRL-c> :Exit.
3440j / <Down> :Go down.
3541k / <Up> :Go up.
3642h / <Left> / - :Go to the parent directory.
···4450d :Create directory. Will enter input mode.
4551% :Create file. Will enter input mode.
4652/ :Fuzzy search directory. Will enter input mode.
5353+. :Toggle hidden files.
4754: :Allows for Jido commands to be entered. Please refer to the
4855 "Command mode" section for available commands. Will enter
4956 input mode.
5757+v :Verbose mode. Provides more information about selected entry.
5858+y :Yank selected item.
5959+p :Past yanked item.
6060+x :Extract archive to `<name>/`.
50615162Input mode:
5263<Esc> :Cancel input.
5364<CR> :Confirm input.
54655566Command mode:
6767+<Up> / <Down> :Cycle previous commands.
5668:q :Exit.
6969+:h :View available keybinds. 'q' to return to app.
5770:config :Navigate to config directory if it exists.
5871:trash :Navigate to trash directory if it exists.
5972:empty_trash :Empty trash if it exists. This action cannot be undone.
7373+:cd <path> :Change directory via path. Will enter input mode.
7474+:extract :Extract archive under cursor.
6075```
61766262-6377## Configuration
6478Configure `jido` by editing the external configuration file located at either:
6579- `$HOME/.jido/config.json`
6680- `$XDG_CONFIG_HOME/jido/config.json`.
67816868-Jido will look for these env variables specifically. If they are not set, Jido will
6969-not be able to find the config file.
8282+Jido will look for these env variables specifically. If they are not set, Jido
8383+will not be able to find the config file.
70847185An example config file can be found [here](https://github.com/BrookJeynes/jido/blob/main/example-config.json).
72867387Config schema:
7488```
7589Config = struct {
7676- .show_hidden: bool,
7777- .sort_dirs: bool,
7878- .show_images: bool,
7979- .preview_file: bool,
8080- .empty_trash_on_exit: bool,
8181- .styles: Styles,
9090+ .show_hidden: bool = true,
9191+ .sort_dirs: bool = true,
9292+ .show_images: bool = true, -- Images are only supported in a terminal
9393+ supporting the `kitty image protocol`.
9494+ .preview_file: bool = true,
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.
106106+ .keybinds: Keybinds,
107107+ .styles: Styles
108108+}
109109+110110+Keybinds = struct {
111111+ .toggle_hidden_files: ?Char = '.',
112112+ .delete: ?Char = 'D',
113113+ .rename: ?Char = 'R',
114114+ .create_dir: ?Char = 'd',
115115+ .create_file: ?Char = '%',
116116+ .fuzzy_find: ?Char = '/',
117117+ .change_dir: ?Char = 'c',
118118+ .enter_command_mode: ?Char = ':',
119119+ .jump_top: ?Char = 'g',
120120+ .jump_bottom: ?Char = 'G',
121121+ .toggle_verbose_file_information: ?Char = 'v',
122122+ .force_delete: ?Char = null -- Files deleted this way are
123123+ not recoverable
124124+ .yank: ?Char = 'y'
125125+ .paste: ?Char = 'p'
126126+ .extract_archive: ?Char = 'x'
82127}
8312884129NotificationStyles = struct {
8585- box: vaxis.Style,
8686- err: vaxis.Style,
8787- warn: vaxis.Style,
8888- info: vaxis.Style,
8989-};
130130+ .box: vaxis.Style,
131131+ .err: vaxis.Style,
132132+ .warn: vaxis.Style,
133133+ .info: vaxis.Style
134134+}
9013591136Styles = struct {
92137 .selected_list_item: Style,
···94139 .file_name: Style,
95140 .file_information: Style
96141 .notification: NotificationStyles,
9797- .git_branch: Style,
142142+ .git_branch: Style
98143}
99144100145Style = struct {
···107152 double,
108153 curly,
109154 dotted,
110110- dashed,
155155+ dashed
111156 }
112157 .bold: bool,
113158 .dim: bool,
···115160 .blink: bool,
116161 .reverse: bool,
117162 .invisible: bool,
118118- .strikethrough: bool,
163163+ .strikethrough: bool
119164}
120165121166Color = enum{
122167 default,
123168 index: u8,
124124- rgb: [3]u8,
169169+ rgb: [3]u8
125170}
171171+172172+Char = enum(u21)
126173```
127174128175## Contributing
129129-Contributions, issues, and feature requests are always welcome! This project is
130130-currently using the latest stable release of Zig (0.13.0).
176176+Contributions, issues, and feature requests are always welcome via
177177+[GitHub](https://github.com/brookjeynes/jido) or
178178+[tangled](https://tangled.sh/@brookjeynes.dev/jido).