Neovim's vim.keymap.set and similar utilities are very useful for creating and managing keymaps, however they lack some ergonomics when building more complex keymaps that require setting and deleting the keymaps periodically. A simply utility function makes this really clean and easy to do.
Bits and bytes of code
Bytes is my collection of short-form posts, tips, and things I learn as I build software.
ast-grep is a brilliant tool for code search and transformation that I've written about in a previous byte. Finding function calls with specific arguments is an area where ast-grep shines and makes it much easier to understand usage of a specific function invocation throughout your codebase.
I frequently create new GitHub PRs and when contributing to projects I don't often use, especially open source projects, I like to create them using the web to make sure I fill out the PR template properly. Sadly, gh pr create -w just doesn't have the right defaults, so I turned a different way...
In the world of differently named default Git branches (e.g., master, main, trunk, etc.), writing commands that reference the default branch and work everywhere is a pain. Thankfully, we can solve this with a single Git alias.
The nvim_create_augroup and nvim_create_autocmd APIs in Neovim work great for creating auto commands, however they sometimes are a bit cumbersome to use compared to the old Vimscript style augroup command where auto commands inside the augroup block were automatically grouped. Let's recreate this same type of experience in Lua!
In an upcoming Byte I'll be sharing a script that I built which opens pull request URLs based on Git branch names. However to do this correctly, we need to URL encode the input data. With the help of jq and 5 lines of code, we can URL encode any text we need.
ast-grep is an amazing tool for structural code search. With it, you can search for code by it's AST shape, rather than just a simple string or regex search. I've been using it a fair bit at work, and I developed a few scripts that replaced the core logic of the Flashlight project I built last year.
Tmux includes a switch-client command which allows you to switch to the previous or next session which is handy for quickly jumping between open sessions. However, it doesn't behave in the way you might expect as it orders sessions based on most recently visited, rather than when the session was created. For me, this just isn't how I think about my Tmux sessions, so I had to find another way.
If you've ever had to debug a live issue, you may have had to diagnose specific commits to determine if they could have been the cause of the issue. You might have a suspect commit, but how can you easily tell if that commit is included in the release of the app at the time of the issue?
I previously wrote a Byte about the commit-url command that I created and use frequently to copy the GitHub commit URL of the current commit. The main body of that command was determining the remote URL which can now be simplified given the new remote-url command I wrote about yesterday.