{"id":13436381,"url":"https://github.com/withoutboats/notty","last_synced_at":"2025-05-15T20:05:35.632Z","repository":{"id":41243300,"uuid":"46211416","full_name":"withoutboats/notty","owner":"withoutboats","description":"A new kind of terminal","archived":false,"fork":false,"pushed_at":"2017-03-27T19:50:28.000Z","size":2360,"stargazers_count":2313,"open_issues_count":23,"forks_count":40,"subscribers_count":72,"default_branch":"master","last_synced_at":"2025-05-15T00:02:46.940Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/withoutboats.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-15T09:16:04.000Z","updated_at":"2025-05-10T14:08:30.000Z","dependencies_parsed_at":"2022-07-12T18:18:04.126Z","dependency_job_id":null,"html_url":"https://github.com/withoutboats/notty","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoutboats%2Fnotty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoutboats%2Fnotty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoutboats%2Fnotty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/withoutboats%2Fnotty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/withoutboats","download_url":"https://codeload.github.com/withoutboats/notty/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254414499,"owners_count":22067272,"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":[],"created_at":"2024-07-31T03:00:47.461Z","updated_at":"2025-05-15T20:05:30.581Z","avatar_url":"https://github.com/withoutboats.png","language":"Rust","funding_links":[],"categories":["Applications","Rust","Uncategorized","应用程序 Applications","应用 Applications","应用","Packages"],"sub_categories":["Uncategorized","贡献","Terminals"],"readme":"# notty - not a typewriter\n\n[![Join the chat at https://gitter.im/withoutboats/notty](https://badges.gitter.im/withoutboats/notty.svg)](https://gitter.im/withoutboats/notty?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n![](screenshot.png)\n\n__notty__ is a virtual terminal like xterm, gnome-vte, sh, or rxvt. Unlike\nthese programs, __notty__ is not intended to emulate a DEC VT-series physical\nvideo terminal, or any other physical device. Instead, __notty__ is an\nexperimental project to bring new features to the command-line which would not\nhave been possible for the physical terminals other terminals emulate.\n\nCurrent command-line tools have stagnated (if you prefer, 'stabilized') around\nthe ECMA-48/ISO 6429/ANSI X3.64 escape code protocol, which is defined on the\nbasis of the capabilities of 1980s video terminal devices. Essentially all\nterminals in use today are virtual terminals being run on devices which are\nsignificantly more capable than these ancient machines, and yet the terminal\nenvironment has not kept pace with these developments. The last revision of the\nANSI escape code protocol was released in 1991.\n\n__notty__ will attempt to remain true to the text-oriented, command-line user\ninterface of the terminal while extending it to include new and more powerful\ninterface features, such as:\n\n* Full support for rich text formatting, including 24-bits of color.\n* Full and correct support for all of Unicode.\n* Lossless keyboard input.\n* Inline media content, including raster graphics and structured data.\n* Dropdown menus, tooltips, and other features which do not strictly reside in\n  the character grid.\n* Local echo and retained off-screen character grid state to reduce the need\n  for the tty to transmit data back to the terminal.\n* Subdividing the character grid to enable more complex interface layouts\n  without repeatedly reimplementing that logic in the controlling process.\n* And more! If you know any features you wish the terminal had, please open an\n  issue and let's talk about this.\n\nMany of these features are not yet implemented.\n\nTo achieve these ends, __notty__ will implement a new and more consistent escape\nprotocol than ANSI escape codes. This protocol will be comparatively easy to\nextend with new features as the project grows. Once a feature set has been\nstabilized, I will write a framework for creating terminal applications that\nuse __notty__'s features, written against this protocol (allowing other\nterminals to implement the protocol and support these features as well). This\nframework will include a polyfill for approximating these features as well as\npossible in terminals that don't implement notty codes.\n\nThis repository is a library which defines an engine for translating both ANSI\nand __notty__ escape codes into state changes in the terminal's abstract state.\nThis library does not directly implement any means of drawing the state to the\nscreen and is agnostic about the interface it uses to communicate with the\ncontrolling process, so hopefully it will be reusable for writing terminals in\ndifferent graphical environments, for writing screen/tmux-like server-side\nmulti-terminal managers, and for writing SSH clients in non-UNIX environments.\nBecause it implements (most) ANSI escape codes, this terminal is backwards\ncompatible with existing command line tools.\n\nA subdirectory, named scaffolding, contains a minimal graphical terminal using\nGTK/pango/cairo, intended for testing __notty__'s features interactively. This\nterminal is buggy and feature poor and not intended for general use.\n\nA major difference between __notty__ and other projects in the same space is\nthat this is _just_ a virtual terminal, and is fully backwards compatible with\nthe existing shell/terminal setup. It does not implement any features of a\nshell, and it is not attempting to totally supplant any existing paradigms.\nGraphical terminals based on this library should be useable as drop-in\nreplacements for other terminals, but with new features that can be used to\nimplement better interfaces for command line programs such as shells, text\neditors, and other utilities.\n\nThat said, terminals as they exist today are a pile of ugly kludges. From the\nkernel's tty/pty subsystem, to the termios ioctl calls which control it, to the\nterminfo and termcap databases, to the ANSI escape codes they describe, to the\nancient codebases of the terminal emulators themselves, this is a universe of\narcane and poorly documented old growth code, much of which is no longer\nactively useful to people in the 21st century - your system ships with a terminfo db page\nfor more than 2500 different terminal devices, nearly all of them extinct, and\nevery new console you open has a baud rate set in the kernel, even though it\nexchanges data in memory. More advanced features of __notty__ will certainly\nrequiring sidestepping this system to a certain extent: the current plan is to\nimplement a command to \"switch\" notty to an extended mode; in such a mode, only\nnotty escape codes would be used and the tty's flags would all be unset except\nfor CREAD and ISIG (and maybe not even ISIG).\n\nThis implementation is written in [Rust][rust], an exciting new systems\nlanguage from Mozilla.\n\nMuch thanks to __Thomas E. Dickey__, the maintainer of xterm,\n[whose website][invis-island] hosts excellent documentation regarding xterm's\nbehavior, and to __Paul Flo Williams__, who maintains [vt100.net][vt100],\nwhich hosts manuals for the actual DEC VT-series terminals. Credit also to\n__Gary Bernhardt__, whose talk [A Whole New World][anterminal] influenced me to\npursue this project seriously.\n\n# License\n\n__notty__ is free software: you can redistribute it and/or modify it under the\nterms of the __GNU Affero General Public License__ as published by the Free\nSoftware Foundation, either __version 3__ of the License, or (at your option)\nany later version.\n\nThis program is distributed in the hope that it will be useful, but __WITHOUT\nANY WARRANTY__; without even the implied warranty of __MERCHANTABILITY__ or\n__FITNESS FOR A PARTICULAR PURPOSE__.  See the GNU Affero General Public\nLicense for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n\n# Conduct\n\nThe __notty__ project is committed to upholding the\n[Rust Code of Conduct][rust-coc]. Please see CONDUCT.md for more information.\n\n[anterminal]: https://destroyallsoftware.com/talks/a-whole-new-world\n[invis-island]: http://invisible-island.net/xterm\n[rust]: https://www.rust-lang.org\n[rust-coc]: https://www.rust-lang.org/conduct.html\n[vt100]: http://vt100.net\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithoutboats%2Fnotty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwithoutboats%2Fnotty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwithoutboats%2Fnotty/lists"}