{"id":18185980,"url":"https://github.com/secretsheppy/haskedit","last_synced_at":"2026-04-29T06:36:59.508Z","repository":{"id":259326795,"uuid":"872160438","full_name":"SecretSheppy/haskedit","owner":"SecretSheppy","description":"The simple Haskell editor for Windows","archived":false,"fork":false,"pushed_at":"2024-11-27T23:40:49.000Z","size":227,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T12:50:08.717Z","etag":null,"topics":["code-editor","ghc","ghci","haskell","nwjs","nwjs-application","simple","text-editor"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/SecretSheppy.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":"2024-10-13T23:40:28.000Z","updated_at":"2024-11-27T23:33:06.000Z","dependencies_parsed_at":"2024-10-24T12:34:17.833Z","dependency_job_id":"c5b81f1c-6b8c-42ec-9675-e8f0370cf31c","html_url":"https://github.com/SecretSheppy/haskedit","commit_stats":{"total_commits":33,"total_committers":1,"mean_commits":33.0,"dds":0.0,"last_synced_commit":"d260545e4db065afd4b399f4e1b215e1463cda8b"},"previous_names":["secretsheppy/haskedit"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/SecretSheppy/haskedit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SecretSheppy%2Fhaskedit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SecretSheppy%2Fhaskedit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SecretSheppy%2Fhaskedit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SecretSheppy%2Fhaskedit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SecretSheppy","download_url":"https://codeload.github.com/SecretSheppy/haskedit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SecretSheppy%2Fhaskedit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262879490,"owners_count":23378624,"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":["code-editor","ghc","ghci","haskell","nwjs","nwjs-application","simple","text-editor"],"created_at":"2024-11-02T23:04:16.897Z","updated_at":"2026-04-29T06:36:59.469Z","avatar_url":"https://github.com/SecretSheppy.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Haskedit\n\nThe simple Haskell editor for Windows built with Javascript\n\n![Haskedit Interface](docs/haskedit.webp)\n\n## Contents\n\n- [About Haskedit](#about-haskedit)\n    - [Haskedits Terminal 'Emulator'](#haskedits-terminal-emulator)\n- [Use Haskedit](#use-haskedit)\n    - [Managing the Haskedit Window](#managing-the-haskedit-window)\n    - [Haskedit Command Shortcuts](#haskedit-command-shortcuts)\n    - [Customize Haskedit Shortcuts](#customize-haskedit-shortcuts)\n    - [Haskedit Overridden Commands](#haskedit-overridden-commands)\n    - [Haskedit Terminal Commands](#haskedit-terminal-commands)\n- [Use on non-Windows platforms](#use-on-non-windows-platforms)\n- [Should You Use Haskedit](#should-you-use-haskedit)\n- [Long Term Support?](#long-term-support)\n- [Future Additions](#future-additions)\n\n## About Haskedit\n\nHaskedit is a very simple Haskell editor for Windows that I built (mostly) in a day using Javascript and the nw.js runtime. I built it because I was \nrequired to learn and use Haskell for a few months and having tried most of the freely available existing editors decided that there was nothing I\nwas truly happy with. Haskedit supports syntax highlighting, automatic code formatting and some quality of life shortcuts.\n\nHaskedit is by no means the best Haskell editor, but it has served me well and overall I've been quite pleased with it.\n\n### Haskedits Terminal 'Emulator'\n\nThe haskedit terminal 'emulator' isn't actually a terminal emulator, instead it launches an instance of `cmd.exe` for each native (to windows) command and then listens to\nthe output. It does not support running cli applications like ghci, however for ghci in particular, haskedit will spawn a new `cmd.exe` window.\n\n## Use Haskedit\n\nHaskedit is largely reliant on keybindings for manipulating the window and editor. The default bindings are described below, however custom bindings can be created within\nthe `haskedit_modules/bindings.js` file (described further below).\n\nThe experience of Haskedit can be greatly improved by setting Haskedit as the default application for all `.hs` files.\n\n### Managing the Haskedit Window\n\n| Action                                                | Binding                                 |\n|-------------------------------------------------------|-----------------------------------------|\n| Quit Haskedit (Unless file unsaved)                   | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eQ\u003c/kbd\u003e          |\n| Maximize Haskedit                                     | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eArrow Up\u003c/kbd\u003e   |\n| Restore Haskedit if maximized, else Minimize Haskedit | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eArrow Down\u003c/kbd\u003e |\n| Toggle Command Prompt                                 | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eSpace\u003c/kbd\u003e      |\n\n### Haskedit Command Shortcuts\n\n| Action                                                         | Binding                        |\n|----------------------------------------------------------------|--------------------------------|\n| Save currently open file                                       | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eS\u003c/kbd\u003e |\n| Launches ghci in a new `cmd.exe` window (for the current file) | \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eI\u003c/kbd\u003e |\n\n### Customize Haskedit Shortcuts\n\nHaskedit shortcuts are defined as boolean functions and can be found in the `haskedit_modules/bindings.js` file. To customize them use the `KeyboardEvent`\nobject passed into each function.\n\n```js\n/**\n * The default key binding for the window quit functionality. Quits on ctrl + q\n * \n * @param {KeyboardEvent} e The keyboard event object from the keydown event.\n * @returns {boolean} If the binding is currently pressed\n */\nfunction quit(e) {\n    return e.ctrlKey \u0026\u0026 e.key === 'q';\n}\n```\n\n### Haskedit Overridden Commands\n\nDue to the nature of Haskedits terminal 'emulator' as mentioned above, some system commands are overridden. Their functionality should remain the same,\nhowever it is best to be aware that they may not perform exactly as you would expect.\n\n| Command | Function                                                    |\n|---------|-------------------------------------------------------------|\n| `cd`    | Changes the current working directory (managed by Haskedit) |\n| `cls`   | Clears the console (permanent).                             |\n\n### Haskedit Terminal Commands\n\n| Command                           | Function                                          |\n|-----------------------------------|---------------------------------------------------|\n| `set-indentation-level` \\[`num`\\] | sets the editor indentation level.                |                                  \n| `save` \\[`string`\\] \\[`--force`\\] | saves the specified or currently open file.       |\n| `open` \\[`string`\\]               | opens the specified file in the editor.           |                                  \n| `quit` \\[`--force`\\]              | quits the application.                            |                                  \n| `ghci` \\[`arg string`\\]           | opens a new cmd.exe to launch a ghci environment. |          \n\n## Use on non-Windows platforms\n\nCurrently, Haskedit only supports Windows due to hard coded file paths and executables. I suspect this will remain the case as I have no reason\nto change this, however if you are desperate to use it on a non-Windows platform these issues shouldn't take to long to resolve.\n\n## Should You Use Haskedit?\n\nThe answer to this is very simple: **you probably shouldn't**. I built Haskedit because I didn't like or couldn't configure any of the existing\neditors that support Haskell in the way that I wanted, however this doesn't make Haskedit good. It has been very useful and lightweight for me,\nhowever it is lacking very key features like syntax checking (though this can mostly be done through ghci) and tab completion.\n\n## Long Term Support?\n\nAs this project was largely built in one day, I do not intend to support it for longer than I need to use Haskell.\n\n## Future Additions\n\nThe final additions that I aim to add at some point in the near future.\n\n- [ ] Resize the terminal","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecretsheppy%2Fhaskedit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsecretsheppy%2Fhaskedit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecretsheppy%2Fhaskedit/lists"}