## My extension to filesets: fileset-whole

### Motivation

I was frustrated with the project manager I was using. It didn't do everything I wanted, and it tended to mess up settings in other buffers. I had made a nice (and tricky to code!) plugin that let a certain keysequence launch project commands from any affected buffer. But it wasn't stable. I'd use it for a while, and then find it had disappeared. Or I'd use it on a second project, and it would complain that it couldn't find data about that project. Unstable.

So even though I had contributed a fair bit of code to it and it was the best of the project managers, I was looking for a better way.

Yesterday it dawned on me that emacs' built-in filesets functionality is actually fairly close to what I want. It is a group of files, which is the core of what I wanted. It launches commands wrt them. It organizes them well for use, and allegedly co-operates with other software such as dired+. And it's stable and apparently not buggy.

So I tried filesets out. It didn't serve, because it insisted on certain ways of doing things. Nevertheless, it was tantalizingly close. If only it could be persuaded to do just a few things differently: eval args to commands, not insist on running each command on each file, and keep a little freeform data in addition to the file names, things like that. Minor things, but woven deeply into the fiber of filesets.

I turned it over in my mind most of yesterday, wondering if I should fork the filesets development, or make changes and submit them (often a frustrating experience because it places you at the mercy of someone else's attention and comprehension), or make a personal version (and get out of sync with other development). None appealing.

I realized last night that there was a way to extend filesets instead of working with its assumptions. All I had to do is define another alist from fileset name to data, this one to hold general key-value data instead of just basically file names. Then I could make it store all sorts of associated data with filesets. And of course, I had to rewrite the command runner and some other stuff.

So today I wrote fileset-whole. It basically adds twins of some of filesets' things that didn't do all I wanted:

fileset-whole-alist
Alist of key-value data associated with each fileset, near-twin of filesets-data
fileset-whole-commands
List of commands that can be launched on a fileset as a whole. Like filesets-commands, but I do args differently for various reasons.
fileset-whole-run-cmd
Launcher for commands

One other neat feature: It remembers which fileset an open buffer is associated with (in buffer-local variable fileset-whole-name-here') So already I am not prompted for fileset names nearly as often.

### Current state

So far, no serious problems. The commands work, as far as I've tried them. Now I'm going to switch back to my usual project, klink, but using fileset-whole'.

I haven't published it yet. I'll probably create a git repo for it after I've tried it out myself and fixed anything serious that comes up.