10 releases (5 breaking)
0.6.1 | Aug 20, 2024 |
---|---|
0.6.0 | Jul 31, 2024 |
0.5.0 | Apr 8, 2024 |
0.4.1 | Jul 31, 2023 |
0.1.1 | Aug 8, 2022 |
#46 in Text editors
340 downloads per month
Used in binsider
150KB
2.5K
SLoC
heh
The HEx Helper is a cross-platform terminal hex editor used for modifying file data in hex or ASCII. It aims to replicate some of the look of hexyl while functionally acting like a terminal UI version of GHex.
[!WARNING] heh is currently in alpha - it's not ready to be used in any production manner. It lacks a variety of quality of life features and does not store backups if killed or crashing.
Installation and Usage
heh is available via cargo:
cargo install heh
From heh --help
:
...
Terminal UI Commands:
ALT= Increase the stream length by 1
ALT- Decrease the stream length by 1
CNTRLs Save
CNTRLq Quit
CNTRLj Jump to Byte
CNTRLe Change endianness
CNTRLd Page Down
CNTRLu Page Up
CNTRLf or / Search
CNTRLn or Enter Next Search Match
CNTRLp Prev Search Match
Left-clicking on a label will copy the contents to the clipboard.
Left-clicking on the ASCII or hex table will focus it.
Zooming in and out will change the size of the components.
USAGE:
heh <FILE>
ARGS:
<FILE>
OPTIONS:
-h, --help
Print help information
-V, --version
Print version information
Distro packages
If your distribution has packaged heh
, you can use that package for the installation.
Arch Linux
You can use pacman to install from the extra repository:
pacman -S heh
Alpine Linux
heh
is available for Alpine Edge. It can be installed via apk after enabling the testing repository.
apk add heh
Using as a Ratatui widget
heh
can be used a library and embedded into other TUI applications which use Ratatui and crossterm.
Add heh
to your dependencies in Cargo.toml
:
[dependencies]
ratatui = "0.24"
crossterm = "0.27"
heh = "0.4"
Create the application:
use heh::app::Application as Heh;
use heh::decoder::Encoding;
let file = std::fs::OpenOptions::new().read(true).write(true).open(path).unwrap();
let heh = Heh::new(file, Encoding::Ascii, 0).unwrap();
Then you can render a frame as follows:
terminal.draw(|frame| {
heh.render_frame(frame, frame.size());
});
To handle key events:
heh.handle_input(&ratatui::crossterm::event::Event::Key(/* */)).unwrap();
See the binsider project for an example use case.
Contributing
See CONTRIBUTING.md.
Dependencies
~8–19MB
~271K SLoC