Neovim 0.11 was just released. As in previous installments in this series, let’s talk a bit about some of the big highlights! As always, the full list of changes can be found in :h news and in the release notes. Table of Contents Breaking Changes LSP Simpler LSP setup and configuration Builtin autocompletion Improved hover documentation Putting it all together Diagnostics Virtual text handler changed from opt-out to opt-in Virtual lines Defaults More default mappings Terminal Miscellaneous ...| gpanders.com
Ghostty is a new terminal emulator by Mitchell Hashimoto. While a lot has been said about Ghostty’s performance, less discussed is its native platform1 integration which is, in my opinion, its most distinctive and underrated feature. Despite being listed as a key motivating factor in Mitchell’s original introduction, online discussions about Ghostty rarely mention its native integration, and when they do many commenters remain skeptical over its importance or don’t understand what that ...| gpanders.com
Neovim 0.10 was the longest release cycle since the heady days of the 0.5 release. There are a ton of new features in this release (as well as some breaking changes), so be sure to check the full release notes. You can view the release notes directly in Nvim with :h news. The news file includes information on new features, deprecations, and breaking changes. I especially urge plugin authors to read this file carefully.| gpanders.com
I recently received an issue report that ijq was performing slowly. The issue claimed that, when used on a large (16 MB) JSON file, ijq was “too slow to be usable”. I downloaded the test file which was (helpfully) provided in the issue and tried it myself. Even using the most charitable definition, I agree that this classifies as “unusably slow”. Note that in this screen recording I am displaying my key presses to show just how unresponsive ijq is:| gpanders.com
Neovim 0.7 was just released, bringing with it lots of new features (and of course plenty of bug fixes). You can find the full release notes here, but in this post I’ll cover just a few of the new additions. Table of Contents Lua everywhere! Distinguishing modifier keys Global statusline filetype.lua Client-server communication Looking ahead to 0.8 Lua everywhere! Neovim 0.5 saw the introduction of Lua as a first-class citizen in the Neovim ecosystem: Lua could now be used in the user’s i...| gpanders.com
This is part 4 of a 4 part series exploring the structure of the Mach-O file format. Here are links to part 1, part 2, and part 3. When we started this series we didn’t know anything about Mach-O other than some vague idea that it’s a binary file format used by macOS. By now, we have a much better understanding of how Mach-O is laid out and how the operating system uses the information in a Mach-O file to run a program.| gpanders.com
This is part 3 of a 4 part series exploring the structure of the Mach-O file format. Here are links to part 1, part 2, and part 4. We left off with a basic parser that is able to parse the Mach-O header from our file. Now that the bones of our parser are fleshed out, it should be fairly straightforward to parse the rest of the file. Load commands Let’s take a look at our header again:| gpanders.com
This is part 2 of a 4 part series exploring the structure of the Mach-O file format. Here are links to part 1, part 3, and part 4. Last time, we created our own tiny Mach-O executable. This program doesn’t do anything useful, it’s simply the smallest executable we can use to examine what the Mach-O file format looks like. From here on, we’ll write our own primitive parser to examine the contents of our program.| gpanders.com
This is part 1 of a 4 part series exploring the structure of the Mach-O file format. Here are links to part 2, part 3, and part 4. I recently read a great article from Amos over at fasterthanli.me that explored the ELF format for Linux executables. Digging into these kinds of topics in a deep and thorough way has always been super interesting to me, not to mention educational. So, I thought I’d take a stab at doing something similar for Mach-O, the object file format used by macOS.| gpanders.com
UPDATE: macOS 14 (Sonoma) updated its bundled ncurses version to 6.0. This version ships with a tmux-256color entry by default, so the workaround below is no longer needed. macOS ships with an old and very out-of-date version of ncurses (5.7). This version does not contain a terminfo entry for tmux-256color, the preferred TERM value when using tmux. If you installed tmux via Homebrew or MacPorts, then you will also have a newer version of ncurses (6.| gpanders.com
I have always been a bit of a nerd about note taking and knowledge management systems. I read David Allen’s Getting Things Done with relish, and I’ve obsessively experimented with every iteration of note taking apps and tools mankind has created. Trello, Todolist, Evernote, Bullet Journal, you name it. I think my obsession in this area is mostly driven by the combination of my love of useless trivia and my immense capacity for forgetfulness, a perfect recipe if ever there was one for deve...| gpanders.com
If you’re unfamiliar with the tool jq, it describes itself as the “sed for JSON”. It’s a powerful command line tool that lets you do complex parsing and manipulation of JSON documents and is extremely useful for testing APIs or analysing JSON datasets. One challenge with jq, however, is finding just the right filter. The query language that jq uses is not always obvious, so typically you’ll spend a bit of time getting it just right to select the data you need.| gpanders.com
Managing so-called “dotfiles” (config files starting with a . in your home directory) in git is a fairly common practice. There are many write-ups on this topic already, but I wanted to share my own workflow as well as some potentially useful tips and tricks.| gpanders.com
Search is a handy feature you might want on your Hugo static site. Hugo does not have any built-in way to provide a search function, but they do offer some suggestions on how to do it yourself. The difficulty with implementing a search function is that it usually requires some kind of server side logic, which is obviously missing when using a static site like Hugo. So any search implementation must be done entirely on the client side.| gpanders.com
I am not an economist by any definition of the word: I haven’t taken a formal economics class since high school. But in the last few years I’ve read a few books that have introduced me to the wonderful, fascinating world of economics, which I now consider one of my favorite subjects. Two books that provide a good grasp on foundational economics are Naked Economics by Charles Wheelan and Undercover Economist by Tim Harford.| gpanders.com
Ever considered setting up and running your very own git server? It’s actually quite easy! In this post, I’ll outline the steps I took to set up my own so that you can give it a try yourself. But first, why might you even want to go through the trouble of setting up your own server?| gpanders.com
You can use the lbdb tool to query an LDAP server within Mutt using the query_command setting. Setting up lbdb is out of scope for this article, although you can find plenty of documentation and examples online (here and here, for instance). One drawback to this approach, however, is that everytime you want to look up a recipient in Mutt you have to query your LDAP server, which can be quite slow.| gpanders.com
Porcelain and Plumbing git commit Plain English: Create a new tree object from the current index and create a new commit object from that tree. The commit object combines a commit message, parent, date, author, committer, and the tree. Update the ref pointed to by HEAD with the hash of the new commit object. Plumbing Once files are in the index (using git add or git update-index) use git write-tree to create a new tree object:| gpanders.com
Tax time is approaching and this year, like every year, it is common to hear people excited about receiving their tax return discussing the exciting purchases they plan on making with this perceived windfall. I want to challenge this conventional wisdom by stating a true but unpopular fact: getting a tax return is not necessarily a good thing and, in most cases, is actually the least desirable financial outcome one can achieve.| gpanders.com
Xilinx recently released their new Vitis tool, which aims to ease the process of accelerating high-level algorithms in applications in an FPGA. It is an ambitious tool with a lot of potential. This guide will help you get started.| gpanders.com
As the Internet continues to grow and age, we are seeing more and more of a phenomenon called “link rot”. Link rot is the all-too-familiar experience of returning to a bookmark or link only to find that it’s no longer maintained, been taken down, or even changed to something else. What can we do about this?| gpanders.com
In 2019, I read 27 books. This was less than last year’s 40 and is not an overly impressive quantity for any serious reader, yet I’m happy with both the amount and the content that I read this year. Below, I’ll give a brief summary of my favorites.| gpanders.com
When writing Markdown it is common to have code blocks within your document that look something like this: This is a code block: ```bash echo "Hello, world!" ``` One of the great features of Emacs’ Org mode is its ability to evaluate blocks of code from within the editing environment. I always appreciated this feature about Org mode which got me to thinking about implementing something similar in Vim.| gpanders.com
This post was inspired by the tool um. I decided to try my hand at making my own lightweight implementation using just a shell function. I decided to name my tool ual as a nod to the fact that it complements man.| gpanders.com
This post contains a step-by-step walk through on booting Linux on Xilinx’s ZCU102 MPSoC evaluation board.| gpanders.com
The “Birthday Problem” is a classic in introductory probability theory, and it never fails to impress the newly initiated. The problem goes like this: How many people do you need to have in one room for the probability that at least 2 people in that room share a birthday to be 50%? The answer may surprise you. Before we get to the answer though, let’s go real briefly into the math behind it.| gpanders.com
Update (6/18/2019): Since writing this post I have released a tool called pushbroom that should make all of this easier and a bit more robust.| gpanders.com
This is a companion article to my talk at Neovimconf 2023. I have been using Vim/Neovim as my full time text editor for close to 10 years. I’ve spent a lot of time in the terminal and have become very aware of the many flaws and idiosyncrasies of this bizarre platform. But I also think it gets a lot of things right! And I’m not alone in this belief: terminal based tools are still widely popular even in the presence of many alternatives (the StackOverflow developer survey shows that Neovim...| gpanders.com