This looks really useful, thanks. Is there a way in VS Code command pallet to show all the Calva related functions?
Ah, yeah definitely seems like some environment issue
I have some of the most useful key bindings added to vspacecode and they seem to work very well. There are lots of useful key bindings in the Evaluation sub-menu
There are still quite a few key bindings to add (I had forgotten how tedious and error prone writing json can be).
I've only needed to over-ride the Calva escape
key binding with space+escape
. I've added a , e l
key binding to clear all evaluations as well
In Cider I can press C-c C-z
(I believe) to jump between the repl and the current source file. Any such thing in Calva?
Currently only in one direction (from editor file to repl) , but I added something yesterday that should make the other direction easy to fix. I believe there is an old issue about this on Github, but if not, I’d welcome you to add one. I’ll add it in my last winter-leave Calva time. It is long overdue.
Here’s a VSIX build where there is a command for opening a file for the current active repl window namespace. Default binding is ctrl+alt+c o
, same as for revealing the output/repl window/file. https://9671-125431277-gh.circle-artifacts.com/0/tmp/artifacts/calva-2.0.145-920-switch-to-editor-for-ns-7996cfb3.vsix
🙏
Is there a Calva command for newline inside current form? I'm trying to get something that feels equivalent to the normal Ctrl+Enter behavior of VS Code (add a newline after the current line). For the purposes of Clojure code it would be nice to stay in the current form. So would be something like this:
(let [k1 |v2])
;; Ctrl+Enter at the |
(let [k1 v2
|])
;; cursor is at pipe
Not sure I follow. What should happen?
Right now, it does something like:
(let [k1 |v2])
;; Ctrl+Enter when cursor is at |
(let [k1 v2])
|
;; Cursor goes to start of a newline
Basically, I'm still trying to get the hang of Paredit and was hoping to find some key bindings that can feel more like the commands that are native in VS Code.
I think in Parinfer, I get the behavior I showed in the first snippet, but I've been running into bugs with it, so I was going to give up and try Paredit again.
I think I need to first figure out if that first snippet is a before or after picture. 😀 Jokes aside, I need to see what it looks like before and what it looks like after the command is issued.
Sorry, now I see where the confusion is. The first snippet is a before and after. I'll try to break it apart more: Before: (cursor position at |)
(let [k1 |v1])
After: (Ctrl+Enter)
(let [k1 v1
|])
Cursor is now at |, which is on a new line, but still enclosed in the same form as before.Interesting. I have so many questions. But also an answer, this command does not exist yet. But I think it would be fun to add it. If you want to do it, I’d be happy to assist.
OK, that's good to know. I'll play around more before deciding if I really want something like that or not.
Main issue for me is being used to non-structural editing (and in Clojure using Parinfer before). I'm more used to VS Code's traditional navigation and editing bindings. Default behavior of Calva has thrown me for a loop. But I think it's just something I need to practice more.
So appears the correct sequence to do this OOB is paredit.forwardUpSexp (Ctrl+Alt+Down) then Enter
That would result in
(let [k1 v1]
|)
… I think.Forward to List End/Close (`ctrlt+end`), then enter
.Ah, yes good catch. Thanks again!
I think there might be some extension that lets you compose commands and bind to shortcuts.
I’m still a bit confused about the “normal” behaviour of ctrl+enter
. On my machine that isn’t bound to anything in the editor.
I'm on Windows, which could be the difference
"Insert Line Below" is the command it's bound to
Ah, yes, that’s cmd+enter
on mac. Never used it, even though o
is in my synapses when using Vim. I think your mapping of that to structural is nice. If it wasn’t that we want the evaluation commands to be super accessible, I think it would make total sense to bind like you are thinking there.
Maybe platform differences are part of my troubles. At least from the standpoint of a Windows VS Code user, a lot of the default bindings have surprising behavior to me. e.g. Ctrl+Left/Ctrl+Right are by default move forward/backward by word. Whereas in Calva they default to paredit.barfForward and paredit.slurpForward. I expected navigation rather than editing commands for those shortcuts.
Yes, we have been optimising for using the same shortcuts cross-platform, but have started to regret that a bit. And ctrl+left/right
isn’t even very available on Mac… https://calva.io/quirks/#macos-and-the-slurp-and-barf-keyboard-shortcuts
I'm sure bindings are something where you'll never please anyone too. I'm going to keep trying to familiarize myself with the commands and see if I end up finding some bindings that feel more natural for me.
I appreciate the help!
I appreciate the feedback and reminder to revisit the current setup for this. VS Code (probably guided by prior art) has decided to differentiate, and I think Calva should probably follow in those steps.