>> software >> Software Projects

This is a list of programs I either wrote, made major contributions to, or currently maintain.


ScriptLighter is a website that takes the tedium out of casting group readings for plays.

My good friend Bob Stouffer wrote the lion's share of the code, but I have made significant contributions, and it was my idea.

It was inspired by setting up a family reading of "Kings In Judea" from The Man Born To Be King for a Twelve Days of Christmas event, and thinking "I'm spending so much time just figuring out which characters talk to each other and trying to avoid assigning roles that result in a reader talking to themselves. This is totally automatable."

lsp-mode Compatibility With php-language-server

When I first discovered the Language Server Protocol, I was incredibly excited, because I had wanted PHP intelligence in Emacs for over a decade.

When I dropped php-language-server into my setup and hacked up a quick PHP backend for lsp-mode, I discovered that completion at point wasn't working.

That led to this bug report, where I uncovered a corner of lsp-mode that didn't conform to the LSP specification.

Once I understood that was the root cause, the fix wasn't hard to get working.

I now use the official lsp-php backend, but as far as I know, I was the first person to get a PHP language server working in Emacs and publish the fact publically.


As an Emacser, I'm a fan of live-editing wherever possible.

I thus made it possible to live-edit stylesheets, whether they're in CSS, SCSS, or a CSS preprocessor I've never personally heard of.

As that suggests, the technique used to implement it is preprocessor-independent. See the project itself for details.

This work is entirely dependent on Chistopher Wellon's awesome skewer-mode.


A git pre-commit hook that filters stylechecker output so only lines that are modified by the commit are considered erroneous.

It is principally useful for incremental adoption of style guidelines in large codebases that have not observed one previously. Instead of making a large risky block of changes to huge files to clean them up, you just ensure new changes follow the rules.