Interactive evaluation for Neovim (Clojure, Fennel, Janet, Racket, Hy, MIT Scheme, Guile, Python and more!)
UNLICENSE License
Bot releases are visible (Hide)
Fixed #227, don't insert the :border
key into the HUD window creation call if you're on Neovim < 0.5. The extra key actually causes an error, it's not just ignored if not supported. Extra keys aren't our enemy people, let the maps grow!
This patch release has been brought to you from a moving train. Have a great weekend, I'm off to Wales!
<prefix>ei
by default, same as the Clojure one.Another small update but hopefully a welcome one 😄 that bug in #212 was a doozy, one of the worst I've had to tackle in the project. I'm thankful it wasn't my mistake in the end and I could work around it, but I reaaaly had to go down the rabbit hole to work it out. I recommend checking out the issue thread to understand what was going on, kinda fun!
I'm not really making any major moves on the project right now, I just want to get into steady careful maintenance for a while. Definitely feeling challenged by work which takes away from my remaining focus time each week for OSS. So I'll make sure I spend what little time and energy I have left each week on careful fixes and improvements.
I hope you've all had wonderful weekends! I got my first COVID vaccine 🎉 very thankful that I have access to it now, stay safe out there everyone. Enjoy the rest of your weekend and give yourself time to relax. You rock.
Hello Conjurers! I hope you had a great weekend and your week is off to a good start. Here's a fresh set of fixes, features and improvements to help you get through the Monday. Also, now I have discussions enabled on my repositories and I'm creating one for each release.
.nrepl-port
files laying around in your home directory that Conjure picked up on thinking it was being helpful. (Conjure walks up the directory tree to find a .nrepl-port
to connect to)g:conjure#eval#gsubs
, a generic set of substitutions you can configure for your evaluations. See :h g:conjure#eval#gsubs
for more information, it allows you to make things like comment blocks evalable! You can manipulate your code using Lua string substitutions before it gets evaluated, like a layer of editor local macros at the source code level. #132g:conjure#client#clojure#nrepl#eval#raw_out
which, when toggled on, will strip the ; (out)
prefixes from stdout text, allowing you to pprint code or data and work with it immediately in the log. Avoiding the step of stripping the comment prefix.:h g:conjure#client#clojure#nrepl#connection#auto_repl#cmd
for more information.:help ...
and a specific configuration option to link you right to it!I think that's all for now! There's many smaller commits that aren't very interesting that I left out, but these are hopefully all the things you may find interesting 😄
Have a great day! I'll continue to work on Aniseed's improved module system and Magic Kit, until then, have a great day!
— Ollie ✨
Published by Olical over 3 years ago
Published by Olical over 3 years ago
Hey! No huge features, mostly slight performance tweaks and fixes since I'm mostly working on magic-kit, the Conjure + Aniseed starter kit for Neovim 😄 it's for new people and experienced users alike, hope to share it soon!
aniseed.core/str
function, like Clojure's.Published by Olical over 3 years ago
Hello everyone! I hope you're all having a good week, I'm on a two week break from work and I've accidentally spent a lot of it working on Conjure. Oopsie! That means you all get a new Conjure version though, so yay! Now onto the changes 🎉
:h conjure
for information on this if you're interested. It works really well! Thank you for submitting it @taw10!deftest
forms in Clojure when running the current test #196:h conjure-client-clojure-nrepl
and that issue for the setting you need to change. It has the exact same mappings, but it'll run the tests through kaocha instead of clojure.test!Have a wonderful weekend, get some rest, you're doing great.
Published by Olical over 3 years ago
Hello! I have a late start at work today so I thought I'd take a little time to release the current bundle of fixes and improvements before I dive into any more. I hope you find these useful!
CljRunCurrentTests
to CljRunCurrentTest
, the only breaking change in a long time. I hope this doesn't break things for people but I didn't want to leave it typoed.dev
directory that I use for testing. Also tried to have it detect Fennel but I doubt that'll work.g:conjure#extract#tree_sitter#enabled
for the requirements. So you get to make the most of tree-sitter and bypass all of my paren hunting code if you have a new enough Neovim! This means that we'll maybe be able to add things like Python and Julia #184 support early, but with the caveat of requiring a new Neovim.racket
filetype loading the Racket client and the scheme
filetype loading the Scheme client. The Guile socket file client is still there but no longer the default Scheme client since I think MIT is more ubiquitous and the way it's implemented (stdio) is better for "just open a file and eval". It's easy to switch over to the Guile socket file client if you so wish.filetype
settings overlap (and even flicker between each other! There's race conditions in the racket
filetype
startup for example!).on-exit
hooks to all clients. This is called just before Neovim exits and gives the client some time to tidy up it's things before politely dying. This was mostly in response to #185, if you're experiencing this hanging issue on exit, please open a new issue with as much info as you can! I think it requires a specific setup of OS!racket
filetype
and file extension (.rkt
). Same goes for Scheme being linked to .scm
. This is because the racket
filetype flickers to the scheme
filetype briefly at startup sometimes and we don't want MIT Scheme jumping into your Racket file before being swiftly replaced. You can tweak this config if you so wish or use it yourself to restrict other clients! (see :h conjure
)There were far more commits than features and fixes, I went back and forth on things a fair bit this time. I spent a long time on this one despite the list not being particularly long. Here's hoping the next release will be short and efficient 😄
I can finally deprecate Olical/vim-scheme after about four years of iterating on REPL tooling. It was something that kicked off my obsession with editor <-> REPL interactions and I'm so glad I get to replace it with it's bigger, better descendant project.
I'm really hoping the next release will mostly be bug fixes and improvements to existing clients (especially Clojure! ❤️ my original and only language love). I've done a fair bit of work to broaden the client scope which means more users which means more conversation and help in the community (I hope!).
I've envisioned Conjure as a fulcrum tool in the niche REPL-y language space for a while now (since it went multi-language). I'm hoping I can make the audience broad enough that it begins to take on it's own community momentum, or even (dare I dream it) increase enough sponsorship that I work on it full time here and there. Thank you again to all of my existing sponsors, I think of you when I'm hacking away on a Saturday morning ❤️
Have a great rest of your week everyone!
Published by Olical over 3 years ago
Hello all! A bunch of things in this release! I hope you're having a good weekend so far and this just improves things a little more 🙂
I've also whipped up a YouTube video showing how I work with Conjure, I thought some of you may find that interesting: How I use Conjure and Neovim to interact with Clojure (and more!)
scheme.guile
will match the scheme
or guile
filetypes. #177I think that's everything! I hope these are useful and make things a tiny bit smoother. Enjoy! Have a great rest of your weekend!
Published by Olical over 3 years ago
Hey! So I'm reaaaly sorry for breaking "eval at mark" when I introduced vim-repeat support (#171) in the latest version (thanks for pointing it out @arthropodSeven! #172).
This patch fixes that issue and hooks up "eval at mark" to vim-repeat (if you have it installed) correctly. So you can use <prefix>emF
or whatever then .
to repeat that same mark eval! Handy!
Keep those reports flowing if I break things, I hope it's extremely rare (it seems to be) but I do appreciate reports as and when I slip up.
Published by Olical over 3 years ago
Hello parenthesis conjurers! I hope you're having a good weekend and this version finds you well!
g:conjure#client#clojure#nrepl#test#current_form_names
, allowing you to customise what symbols identify a form as a "test" for running the test under the cursor. This allows you to support other testing tools and macros in Clojure land. Thanks, @mracos!.
(with repeat installed) to repeat any Conjure action. There are probably still some small parts of Conjure which don't hook in perfectly yet, but I'll patch those up over time, 99% are hooked in 😄Enjoy! Have a great rest of your Sunday!
Published by Olical over 3 years ago
A few things in this update! I hope you enjoy and find them useful! And hopefully I've fixed some bugs you didn't know existed, but will now never encounter 🎉
↵
if they ever sneak past. If you see one, please let me know how you did it!keepalt
when opening log windows, fixes #163, so you can use C-^
to hop between your buffers without Conjure's log getting in the way.path-subs
config (see :h conjure
) which fixes #164 and allows you to substitute parts of your paths using Lua patterns, which allows you to go to definition or eval files in remote REPLs on other machines or in Docker containers a little easier. This is a tool to be used alongside the relative root config that already exists.<prefix>ece/ecr/ecw
.And that's all for this one! I hope you enjoy! It's a slightly (by one day) belated birthday present from me to you 😄
Published by Olical almost 4 years ago
Hello everyone! I hope your 2021 is off to a great start! Hopefully these changes bring further joy to the way you work and interact with your projects 😄
conn
table, as requested by wubbalubbadubdub
on Discord. So you can access things like Clojure nREPL message tables in flight with the following code now.(module foo
{require {s conjure.client.clojure.nrepl.state}})
(s.get :conn :state :msgs)
Not the largest update, but hopefully a welcome one! A few things fixed, a few things added, hopefully absolutely nothing broken 😄 enjoy!
Have a great weekend 🎉
Published by Olical almost 4 years ago
Hello everyone! I hope you had a great Christmas (if you celebrate it) and have a wonderful New Year ahead of you (if you celebrate it). Regardless, I hope you're having a good week 😊
marked-form
eval so you can provide the mark name as an argument. Thanks, @giodamelio!" This list configures which filetypes work with Conjure, by default it's all of the default clients.
" If you only use one client and you want to disable the rest, set this list to only contain the filetype you care about.
let g:conjure#filetypes = ["clojure", "janet"]
" And this is how you override a client to use a different one for a filetype.
let g:conjure#filetype#fennel = "conjure.client.fennel.stdio"
" See the text on this in :help conjure for more info!
master -> main
, just in case any of you were explicitly referencing the master
branch for some reason.And that's all for today! Have a good day! You're great and I appreciate you!
Published by Olical almost 4 years ago
Hello everyone! Happy Holidays! I've been sitting on these commits for a while so I thought I'd release it before I started experimenting with things like virtual text 👀
#lang
from Racket evals, it doesn't work in Racket REPLs, only files.I hope you all have a great break from work, stay safe, remember to call your family and loved ones even if you can't physically be with them.
Published by Olical almost 4 years ago
Hey everyone! A relatively small update because it fixes some issues users were encountering when using Conjure on Neovim 0.5 / nightly versions.
Until next time! I'm continuing to focus on stability and hidden improvements more than features, maybe that focus will shift some day soon, but I think focussing on careful small improvements is great for the longevity of the tool.
The main difference here is that Aniseed macros are now found from the correct root directory. So it's truly relative to your source dir now, not the dir above your source.
So if you were using macros and they suddenly stopped working, it's because I fixed a thing that was subtly wrong, you can probably just move your macros into the fnl
directory and adjust your require-macros
calls to be relative to that fnl
directory accordingly.
Published by Olical almost 4 years ago
Hello Conjurers! I hope you've had a great weekend so far and that this release makes it ever so slightly better.
I've finally started to fulfill the promise of Conjure's language agnostic magic by adding another language as well as a huge amount of plumbing that will make it easier to add others.
We have Racket support! Think of it as in beta but released right now, so you can go ahead and use it but I may have to adjust it a fair bit as I get feedback from people who actually use Racket. I've made a best guess at an MVP and how you need it to behave, but I'd love to hear if it's not enough and what you'd need to make it a great replacement for whatever you currently use to interact with Racket.
I've also refactored all of the nREPL code for the Clojure support out into a reusable module, so now we can implement clients on top of netrepl (Janet only really), nREPL (Clojure) and stdio (Racket) much faster than before. So much code reuse!
I did try to implement the Racket support over nREPL with Ogion but I encountered a few issues and didn't have access to xrepl which is basically essential.
By starting a Racket REPL as a sub-process of Neovim we get full access to xrepl which is fantastic. This has allowed me to make the Conjure support just magic enough that you can just open Racket files and start evaluating forms in their given context. The Racket REPL tooling is pretty great!
I've also hooked up K
to documentation lookup, <prefix>ef
to reload the module / file and autocompletion based on the syntax of Racket. It's not full completion right now, but it's a lot better than nothing.
I hope you enjoy! Please do let me know what you think in the Discord (which now has a #racket channel!), I can't wait to hear your feedback!
Published by Olical about 4 years ago
Hello! Thanks for checking in! Another week, another Conjure release 😄
g:conjure#filetype_client
before Conjure loads, you can now actually override Conjure's defaults and set your own filetype to client module mappings. This wasn't working correctly before so it wasn't allowing you to specify that you'd like to evaluate Clojure in markdown files, for example. This now works!print_buffer_size
nREPL configuration. See the Clojure + nREPL help for more information on that one.QuitPre
autocmd, this should prevent the weird issue where trying to close the last window in a tab (thus, closing the tab) was prevented by the HUD being open. Now the HUD will close when you try to close other windows, which I think is okay behaviour.That's all for now! Have a great rest of your weekend! Have a Corg for following along with release notes 🐶
Hello everyone! I'm back! I had a bit of a slow period on Conjure and Aniseed but I thought I'd finally get this release out and get back to faster / smaller releases again. I hope you enjoy!
with_context
by default for Clojure completion. It didn't add much but required a LOT of CPU in some circumstances. Yet another thing for the eventual tree-sitter golden hammer!A lot of the improvements and fixes ended up being in Aniseed but there's still a sizeable amount here. Now I can move onto my next todo items knowing that these improvements aren't sitting hidden away on the develop branch any more!
And with that, I'm off to cook dinner. Enjoy your weekends everyone!