···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
.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)
+124-61
README.md
···11-<h1 align="center">
22- zfe
33-</h1>
11+# 地圖 (Jido)
22+33+
44+55+**Jido** is a lightweight Unix TUI file explorer designed for speed and
66+simplicity.
77+88+The name 地圖 (지도) translates to "map" in English, reflecting Jido's
99+purpose: helping you navigate and explore your file system with ease. With
1010+Vim-like bindings and a minimalist interface, Jido focuses on speed and
1111+simplicity.
1212+1313+Jido is built with Zig v`0.15.2`.
1414+1515+- [Installation](#installation)
1616+- [Integrations](#integrations)
1717+- [Key manual](#key-manual)
1818+- [Configuration](#configuration)
1919+- [Contributing](#contributing)
2020+2121+## Installation
2222+To install Jido, check the "Releases" page or build locally
2323+via `zig build --release=safe`.
42455-<div align="center">Unix terminal file explorer, written in Zig</div>
2525+## Integrations
2626+- `pdftotext` to view PDF text previews.
2727+- A terminal supporting the `kitty image protocol` to view images.
62877-<br>
2929+## 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.
83399-**zfe** is a small unix terminal file explorer written in Zig.
3434+```
3535+Global:
3636+<CTRL-c> :Exit.
3737+<CTRL-r> :Reload config.
10381111-
3939+Normal mode:
4040+j / <Down> :Go down.
4141+k / <Up> :Go up.
4242+h / <Left> / - :Go to the parent directory.
4343+l / <Right> :Open item or change directory.
4444+g :Go to the top.
4545+G :Go to the bottom.
4646+c :Change directory via path. Will enter input mode.
4747+R :Rename item. Will enter input mode.
4848+D :Delete item.
4949+u :Undo delete/rename.
5050+d :Create directory. Will enter input mode.
5151+% :Create file. Will enter input mode.
5252+/ :Fuzzy search directory. Will enter input mode.
5353+. :Toggle hidden files.
5454+: :Allows for Jido commands to be entered. Please refer to the
5555+ "Command mode" section for available commands. Will enter
5656+ input mode.
5757+v :Verbose mode. Provides more information about selected entry.
5858+y :Yank selected item.
5959+p :Past yanked item.
12601313-## Features
1414-- **Simple to use**: Minimal and customizable keymaps with vim binding support.
1515-- **Image Previews**: Preview images with Kitty terminal.
1616-- **File Previews**: Preview contents of files directly in the terminal.
1717-- **Configurable Options**: Customize settings via an external configuration file.
1818-- **Fuzzy Search**: Fuzzy search within directories.
6161+Input mode:
6262+<Esc> :Cancel input.
6363+<CR> :Confirm input.
19642020-## Install
2121-To install zfe, check the "Releases" section in Github and download the
2222-appropriate version or build locally via `zig build -Doptimize=ReleaseSafe`.
6565+Command mode:
6666+<Up> / <Down> :Cycle previous commands.
6767+:q :Exit.
6868+:h :View available keybinds. 'q' to return to app.
6969+:config :Navigate to config directory if it exists.
7070+:trash :Navigate to trash directory if it exists.
7171+:empty_trash :Empty trash if it exists. This action cannot be undone.
7272+:cd <path> :Change directory via path. Will enter input mode.
7373+```
23742475## Configuration
2525-Configure `zfe` by editing the external configuration file located at either:
2626-- `$HOME/.config/zfe/config.json`
2727-- `$XDG_CONFIG_HOME/zfe/config.json`.
7676+Configure `jido` by editing the external configuration file located at either:
7777+- `$HOME/.jido/config.json`
7878+- `$XDG_CONFIG_HOME/jido/config.json`.
7979+8080+Jido will look for these env variables specifically. If they are not set, Jido
8181+will not be able to find the config file.
28822929-An example config file can be found [here](https://github.com/BrookJeynes/zfe/blob/main/example-config.json).
8383+An example config file can be found [here](https://github.com/BrookJeynes/jido/blob/main/example-config.json).
30843185Config schema:
3286```
3387Config = struct {
3434- .show_hidden: bool,
3535- .sort_dirs: bool,
3636- .show_images: bool,
3737- .preview_file: bool,
3838- .styles: Styles,
8888+ .show_hidden: bool = true,
8989+ .sort_dirs: bool = true,
9090+ .show_images: bool = true, -- Images are only supported in a terminal
9191+ supporting the `kitty image protocol`.
9292+ .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.).
102102+ .keybinds: Keybinds,
103103+ .styles: Styles
104104+}
105105+106106+Keybinds = struct {
107107+ .toggle_hidden_files: ?Char = '.',
108108+ .delete: ?Char = 'D',
109109+ .rename: ?Char = 'R',
110110+ .create_dir: ?Char = 'd',
111111+ .create_file: ?Char = '%',
112112+ .fuzzy_find: ?Char = '/',
113113+ .change_dir: ?Char = 'c',
114114+ .enter_command_mode: ?Char = ':',
115115+ .jump_top: ?Char = 'g',
116116+ .jump_bottom: ?Char = 'G',
117117+ .toggle_verbose_file_information: ?Char = 'v',
118118+ .force_delete: ?Char = null -- Files deleted this way are
119119+ not recoverable
120120+ .yank: ?Char = 'y'
121121+ .paste: ?Char = 'p'
122122+}
123123+124124+NotificationStyles = struct {
125125+ .box: vaxis.Style,
126126+ .err: vaxis.Style,
127127+ .warn: vaxis.Style,
128128+ .info: vaxis.Style
39129}
4013041131Styles = struct {
···43133 .list_item: Style,
44134 .file_name: Style,
45135 .file_information: Style
4646- .error_bar: Style,
4747- .info_bar: Style,
4848- .notification_box: Style,
136136+ .notification: NotificationStyles,
137137+ .git_branch: Style
49138}
5013951140Style = struct {
···58147 double,
59148 curly,
60149 dotted,
6161- dashed,
150150+ dashed
62151 }
63152 .bold: bool,
64153 .dim: bool,
···66155 .blink: bool,
67156 .reverse: bool,
68157 .invisible: bool,
6969- .strikethrough: bool,
158158+ .strikethrough: bool
70159}
7116072161Color = enum{
73162 default,
74163 index: u8,
7575- rgb: [3]u8,
164164+ rgb: [3]u8
76165}
7777-```
781667979-## Keybinds
8080-```
8181-Normal mode:
8282-q / <CTRL-c> :Exit.
8383-8484-j / <Down> :Go down.
8585-k / <Up> :Go up.
8686-h / <Left> / - :Go to the parent directory if exists.
8787-l / <Right> :Open item or change directory.
8888-gg :Go to the top.
8989-G :Go to the bottom.
9090-c :Change directory via path. Will enter input mode.
9191-9292-R :Rename item. Will enter input mode.
9393-D :Delete item.
9494-u :Undo delete/rename.
9595-9696-d :Create directory. Will enter input mode.
9797-% :Create file. Will enter input mode.
9898-/ :Fuzzy search directory. Will enter input mode.
9999-100100-Input mode:
101101-<Esc> :Cancel input.
102102-<Enter> :Confirm input.
167167+Char = enum(u21)
103168```
104104-105105-## Optional Dependencies
106106-- `pdftotext` to view PDF previews.
107169108170## Contributing
109109-Contributions, issues, and feature requests are always welcome! This project is
110110-currently using the latest stable release of Zig (0.13.0).
171171+Contributions, issues, and feature requests are always welcome via
172172+[GitHub](https://github.com/brookjeynes/jido) or
173173+[tangled](https://tangled.sh/@brookjeynes.dev/jido).