I'm trying to do more frequent updates, so here's another one. Last post about version 0.3.0
You can see the more complete changelog and download pre built binaries for windows and Linux here.
Some bigger new features and changes I wanted to mention here:
I wasn't planning on adding this any time soon, but one day I just got curious about what options are available for embedding a terminal, and found libvterm, which is also used by NeoVim. Fast forward a few days and Nev has a builtin terminal, supporting multiple shells (PowerShell, Bash, WSL, and more).
As part of this I also added support for rendering bold and italic text, but that is only used for the terminal so far.
You can even run Vim or Nev in terminal mode inside of Nev, although it's not the most performant, so I wouldn't recommend it ^^.
You can read more about it here.
I added a few improvements and new features for LSP integration:
Before now Nev only had very limited ways to lay out windows:
But you couldn't do arbitrary splits like in Vim for example, or a side bar, bottom bar and main panel like in VSCode.
Now you can do all of that and more. You can put splits into tabs (like in Vim) or tabs into splits, with a side bar (like in VSCode), or something else.
The old layouts are still available.
Check out the documentation for more info.
Pretty much all default keybindings for both VS Code and Vim mode are now defined in one config file instead of being defined in a WASM plugin. The commands they use are still implemented in a plugin (except for the builtin commands of course).
Right now you can do a lot by rebinding keys to existing commands, but if you want to implement a keybinding which aligns all cursors in a column you would have to write it in Nim and compile it to WASM. For that you need to install a Nim compiler and Emscripten. This is a lot of work just to create custom keybindings.
I'm not sure yet what solution I want use for this in the long term. So far I'm considering:
Pros:
Cons:
Pros:
Cons:
I don't want to require installing a separate compiler to do basic customization, and I don't like long compile times. So I think long term using the current Nim compiler to compile to WASM isn't the goal.
One option might be Nimony, if it can compile to WASM at some point (maybe it already can?). Compile times should hopefully be much faster because of incremental compilation, although I haven't tried it out yet.
Over the last few weeks I occasionally thought about using Lisp, because the current command syntax is kind of Lisp like, especially if you consider something like the all command:
// In keybindings.json
"s": ["all", [".set-mode", "vim.visual"], [".vim-change-selection", true]],
// In command line
all [".set-mode", "vim.visual"] [".vim-change-selection", true]
How it could look like in Lisp:
; In script
(define "s" (all (.set-mode "vim.visual") (.vim-change-selection true)))
; In command line. The outer most parenthesis could be left out.
all (.set-mode "vim.visual") (.vim-change-selection true)
The current command syntax is very hacky, it's just a word, followed by a space, followed by a space-separated list of JSON values. Trying to turn this into a programming language would result in a mess, but I thought why not try out Lisp?
So a few days ago I created a basic Lisp interpreter (with a lot of help from ChatGPT ^^). It's implemented as a WASM plugin itself.
Here is an example of a command to align cursors.
I'm not committed to this but I at least want to play around with it. If you have any thoughts or ideas please share.
I also created a Discord server, in case someone prefers asking questions there.
I'm not sure yet what I'm going to work on next, so if there is a missing feature that prevents you from trying out Nev, please let me know ^^
Always good to see TUI fans keep on keeping on.
I am so used to seeing the transpose of the color matrix! As in https://github.com/tattoy-org/contrast-experiments , but that also makes me wonder if you support OSC 4 (The query/alteration codes for the 256 color palette)?