{"id":13399764,"url":"https://github.com/sealmove/hexalepis","last_synced_at":"2025-10-19T12:24:51.602Z","repository":{"id":176260374,"uuid":"190956609","full_name":"sealmove/hexalepis","owner":"sealmove","description":"Hex editor made efficient","archived":false,"fork":false,"pushed_at":"2020-08-22T19:37:37.000Z","size":219,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-07-31T19:22:11.220Z","etag":null,"topics":["hex-editor"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sealmove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-06-09T02:43:24.000Z","updated_at":"2022-02-18T04:14:23.000Z","dependencies_parsed_at":"2024-01-18T11:13:04.674Z","dependency_job_id":"ac6d38a7-cd93-437b-b946-a1cf2b8072c0","html_url":"https://github.com/sealmove/hexalepis","commit_stats":null,"previous_names":["sealmove/hexalepis"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sealmove%2Fhexalepis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sealmove%2Fhexalepis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sealmove%2Fhexalepis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sealmove%2Fhexalepis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sealmove","download_url":"https://codeload.github.com/sealmove/hexalepis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240018687,"owners_count":19734872,"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"],"created_at":"2024-07-30T19:00:42.452Z","updated_at":"2025-10-19T12:24:46.534Z","avatar_url":"https://github.com/sealmove.png","language":"Nim","funding_links":[],"categories":["Similar projects / tools"],"sub_categories":["Hex Editors"],"readme":"# Hexalepis\n## Hex editor made efficient\n\n### Introduction\nHex editors need special optimizations (different from text editors) which are typically not implemented. This project was inspired by Simon Tatham's [article](https://www.chiark.greenend.org.uk/~sgtatham/tweak/btree.html) and is an effort to apply his ideas into a minimal but practical editor.\n\n### Time efficiency\n| Operation | Complexity |\n|---------- | ---------- |\n| Replace | O(1) |\n| Copy-paste | O(1) |\n| Insert | O(log(n)) |\n| Delete | O(log(n)) |\n| Seek | O(log(n)) |\n| Search | O(n) |\n| Save | O(n) |\n\n### Space efficiency\nThe engine implements lazy file loading and copy-on-write; thus, memory usage is minimal (proportionally to changes).\nCopy-paste is not an insertion operation! This means pasting the same block in multiple places does not increase memory usage proportionally to the block size. One could view this as a form of compression.\n\n*Simon Tatham created [tweak](https://www.chiark.greenend.org.uk/~sgtatham/tweak/) which is more of a proof-of-concept rather than a full-fledged hex editor.*\n\n### Engine implementation progress\n- [ ] Replace\n- [ ] Copy-paste\n- [ ] Insert\n- [ ] Delete\n- [x] Seek\n- [ ] Search\n- [ ] Save\n\n### Main goals\n- [ ] Implement Simon Tatham's engine\n- [ ] [Kaitai Struct](https://kaitai.io/) support\n\n### TUI goals\n- [ ] Toggle ascii panel\n- [ ] Mouse support\n- [ ] Status bar\n- [ ] Color themes (cycle at runtime)\n- [ ] Configurable key bindings\n- [x] Automatically-adjusting panel to fit console\n\n### Installation\n* [Install Nim](https://nim-lang.org/install.html)\n* Clone\n* Compile (`nim c -d:release -o:hexalepis main`) \n* Run `./hexalepis \u003cfilename\u003e`\n\n### Key bindings\n\n| Key | Action |\n|----------------- | ------------------------- |\n| ctrl+q | exit |\n| ctrl+s | save (in-place) |\n| u (or ctrl+z) | undo |\n| ctrl+r | redo |\n| esc | cancel |\n| h, j, k, l (or arrows) | movement |\n| home | go to beginning of line |\n| end | go to end of line |\n| pageup, pagedown  | vertical scroll |\n| [ ] | horizontal scroll |\n| tab | change panel |\n| m (in hex panel) | mark byte |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsealmove%2Fhexalepis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsealmove%2Fhexalepis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsealmove%2Fhexalepis/lists"}