{"id":15913207,"url":"https://github.com/nagydani/loveputer","last_synced_at":"2025-03-22T19:34:38.130Z","repository":{"id":176718184,"uuid":"657255108","full_name":"nagydani/loveputer","owner":"nagydani","description":"A console-based Lua-programmable computer for children based on löve2d framework.","archived":false,"fork":false,"pushed_at":"2025-03-05T20:39:03.000Z","size":3661,"stargazers_count":4,"open_issues_count":4,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-18T14:06:16.117Z","etag":null,"topics":["android","cli","education","lua"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nagydani.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2023-06-22T16:49:28.000Z","updated_at":"2025-03-05T20:39:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"22a5b995-11a6-4999-a1c4-1ac8c2ffacd6","html_url":"https://github.com/nagydani/loveputer","commit_stats":null,"previous_names":["nagydani/loveputer"],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nagydani%2Floveputer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nagydani%2Floveputer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nagydani%2Floveputer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nagydani%2Floveputer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nagydani","download_url":"https://codeload.github.com/nagydani/loveputer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245013743,"owners_count":20547175,"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":["android","cli","education","lua"],"created_at":"2024-10-06T16:40:23.565Z","updated_at":"2025-03-22T19:34:38.121Z","avatar_url":"https://github.com/nagydani.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Compy\n\nA console-based Lua-programmable computer for children based on\n[LÖVE2D][löve2d] framework.\n\n## Principles\n\n- Command-line based UI\n- Full control over each pixel of the display\n- Ability to easily reset to initial state\n- Impossible to damage with non-violent interaction\n- Syntactic mistakes caught early, not accepted on input\n- Possibility to test/try parts of program separately\n- Share software in source package form\n- Minimize frustration\n\n# Usage\n\nRather than the default LÖVE storage locations (save directory,\ncache, etc), the application uses a folder under _Documents_ to\nstore projects. Ideally, this is located on removable storage to\nenable sharing programs the user writes.\n\nFor simplicity and security reasons, the user is only allowed to\naccess files inside a project. To interact with the filesystem,\na project must be selected first.\n\n## Keys\n\n| Command                                                           | Keymap                                        |\n| :---------------------------------------------------------------- | :-------------------------------------------- |\n| Clear terminal                                                    | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eL\u003c/kbd\u003e                  |\n| Stop project                                                      | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eS\u003c/kbd\u003e |\n| Quit project (stop and close)                                     | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eQ\u003c/kbd\u003e |\n| Reset application to initial state                                | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eR\u003c/kbd\u003e |\n| Exit application                                                  | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEsc\u003c/kbd\u003e                |\n| Pause project                                                     | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003ePause\u003c/kbd\u003e              |\n| Toggle edit/run                                                   | \u003ckbd\u003eF8\u003c/kbd\u003e                                 |\n| **Input**                                                         |                                               |\n| Move cursor horizontally                                          | \u003ckbd\u003e⇦\u003c/kbd\u003e/\u003ckbd\u003e⇨\u003c/kbd\u003e                     |\n| Move cursor vertically                                            | \u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e                     |\n| Go back in command history                                        | \u003ckbd\u003ePageUp\u003c/kbd\u003e                             |\n| Go forward in command history                                     | \u003ckbd\u003ePageDown\u003c/kbd\u003e                           |\n| Move in history (if in first/last line)                           | \u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e                     |\n| Jump to start                                                     | \u003ckbd\u003eHome\u003c/kbd\u003e                               |\n| Jump to end                                                       | \u003ckbd\u003eEnd\u003c/kbd\u003e                                |\n| Jump to line start                                                | \u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003eHome\u003c/kbd\u003e                |\n| Jump to line end                                                  | \u003ckbd\u003eAlt\u003c/kbd\u003e+\u003ckbd\u003eEnd\u003c/kbd\u003e                 |\n| Insert newline                                                    | \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eEnter ⏎\u003c/kbd\u003e           |\n| Delete current line                                               | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eY\u003c/kbd\u003e                  |\n| Duplicate current line                                            | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eD\u003c/kbd\u003e                  |\n| Evaluate input                                                    | \u003ckbd\u003eEnter ⏎\u003c/kbd\u003e                            |\n| **Editor**                                                        |                                               |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _same as Input, except for:_ |                                               |\n| Scroll up                                                         | \u003ckbd\u003ePageUp\u003c/kbd\u003e                             |\n| Scroll down                                                       | \u003ckbd\u003ePageDown\u003c/kbd\u003e                           |\n| Move selection (if in first/last line)                            | \u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e                     |\n| Move selection                                                    | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e     |\n| Replace selection with input                                      | \u003ckbd\u003eEnter ⏎\u003c/kbd\u003e                            |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _additionally_               |                                               |\n| Delete selected block                                             | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eDelete\u003c/kbd\u003e             |\n| Delete selected block (if input is empty)                         | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eY\u003c/kbd\u003e                  |\n| Wipe input                                                        | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eW\u003c/kbd\u003e                  |\n| Load selected content to input (discards previous content)        | \u003ckbd\u003eEsc\u003c/kbd\u003e                                |\n| Insert selected content into input                                | \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eEsc\u003c/kbd\u003e               |\n| Scroll to start                                                   | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003ePageUp\u003c/kbd\u003e             |\n| Scroll to end                                                     | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003ePageDown\u003c/kbd\u003e           |\n| Scroll up by one line                                             | \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003ePageUp\u003c/kbd\u003e            |\n| Scroll down by one line                                           | \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003ePageDown\u003c/kbd\u003e          |\n| Move selection to start                                           | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eHome\u003c/kbd\u003e               |\n| Move selecion to end                                              | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEnd\u003c/kbd\u003e                |\n| Stop editor                                                       | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eS\u003c/kbd\u003e |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _move mode_                  |                                               |\n| Switch to moving (\"pick up\" selection)                            | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eM\u003c/kbd\u003e                  |\n| Move selection                                                    | \u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e                     |\n| Move selection to start                                           | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eHome\u003c/kbd\u003e               |\n| Move selecion to end                                              | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eEnd\u003c/kbd\u003e                |\n| Cancel moving                                                     | \u003ckbd\u003eEsc\u003c/kbd\u003e                                |\n| Move line/block to selection and return to normal mode            | \u003ckbd\u003eEnter ⏎\u003c/kbd\u003e                            |\n| \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; _search mode_                |                                               |\n| Search definitions                                                | \u003ckbd\u003eCtrl\u003c/kbd\u003e+\u003ckbd\u003eF\u003c/kbd\u003e                  |\n| Exit search                                                       | \u003ckbd\u003eEsc\u003c/kbd\u003e                                |\n| Jump to selected definition                                       | \u003ckbd\u003eEnter ⏎\u003c/kbd\u003e                            |\n\n### Projects\n\nA _project_ is a folder in the application's storage which\ncontains at least a `main.lua` file. Projects can be loaded and\nran. At any time, pressing \u003ckbd\u003eCtrl-Shift-Q\u003c/kbd\u003e quits and\nreturns to the console\n\n- `list_projects()`\n\n  List available projects.\n\n- `project(proj)`\n\n  Open project _proj_ or create a new one if it doesn't exist.\n  New projects are supplied with example code to demonstrate the\n  structure.\n\n- `current_project()`\n\n  Print the currently open project's name (if any).\n\n- `run_project(proj?)` / `run(proj?)`\n\n  Run either _proj_ or the currently open project if no\n  arguments are passed.\n\n- `example_projects()`\n\n  Copy the included example projects to the projects folder.\n\n- `close_project()`\n\n  Close currently opened project.\n\n- `edit(file)`\n\n  Open file in editor. If it does not exist yet, a new file will\n  be created. See [Editor mode](#editor)\n\n### Files\n\nOnce a project is open, file operations are available on it's\ncontents.\n\n- `list_contents()`\n\n  List files in the project.\n\n- `readfile(file)`\n\n  Open _file_ and display it's contents.\n\n- `writefile(file, content)`\n\n  Write to _file_ the text supplied as the _content_ parameter.\n  This can be either a string, or an array of strings.\n\n- `runfile(file)`\n\n  Run _file_ if it's a lua script.\n\n### Editor\n\nIf a project is open, the files inside can be edited or new ones\ncreated. Run the `edit()` command to do so.\n\n![edit](./doc/interface/open_edit.apng)\n\nWhen a file is opened, the editor is scrolled to the end by\ndefault, and entered input will be appended to the end.\n\n![hello](./doc/interface/hello.apng)\n\nTo modify an existing line, navigate there with\n\u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e. Then load the text by pressing\n\u003ckbd\u003eEsc\u003c/kbd\u003e, make the desired changes, then send it back with\n\u003ckbd\u003eEnter ⏎\u003c/kbd\u003e\n\n![capitalized](./doc/interface/hello_cap.apng)\n\nHappy with the modifications now, we can quit by pressing\n\u003ckbd\u003eCtrl-Shift-Q\u003c/kbd\u003e\n\n![quit](./doc/interface/quit_editor.apng)\n\n#### Moving\n\nSelect the block you want to move and press \u003ckbd\u003eCtrl-M\u003c/kbd\u003e.\nMove the highlight with \u003ckbd\u003e⇧\u003c/kbd\u003e/\u003ckbd\u003e⇩\u003c/kbd\u003e and hit\n\u003ckbd\u003eEnter ⏎\u003c/kbd\u003e when you found it's new home.\n\n![move1](./doc/interface/move_line.apng)\n![move2](./doc/interface/move_block.apng)\n\n#### Searching\n\nDefinitions can be searched with \u003ckbd\u003eCtrl-F\u003c/kbd\u003e. Pressing\nthis combination switches to search mode, in which the\ndefinitions are listed, and there's a highlight, which can be\nmoved as usual. Hitting \u003ckbd\u003eEnter ⏎\u003c/kbd\u003e returns to editing,\nhighlighting the selected definition. To exit search mode\nwithout moving, press \u003ckbd\u003eEsc\u003c/kbd\u003e.\n\n![search](./doc/interface/search.apng)\n\n\n[löve2d]: https://love2d.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnagydani%2Floveputer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnagydani%2Floveputer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnagydani%2Floveputer/lists"}