-
Notifications
You must be signed in to change notification settings - Fork 83
Design Philosophy
fzf.fish exists to help users find what they often need in a faster, more intuitive way than before by leveraging fzf. This charter guides the shape and evolution of the project.
At the feature level, the design philosophy can be summed up as this (quoting @JorgeBucaran):
Small is beautiful, make each program do one thing well, and use composition.
Less functionality
- means less bugs
- correlates with simpler code
- correlates with faster code
- means less documentation that users have to read
- will make this plugin faster to set up, understand, and master
- means less maintenance burden for me
- means less feature cruft
Concretely, this means being highly selective about what features are added.
What fzf.fish
focuses on is helping users complete the most common patterns of commands more efficiently and accurately. It does not aim to help users execute their commands. It does not aim to cover 100% of fzf use cases, or even 95%. Following the Pareto Principle, my goal is to cover roughly 80% of use cases with 20% of the required features.
This is why all its features have to do with inserting the user's selection into the command line and has no functionality for instant cd
or open with $EDITOR
.
One advantage of focusing on helping users insert entities into their command line each feature can be easily composed into a command to do perform a wide swath of actions. For example, the find file feature can be combined with cd
, vim
, emacs
, code
, rmdir
, ln
--you name it. A command that only cd
s into a directory lacks such flexibility.
It is better to not have a feature than to have a feature that users don't use, can't trust, dislike, find confusing, or competes in a crowded space. Put positively, new features should
- be helpful for a wide swath of users
- work consistently for all users, no matter how they use it or how they configure their environment
- be performant and have a low-friction UX
- intuitive to use
- be innovative - offer a unique solution not offered by another, readily available tool