{"id":14978945,"url":"https://github.com/gskartwii/teehee","last_synced_at":"2025-07-26T21:37:15.801Z","repository":{"id":44753232,"uuid":"274472949","full_name":"Gskartwii/teehee","owner":"Gskartwii","description":"A modal terminal hex editor","archived":false,"fork":false,"pushed_at":"2022-12-08T12:22:49.000Z","size":292,"stargazers_count":118,"open_issues_count":6,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-09T14:14:40.272Z","etag":null,"topics":["hex-editor","kakoune","terminal","vim"],"latest_commit_sha":null,"homepage":"https://sr.ht/~aleksi/teehee/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gskartwii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-23T17:53:02.000Z","updated_at":"2025-03-21T15:49:16.000Z","dependencies_parsed_at":"2023-01-25T13:01:03.909Z","dependency_job_id":null,"html_url":"https://github.com/Gskartwii/teehee","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gskartwii%2Fteehee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gskartwii%2Fteehee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gskartwii%2Fteehee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gskartwii%2Fteehee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gskartwii","download_url":"https://codeload.github.com/Gskartwii/teehee/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054193,"owners_count":21039952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hex-editor","kakoune","terminal","vim"],"created_at":"2024-09-24T13:58:41.317Z","updated_at":"2025-04-09T14:14:45.001Z","avatar_url":"https://github.com/Gskartwii.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Teehee - a modal terminal hex editor\n\n![AUR version](https://img.shields.io/aur/version/teehee)\n\nInspired by Vim, Kakoune and Hiew.\n\n## Installation\nArch Linux users: The package for Arch Linux is available on [AUR](https://aur.archlinux.org/packages/teehee/).\n\nOthers: Just run `cargo install teehee`! If you don't have rust, you can get it from [rustup.rs](https://rustup.rs).\nThe application will be available as the executable `teehee`. More installation options may be coming in the future.\n\n## Motivation\n\nReverse engineers, software engineers and other IT people often need to work with binary files. Hex editors are usually the go-to tool for dealing with binary file formats when a more specialized tool isn't available. Many of the existing hex editors lack support for modal editing, which Vim/Kakoune/Emacs users will miss. Hiew supports it to an extent, but it's non-free software, and its keybinds are unintuitive. Teehee is designed to offer a native-feeling experience to Kakoune and Vim users, while also providing additional hex editing capabilities like coloured marks for regions of data and encryption/compression scripts.\n\n## Demo\n\n[![asciicast](https://asciinema.org/a/349728.svg)](https://asciinema.org/a/349728)\n\nTeehee supports multiple selections, efficient selection modifying commands and various data editing operations.\n\n## Design\n\n![image](https://user-images.githubusercontent.com/6651822/87162730-010efe00-c2cf-11ea-8a0e-f90fbd209cec.png)\n\n## Implemented keybinds\n* `hjkl` for movement (press shift to extend selection instead)\n```\n    ^\n    k\n\u003c h   l \u003e\n    j\n    v\n```\n* `g`[`hjkl`] for jumping (`G`[`hjkl`] to extend selection instead)\n    * `h`: to line start\n    * `l`: to line end\n    * `k`: to file start\n    * `j`: to file end\n    * `\u003ccount\u003eg` jumps to offset, `\u003ccount\u003eG` extends to offset\n* `\u003cC+e/y\u003e` to scroll down/up\n* `;` to collapse selections to cursors\n* `\u003ca-;\u003e` (alt and ;) to swap cursor and selection end\n* `\u003ca-s\u003e` (alt and s) to split selection to multiple selections of size...\n    * `b`: 1 byte\n    * `w`: 2 bytes (Word)\n    * `d`: 4 bytes (Dword)\n    * `q`: 8 bytes (Qword)\n    * `o`: 16 bytes (Oword)\n    * `n`: delimited by null bytes\n    * `/`: matching a text pattern (`?` for hex pattern)\n* `d` to delete selected data from buffer\n* `i` to enter insert mode at the beginning of selections (`I` to insert hex instead of ascii)\n    * `a` instead of `i` to enter append mode instead\n    * `o` instead of `i` to enter overwrite mode instead\n    * `c` instead of `i` to delete selection contents, then enter insert mode\n    * `\u003cc-n\u003e` to insert a null byte in ascii mode\n    * `\u003cc-o\u003e` to switch between ascii and hex inserting\n* `(` and `)` to cycle main selection\n* `\u003cspace\u003e` to keep only main selection, `\u003ca-space\u003e` to keep all selections but main\n* `r\u003ckey\u003e` to replace a each selected character with the ASCII character given\n    * `R\u003cdigit\u003e\u003cdigit\u003e` instead of `r` to replace with a single hex character instead\n    * `r\u003cc-n\u003e` to replace with null bytes\n* `y` to yank/copy selections to register `\"`\n* `p` to paste register `\"` contents from `y`/`d`/`c`\n* `s` to collapse selections to those matching a text pattern (`S` for hex pattern)\n* `M` to measure length of current main selection (in bytes)\n* `u` to undo, `U` to redo\n* `:` to enter command mode\n    * `:q` to quit\n    * `:q!` to force quit (even if buffer dirty)\n    * `:w` to flush buffer to disk\n    * `:w \u003cfilename\u003e` to save buffer to named file\n    * `:wa` to flush all buffers to disk\n    * `:e \u003cfilename\u003e` to open a new buffer\n    * `:db` to close a buffer\n    * `:db!` to close a buffer even if dirty\n    * `:wq` to flush buffer, then quit\n\nEntering a pattern:\n\n* `\u003cC-w\u003e` to insert a wildcard\n* `\u003cC-o\u003e` to switch input mode (ascii \u003c-\u003e hex)\n* `\u003cesc\u003e` to go back to normal mode\n* `\u003center\u003e` to accept pattern\n* arrow keys, `\u003cbackspace\u003e` and `\u003cdelete\u003e` also supported\n\nCounts:\n* The following commands maybe prefixed by a count:\n    * Movement (`hjkl` and `HJKL`)\n    * Selection modification (`()\u003cspace\u003e\u003ca-space\u003e`)\n    * Jump to offset (`g` and `G`)\n    * Paste (`p`)\n    * (In split mode) `bwdqon`\n* Counts are inputted by typing digits 0-9 (in hex mode, 0-f).\n* `x` switches between hex and decimal mode.\n* Note that `a-f` may shadow some keys, so switch out of hex mode before running\n  a command.\n* Example: `y5p`: yank the selection and paste it 5 times.\n* Example: `50l`: Move 50 bytes to the right.\n* Example: `x500g`: Jump to offset 0x500\n* Example: `\u003ca-s\u003ex12xb`: Split selection into parts of 0x12 bytes.\n\n# Releases\nReleases are signed with the following PGP key:\n`9330E5D6861507BEFBF1893347E208E66179DC94`. The source code can be found on\nthe [GitHub releases page](https://github.com/Gskartwii/teehee/releases), along\nwith the signature of the source code tgz.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgskartwii%2Fteehee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgskartwii%2Fteehee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgskartwii%2Fteehee/lists"}