The simple Haskell editor for Windows built with Javascript
- About Haskedit
- Use Haskedit
- Use on non-Windows platforms
- Should You Use Haskedit
- Long Term Support?
- Future Additions
Haskedit 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 required 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 was truly happy with. Haskedit supports syntax highlighting, automatic code formatting and some quality of life shortcuts.
Haskedit is by no means the best Haskell editor, but it has served me well and overall I've been quite pleased with it.
The 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
the output. It does not support running cli applications like ghci, however for ghci in particular, haskedit will spawn a new cmd.exe
window.
Haskedit is largely reliant on keybindings for manipulating the window and editor. The default bindings are described below, however custom bindings can be created within
the haskedit_modules/bindings.js
file (described further below).
The experience of Haskedit can be greatly improved by setting Haskedit as the default application for all .hs
files.
Action | Binding |
---|---|
Quit Haskedit (Unless file unsaved) | Ctrl + Q |
Maximize Haskedit | Ctrl + Arrow Up |
Restore Haskedit if maximized, else Minimize Haskedit | Ctrl + Arrow Down |
Toggle Command Prompt | Ctrl + Space |
Action | Binding |
---|---|
Save currently open file | Ctrl + S |
Launches ghci in a new cmd.exe window (for the current file) |
Ctrl + I |
Haskedit shortcuts are defined as boolean functions and can be found in the haskedit_modules/bindings.js
file. To customize them use the KeyboardEvent
object passed into each function.
/**
* The default key binding for the window quit functionality. Quits on ctrl + q
*
* @param {KeyboardEvent} e The keyboard event object from the keydown event.
* @returns {boolean} If the binding is currently pressed
*/
function quit(e) {
return e.ctrlKey && e.key === 'q';
}
Due to the nature of Haskedits terminal 'emulator' as mentioned above, some system commands are overridden. Their functionality should remain the same, however it is best to be aware that they may not perform exactly as you would expect.
Command | Function |
---|---|
cd |
Changes the current working directory (managed by Haskedit) |
cls |
Clears the console (permanent). |
Command | Function |
---|---|
set-indentation-level [num ] |
sets the editor indentation level. |
save [string ] [--force ] |
saves the specified or currently open file. |
open [string ] |
opens the specified file in the editor. |
quit [--force ] |
quits the application. |
ghci [arg string ] |
opens a new cmd.exe to launch a ghci environment. |
Currently, Haskedit only supports Windows due to hard coded file paths and executables. I suspect this will remain the case as I have no reason to change this, however if you are desperate to use it on a non-Windows platform these issues shouldn't take to long to resolve.
The 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 editors 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, however it is lacking very key features like syntax checking (though this can mostly be done through ghci) and tab completion.
As this project was largely built in one day, I do not intend to support it for longer than I need to use Haskell.
The final additions that I aim to add at some point in the near future.
- Resize the terminal