cantino/mcfly
Fly through your shell history. Great Scott!
repo name | cantino/mcfly |
repo link | https://github.com/cantino/mcfly |
homepage | |
language | Rust |
size (curr.) | 662 kB |
stars (curr.) | 1599 |
created | 2018-07-15 |
license | MIT License |
McFly - fly through your shell history
McFly replaces your default ctrl-r
Bash history search with an intelligent search engine that takes into account
your working directory and the context of recently executed commands. McFly’s suggestions are prioritized
in real time with a small neural network.
TL;DR: an upgraded ctrl-r
for Bash whose history results make sense for what you’re working on right now.
Features
- Rebinds
ctrl-r
to bring up a full-screen reverse history search prioritized with a small neural network. - Augments your shell history to track command exit status, timestamp, and execution directory in a SQLite database.
- Maintains your normal Bash history file as well so that you can stop using McFly whenever you want.
- Unicode support throughout.
- Includes a simple action to scrub any history item from the McFly database and your shell history files.
- Designed to be extensible for other shells in the future.
- Written in Rust, so it’s fast and safe.
Prioritization
The key feature of McFly is smart command prioritization powered by a small neural network that runs in real time. The goal is for the command you want to run to always be one of the top suggestions.
When suggesting a command, McFly takes into consideration:
- The directory where you ran the command. You’re likely to run that command in the same directory in the future.
- What commands you typed before the command (e.g., the command’s execution context).
- How often you run the command.
- When you last ran the command.
- If you’ve selected the command in McFly before.
- The command’s historical exit status. You probably don’t want to run old failed commands.
Installation
Install with Homebrew (on OS X or Linux)
- Install the tap:
brew tap cantino/mcfly https://github.com/cantino/mcfly
- Install
mcfly
:brew install mcfly
- Add the following to the end of your
~/.bashrc
file:if [[ -r "$(brew --prefix)/opt/mcfly/mcfly.bash" ]]; then source "$(brew --prefix)/opt/mcfly/mcfly.bash" fi
- Run
. ~/.bashrc
or restart your terminal emulator.
Uninstalling with Homebrew
- Remove
mcfly
:brew uninstall mcfly
- Remove the tap:
brew untap cantino/mcfly
- Remove the lines you added to
~/.bashrc
.
Installing manually from GitHub
- Download the latest release from GitHub.
- Install to a location in your
$PATH
. (For example, you could create a directory at~/bin
, copymcfly
to this location, and addexport PATH="$PATH:$HOME/bin"
to your.bashrc
.) - Copy
mcfly.bash
to a known location. - Add the following to the end of your
~/.bashrc
file:if [[ -r /path/to/mcfly.bash ]]; then source /path/to/mcfly.bash fi
- Run
. ~/.bashrc
or restart your terminal emulator.
Install manually from source
- Install Rust 1.29 or later
- Run
git clone https://github.com/cantino/mcfly
andcd mcfly
- Run
cargo install --path .
- Ensure
~/.cargo/bin
is in your$PATH
. - Add the following to the end of your
~/.bashrc
file:if [[ -r /path/to/mcfly.bash ]]; then source /path/to/mcfly.bash fi
- Run
. ~/.bashrc
or restart your terminal emulator.
iTerm2
To avoid McFly’s UI messing up your scrollback history in iTerm2, make sure this option is unchecked:
Settings
A number of settings can be set via environment variables. To set a setting you should add the following snippets to your ~/.bash_profile
.
Light Mode
To swap the color scheme for use in a light terminal, set the environment variable MCFLY_LIGHT
.
export MCFLY_LIGHT=TRUE
VIM Key Scheme
By default Mcfly uses an emacs
inspired key scheme. If you would like to switch to the vim
inspired key scheme, set the environment variable MCFLY_KEY_SCHEME
.
export MCFLY_KEY_SCHEME=vim
Possible Future Features
- Add a screencast to README.
- Learn common command options and autocomplete them in the suggestion UI?
- Sort command line args when coming up with the template matching string.
- Possible prioritization improvements:
- Cross validation & explicit training set selection.
- Learn command embeddings
Development
Running tests
cargo test
Releasing
- Edit
Cargo.toml
and bump the version. - Recompile.
git add Cargo.toml
- Edit CHANGELOG.txt
git ci -m 'Bumping to vx.x.x'
git tag vx.x.x
git push origin head --tags
- Let the build finish.
- Edit the new Release on Github.
- Edit
pkg/brew/mcfly.rb
and update the version and SHAs. (shasum -a 256 ...
) cargo publish