{"id":19030049,"url":"https://github.com/statico/noble","last_synced_at":"2025-07-03T18:32:24.111Z","repository":{"id":136667936,"uuid":"493845963","full_name":"statico/noble","owner":"statico","description":null,"archived":false,"fork":false,"pushed_at":"2022-05-20T18:39:57.000Z","size":13225,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-21T20:15:12.280Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/statico.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":"2022-05-18T22:38:43.000Z","updated_at":"2022-05-18T23:12:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"eafdf8f0-74d7-4a25-b98f-c890da99e35c","html_url":"https://github.com/statico/noble","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/statico/noble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fnoble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fnoble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fnoble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fnoble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/statico","download_url":"https://codeload.github.com/statico/noble/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fnoble/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263379296,"owners_count":23457828,"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-11-08T21:16:19.580Z","updated_at":"2025-07-03T18:32:24.086Z","avatar_url":"https://github.com/statico.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Noble: the noble text editor #\n\nI want Noble to be the text editor of the future. I want:\n\n* To further the state of open-source text editors\n* The speed and flexibility of editing text like Vim\n* The external-process integration level of Emacs\n* The hot features and OS-level integration of TextMate (but for Linux\n  and Windows as well)\n* The customizability of writing a whole editor in a functional,\n  dynamic language (like Emacs and Elisp)\n* The fun and excitement of working with a \"hot\" language, JavaScript\n\n### Plan ###\n\n1. A basic UI in console\n   * V8 + tiny kernel (`binary`, `io`, `fs`, `system` and `console`\n     modules specified by [CommonJS](http://wiki.commonjs.org/wiki/CommonJS)\n   * Vim and Emacs emulation\n   * Basic modes, selection, undo\n1. Ability to hack Noble with Noble (dogfood)\n   * Write and save reliably\n   * Syntax highlighting\n   * Indenting\n   * Buffers\n1. Get people interested\n   * Adopt GitHub (+wiki, +issue-tracking)\n   * Create a central add-on repo with easy install/updating\n   * Create a snippets repo\n   * Announce a 0.1 once it's good enough to edit itself\n   * Create a feature comparison grid\n   * Python, Ruby, HTML and CSS support\n1. OS Integration\n   * Mac OS X: Things like drawers, toolbars, built-in help, and Growl\n     support. See [Kod](http://www.kodapp.com)\n   * Gnome: Similar support as OS X\n   * Fullscreen (and a \"minimalist\" mode with wide margins)\n1. Add \"modern\" text editor features (kinda in order)\n   * Project browser\n   * Tab/buffer browser\n   * Multilingual/RTL ease-of-use\n   * IntelliSense\n   * Great color schemes (steal the popular ones)\n   * Smart line wrapping (`M-q` in Emacs)\n   * Quickly find functions, methods, files, whatever\n   * Snippets\n   * Image and SVG support in buffers\n   * Great built-in documentation\n   * Compatibility modes for Vim, Emacs and Vim (help them wean off)\n   * Customization GUI\n   * Search and replaces\n   * VCS integration\n   * As much as possible from\n     [Code Bubbles](http://www.cs.brown.edu/people/acb/codebubbles_site.htm)\n   * Anything else to improve...\n     * Latex build/refresh cycle\n     * Django refresh cycle\n\n## Building ##\n\nBuild and install the [S-Lang library](http://www.jedsoft.org/slang/) and make sure that the `pkg-config slang` command succeeds.\n\nBuild the v8 library:\n\n    $ python tools/scons-local/scons.py\n\n(Note: I needed the extra `arch=x64` parameter on Mac OS X 10.6 with Mac Ports.)\n\nThen build the noble executable into `src/noble`:\n\n    $ python tools/scons-local/scons.py src\n\n(Again, I needed arch=x64 here as well on Mac OS X.)\n\n## Hacking ##\n\n### Grand decisions ###\n\n* Simple, simple, simple.\n* Write as little code as possible. Write high-level things first and\n  then write the smaller functions needed for them to work.\n* Steal a lot from Node.js.\n* Design things a lot like Emacs and Vim designed things. (They got a\n  lot of stuff right.)\n* Start with basic, generic implementations. Redesign later.\n* Write minimal kernel in C. Optimize later by porting JavaScript to\n  C. Or start with some great C libraries made available to JavaScript\n  -- whichever gets Noble off the ground faster.\n* Favor open, global namespaces instead of hiding properties. Meaning,\n  do things the Emacs way where everything is a global, not the Java\n  way with interfaces and data-\n   * _But won't this mean add-ons are very hack-ish?_ Hopefully not.\n     Let's build packages to address _stories_ -- e.g., \"This package\n     enables fast buffer-switching.\"\n* Plan for some kind of testing system.\n\n### Layers of Noble ###\n\nNoble should have smart, well-planned out layers. Here's what they are\nin order from lowest-level (C) to highest-level (user interface):\n\n1. A small kernel with minimal functions written in C which are made\n   available to JavaScript, such as `eval`, `loadFile` and `reallyExit`.\n1. An event loop which fires events on keystrokes, system signals, and\n   a tick every 1 second. (Use libev, like Node.)\n1. A basic display system (main area, status bar, command line/minibuffer)\n1. Buffer management\n1. Buffer-rendering system\n1. GUI adaptation\n\n### Places where serious help will be needed ###\n\nI have a good idea of what's _possible_ but I don't have the\nimmediate knowledge of how to _do_ most of it.\n\nHere's a list of things where I can write an initial alpha-level\nimplementation but will need a better long-term implementation\n(preferably written by an expert):\n\n* C++ (compiling, cross-platform support, and -- oh -- the language)\n* Build system (v8 uses Scons, I might as well try)\n* File IO\n* Efficient memory management\n* Language parsing\n* The rendering layer\n* OS integration on Linux, Mac OS X and maybe Windows\n* Figuring out how to bundle the core runtime\n\n## Code Style ##\n\n*C++:* Following the [Google C++ Style Guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml), with the exception of allowing `using` directives to make code cleaner.\n\n*JavaScript:* [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)\n\n## Credit ##\n\n* v8\n* Node\n* TODO: List all important links here\n\n### Indirect Contributors ###\n\n* Russell Neches\n* Ryan Dahl (Node.js)\n\n### Stuff ripped off from Node.js ##\n\n* TODO\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fnoble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstatico%2Fnoble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fnoble/lists"}