{"id":40374568,"url":"https://github.com/tmpim/emaccs","last_synced_at":"2026-01-20T11:34:17.040Z","repository":{"id":81349671,"uuid":"277912277","full_name":"tmpim/emaccs","owner":"tmpim","description":"emaccs: for when you wanted a text editor, but got an OS","archived":false,"fork":false,"pushed_at":"2021-01-08T22:54:38.000Z","size":421,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-19T10:03:55.956Z","etag":null,"topics":["scheme"],"latest_commit_sha":null,"homepage":null,"language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tmpim.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}},"created_at":"2020-07-07T20:10:42.000Z","updated_at":"2023-08-19T01:19:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"c7e7a0ff-da35-49c0-b7a2-d0962647be62","html_url":"https://github.com/tmpim/emaccs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tmpim/emaccs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmpim%2Femaccs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmpim%2Femaccs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmpim%2Femaccs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmpim%2Femaccs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tmpim","download_url":"https://codeload.github.com/tmpim/emaccs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmpim%2Femaccs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28602475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T10:46:13.255Z","status":"ssl_error","status_checked_at":"2026-01-20T10:42:51.865Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["scheme"],"created_at":"2026-01-20T11:34:16.088Z","updated_at":"2026-01-20T11:34:17.020Z","avatar_url":"https://github.com/tmpim.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"emaccs\n======\n\nEmaccs is many things:\n\n* A partial implementation of R5RS Scheme on Lua;\n* A modal text editor emulating Vim;\n* A tabbing window manager;\n* A complete reimplementation of CraftOS's shell in Scheme.\n\nScheme 51\n=========\n\nScheme 51 is what emaccs is written in. Scheme 51 is a derivative of\nR5RS scheme, that supports most of the standard features except for\nwhat's listed here:\n\n* Port support is basically entirely missing, but is WIP;\n* `call-with-current-continuation` will never be implemented for\n  ideological reasons\n\nSince R5RS does not _require_ complex numbers, we don't support them\neither. Rational numbers, however, are fully supported.\n\nThe Scheme 51 [\"runtime\"](/boot/runtime.lua) consists of the mortal\nremains of the interpreter that was previously used to boot Scheme 51.\nHowever, the language has since progressed to the point where the\ninterpreter is _not_ capable of booting the compiler! It's only kept\nalive for the implementation of the reader and some runtime support\nfunctions (rationals, primitives that would be unwieldy to implement in\nScheme, etc).\n\nBooting\n-------\n\n\"Booting\" is the process by which Scheme 51 loads and compiles itself.\nThe boot driver was originally a shell script, but is now a Scheme file,\n`/boot.ss`.\n\nThis file can **always** create a new compiler starting from the sources\nand runtime library. Don't lose it!\n\nThe Language\n------------\n\nScheme 51 is standard fare as far as Scheme-like languages go.\nProcedures are created with `(lambda args . body)` forms, all code is\nlists, all lists are cons lists, etc. Here are the notable differences:\n\n### Typing\n\nReport Scheme is a dynamically typed language, and so is Scheme 51, but\nScheme 51 is much laxer when it comes to strong typing than report\nscheme. For example, the domain of `(car)` encompasses any hash-table\nthat has an entry for the number `1`, symbols, etc.\n\n### Documentation\n\nIn a (futile) effort to be self-documenting, Scheme 51 compiles\nprocedures of the form below into a Lua table with `doc` and `args`\nfields, containing the documentation string and a quoted representation\nof the arguments respectively.\n\n```scheme\n  (lambda args\n    \"Documentation string\"\n    body)\n```\n\nThis documentation can be accessed with `documentation-for-procedure`.\nThese \"documented procedures\" behave normally: they can be called, can\nbe applied, respond #t to `procedure?`, etc.\n\n### The module system\n\nScheme 51's implementation of `(use-modules)` tries to (running on\nComputerCraft) pre- and re-compile files when they've changed. This\nentails some weirdness. For example, if your module has any \"main\" code,\nyou damn better put it in a function!\n\nThe `(phase)` parameter indicates whether a module is being compiled\n(`(= (phase) 'compiling)`) or executed (`(= (phase) loading)`). Code is\nsubject to run multiple times under different phases.\n\n### Using the compiler\n\nThe compiler presents itself with the regular Scheme interface for\ndealing with code at runtime, namely `(eval)` and `(load)`. However, it\nhas some extra functionality:\n\n* `(compile-and-load expression)` - Under the hood, this is what `(eval)` is\nimplemented with. It compiles a Scheme expression to a procedure, using\nLua's `load` function. This procedure can be stored and called any\nnumber of times. Instead of `(lambda () (eval e))`, try\n`(compile-and-load e)`!\n\n* `(compile-file path)` - Compile a Scheme _file_ to a Lua chunk, and\nprint the result to standard output. This is used for booting and\nprecompiling modules.\n\n* `(escape-symbol s)` - Turn a Scheme symbol into a string that\nrepresents the Lua identifier that will be used to represent that\nsymbol.\n\n* `(repl)` - A simple REPL with no fanciness. Suitable for debugging.\n\nDisclaimer\n==========\n\nThis program is not a program of honour.\n\nNo highly esteemed procedure is executed here.\n\nWhat is here is dangerous and repulsive to us.\n\nThe danger is still present, in your time, as it was in ours, without\neven the warranty, express or implied, of MERCHANTABILITY or FITNESS FOR\nA PARTICULAR PURPOSE.\n\nThis program is best shunned and left unused, though it is free\nsoftware, and you are welcome to redistribute and modify it under the\nconditions of the BSD 3-clause licence.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmpim%2Femaccs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftmpim%2Femaccs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmpim%2Femaccs/lists"}