{"id":24411173,"url":"https://github.com/thesems/nimbus-text-editor","last_synced_at":"2026-04-19T07:34:35.599Z","repository":{"id":219839784,"uuid":"743495462","full_name":"thesems/nimbus-text-editor","owner":"thesems","description":"Terminal-based text editor written in Rust.","archived":false,"fork":false,"pushed_at":"2024-03-20T09:38:17.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T06:37:15.687Z","etag":null,"topics":["piece-table","rust","terminal-based","text-editor","vim"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thesems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-15T11:09:01.000Z","updated_at":"2024-03-16T14:24:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"09e82a2c-ddc5-4f93-8d29-93952b772098","html_url":"https://github.com/thesems/nimbus-text-editor","commit_stats":null,"previous_names":["thesems/nimbus-text-editor"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesems%2Fnimbus-text-editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesems%2Fnimbus-text-editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesems%2Fnimbus-text-editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesems%2Fnimbus-text-editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thesems","download_url":"https://codeload.github.com/thesems/nimbus-text-editor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243382934,"owners_count":20282051,"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":["piece-table","rust","terminal-based","text-editor","vim"],"created_at":"2025-01-20T06:33:36.193Z","updated_at":"2025-10-14T13:10:36.537Z","avatar_url":"https://github.com/thesems.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nimbus Text Editor\n\nNimbus is a terminal-based text editor. It is written in rust and supports basic functionality for writing text or code.\nIt is also a personal study project of mine, meant to sate my curiosity of few topics (terminal API, text data structures, highlighting and vim motions).\n\n**Features**\n- Text editing\n- Incremental Search\n- Syntax highlighting\n- Some vim motions\n\nSupported file types for highlighting:\n- Rust\n- toml\n\n\n## Documentation\n\n**Keybinds**\n\n| Keybind       | Description |\n|-------------- | -------------- |\n| Ctrl-w        | Write changes to file.    |\n| Ctrl-q        | Quit.                     |\n| I             | Enter input mode.         |\n| Esc           | Exit input mode.          |\n| :             | Enter command input.      |\n| Arrows        | Vertical/Horizontal Navigation    |\n| h,j,k,l       | Vertical/Horizontal Navigation    |\n| w,b          | Move forward/backward by one word.    |\n| Backspace     | Delete a character before cursor. |\n| Delete        | Delete a character after cursor.  |\n| Home          | Go to start of line.      |\n| End           | Go to end of line.        |\n| 0             | Go to start of line.      |\n| $             | Go to end of line.        |\n| A             | Go to end of line and change to INSERT mode.|\n\n**Commands**\n\n| Command | Description |\n|-------------- | -------------- |\n| w     | Same as Ctrl-w |\n| q     | Same as Ctrl-q |\n| /     | Search a string |\n| debug | Toggle debug bar |\n| help  | Show help text. |\n\n**Vim motions**\n\nCurrently supported motion structure:\n- {motion}\n- {count}{motion}\n\n## Implementation\n\n**Text Buffer - Piece Table Data Structure**\n\nThe text buffer is implemented with a piece table data structure.\nIt allows fast insertion and deletion times.\nIt also does not require much meta-data per line to be stored.\n\n**Syntax Highlighting**\n\nA tokenizer is used to parse the text and extract syntactical structure\nof the code. Based on the token type, the appropriate color is applied.\nIt requires each language to have it's tokenizer implemented.\n\n## References:\n[Termion - Rust terminal library](https://docs.rs/termion/latest/termion/)  \n[Vim motions](https://vimdoc.sourceforge.net/htmldoc/motion.html)  \n[Piece Table wikipedia](https://en.wikipedia.org/wiki/Piece_table)  \n[Simple Explanation of Piece Table](https://darrenburns.net/posts/piece-table/)  \n[Piece table implementation in JavaScript](https://github.com/sparkeditor/piece-table)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthesems%2Fnimbus-text-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthesems%2Fnimbus-text-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthesems%2Fnimbus-text-editor/lists"}