{"id":29966462,"url":"https://github.com/eu-ge-ne/toy","last_synced_at":"2025-08-04T03:02:51.482Z","repository":{"id":305417341,"uuid":"1021788601","full_name":"eu-ge-ne/toy","owner":"eu-ge-ne","description":"Minimalistic TUI text editor","archived":false,"fork":false,"pushed_at":"2025-08-03T03:07:01.000Z","size":473,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-03T05:24:22.913Z","etag":null,"topics":["deno","text-editor","tui","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/eu-ge-ne.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-18T00:44:42.000Z","updated_at":"2025-08-03T03:07:03.000Z","dependencies_parsed_at":"2025-08-03T05:18:22.609Z","dependency_job_id":"3e3dc310-5e61-49fd-89d6-352c0990504c","html_url":"https://github.com/eu-ge-ne/toy","commit_stats":null,"previous_names":["eu-ge-ne/toy"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/eu-ge-ne/toy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eu-ge-ne%2Ftoy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eu-ge-ne%2Ftoy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eu-ge-ne%2Ftoy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eu-ge-ne%2Ftoy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eu-ge-ne","download_url":"https://codeload.github.com/eu-ge-ne/toy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eu-ge-ne%2Ftoy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268643648,"owners_count":24283311,"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","status":"online","status_checked_at":"2025-08-04T02:00:09.867Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["deno","text-editor","tui","typescript"],"created_at":"2025-08-04T03:00:56.119Z","updated_at":"2025-08-04T03:02:51.453Z","avatar_url":"https://github.com/eu-ge-ne.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# toy\n\nMinimalistic TUI text editor. Built with Deno and TypeScript with zero\nthird-party dependencies.\n\n![toy](etc/toy.png)\n\n- [Installation](#installation)\n  - [Homebrew](#homebrew)\n- [Features](#features)\n  - [Text](#text)\n  - [Rendering](#rendering)\n  - [Input](#input)\n  - [UX](#ux)\n- [Supported terminal emulators](#supported-terminal-emulators)\n- [Keyboard shortcuts](#keyboard-shortcuts)\n  - [Function](#function)\n  - [Navigate](#navigate)\n  - [Select](#select)\n  - [Edit](#edit)\n- [Roadmap](#roadmap)\n- [License](#license)\n\n## Installation\n\n### Homebrew\n\nInstall from a tap:\n\n```bash\nbrew install eu-ge-ne/tap/toy\n```\n\n## Features\n\n### Text\n\n- Working with large files (tested on gigabyte-sized files)\n- Working with text as a sequence of Unicode grapheme clusters\n- Moving cursor according to the width of characters rendered by terminal\n  emulators\n\n### Rendering\n\n- 256-color palette\n- Rendering whitespace characters\n- Leveraging the\n  [Synchronized Output](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036)\n  extension for fast rendering (5 ms median)\n\n### Input\n\n- [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol)\n  support\n- Integration with the system clipboard via OSC52\n\n### UX\n\n- Command Palette\n- Zen mode\n- Undo/Redo buffer\n- Line wrapping\n- Color themes\n\n## Supported terminal emulators\n\n- kitty\n- Ghostty\n- VSCode terminal\n\n## Keyboard shortcuts\n\n### Function\n\n- `F1` - Open Command Palette (`⇧+F1`, `⌃+F1`, `⌥+F1`, `⌘+F1`)\n- `F2` - Save\n- `F5` - Toggle render whitespace\n- `F6` - Toggle line wrap\n- `F9` - Toggle Debug panel\n- `F10` - Exit\n- `F11` - Toggle Zen mode\n\n### Navigate\n\n- `Left`, `Right`, `Up`, `Down` - Move cursor\n- `Home` - Move cursor to beginning of current line (`Fn+Left`, `⌘+Left`)\n- `End` - Move cursor to end of current line (`Fn+Right`, `⌘+Right`)\n- `Page Up` - Move cursor up a frame (`Fn+Up`)\n- `Page Down` - Move cursor down a frame (`Fn+Down`)\n- `⌘+Up` - Move cursor to the top of the text\n- `⌘+Down` - Move cursor to the bottom of the text\n\n### Select\n\n- `⇧+Left` - Extend text selection one character to the left\n- `⇧+Right` - Extend text selection one character to the right\n- `⇧+Up` - Extend text selection to the nearest character at the same horizontal\n  location on the line above\n- `⇧+Down` - Extend text selection to the nearest character at the same\n  horizontal location on the line below\n- `⇧+Home` - Select the text between the cursor and the beginning of the current\n  line (`⇧+Fn+Left`, `⇧+⌘+Left`)\n- `⇧+End` - Select the text between the cursor and the end of the current line\n  (`⇧+Fn+Right`, `⇧+⌘+Right`)\n- `⇧+Page Up` - Select a frame of text above the cursor (`⇧+Fn+Up`)\n- `⇧+Page Down` - Select a frame of text below the cursor (`⇧+Fn+Down`)\n- `⇧+⌘+Up` - Select the text between the cursor and the beginning of the text\n- `⇧+⌘+Down` - Select the text between the cursor and the end of the text\n- `⌃+A` - Select all text (`⌘+A`)\n\n### Edit\n\n- `⌃+Z` - Undo (`⌘+Z`)\n- `⌃+Y` - Redo (`⌘+Y`)\n- `⌃+C` - Copy selected text (`⌘+C`)\n- ️`⌃+X` - Cut selected text (`⌘+X`)\n- `⌃+V` - Paste text at cursor (`⌘+V`)\n- `Delete` - Delete the character to the left of the cursor\n- `Fn+Delete` - Delete the character under the cursor\n\n## Roadmap\n\n- `⌃+F` - Find\n- `F3` - Find next\n- `⇧+F3` - Find previous\n- Mouse support\n\n## License\n\n[MIT](https://choosealicense.com/licenses/mit)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feu-ge-ne%2Ftoy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feu-ge-ne%2Ftoy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feu-ge-ne%2Ftoy/lists"}