Packages add key bindings via configuration snippets. As it turns out,
configuration snippets are not available in legacy fish and only fish
3.0 or newer can use the bind builtin on shell startup.
To support packages that add key bindings in legacy fish, we make a
copy of the user's fish_user_key_bindings function (if there it
exists) and create a new one that when called, will source every
*_key_bindings.fish inside \$fisher_path/conf.d and finally run our
copy of the user's fish_user_key_bindings, if it exists, to preserve
any user defined key bindings.
To be able to run code on shell startup we create a fisher.fish file
inside \$fisher_path/conf.d if running an older version of fish. When
the user upgrades to a supported fish version, we'll automatically
remove this file.
Command line usage help now tells you that running fisher will
update installed packages. Running fisher also commits fishfile
changes, but I couldn't fit all the words on the same line.
Supporting nested directories is an anti-feature. It exists only
so that we can install certain packages that are structured that
way. All functions will share the same scope and location.
Bug was introduced in 7850f78e8a.
When removing a file don't use `functions -q $filename` as a loose
check for a .fish file. Use a string match instead.
`functions -q $filename` will cause the function defined in the file
to be autoloaded (if it wasn't already) which can cause trouble with
some "dubious" packages that run arbitrary code in function files.