Build Status

McFly - fly through your shell history

screenshot

McFly replaces your default ctrl-r shell 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 where history results make sense for what you're working on right now.

Features

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:

Installation

Install with Homebrew (on OS X or Linux)

  1. Install the tap: bash brew tap cantino/mcfly https://github.com/cantino/mcfly
  2. Install mcfly: bash brew install mcfly
  3. Add the following to the end of your ~/.bashrc or ~/.zshrc file, respectively:

    Bash: bash if [[ -r "$(brew --prefix)/opt/mcfly/mcfly.bash" ]]; then source "$(brew --prefix)/opt/mcfly/mcfly.bash" fi

    Zsh: bash if [[ -r "$(brew --prefix)/opt/mcfly/mcfly.zsh" ]]; then source "$(brew --prefix)/opt/mcfly/mcfly.zsh" fi

  4. Run . ~/.bashrc / . ~/.zshrc or restart your terminal emulator.

Uninstalling with Homebrew

  1. Remove mcfly: bash brew uninstall mcfly
  2. Remove the tap: bash brew untap cantino/mcfly
  3. Remove the lines you added to ~/.bashrc / ~/.zshrc.

Installing manually from GitHub

  1. Download the latest release from GitHub.
  2. Install to a location in your $PATH. (For example, you could create a directory at ~/bin, copy mcfly to this location, and add export PATH="$PATH:$HOME/bin" to your .bashrc / .zshrc.)
  3. Copy mcfly.bash or mcfly.zsh to a known location.
  4. Add the following to the end of your ~/.bashrc or ~/.zshrc file, respectively:

    Bash: bash if [[ -r /path/to/mcfly.bash ]]; then source /path/to/mcfly.bash fi

    Zsh: bash if [[ -r /path/to/mcfly.zsh ]]; then source /path/to/mcfly.zsh fi

  5. Run . ~/.bashrc / . ~/.zshrc or restart your terminal emulator.

Install manually from source

  1. Install Rust 1.29 or later
  2. Run git clone https://github.com/cantino/mcfly and cd mcfly
  3. Run cargo install --path .
  4. Ensure ~/.cargo/bin is in your $PATH.
  5. Add the following to the end of your ~/.bashrc or ~/.zshrc file, respectively:

    Bash: bash if [[ -r /path/to/mcfly.bash ]]; then source /path/to/mcfly.bash fi

    Zsh: bash if [[ -r /path/to/mcfly.zsh ]]; then source /path/to/mcfly.zsh fi

  6. Run . ~/.bashrc / . ~/.zshrc or restart your terminal emulator.

iTerm2

To avoid McFly's UI messing up your scrollback history in iTerm2, make sure this option is unchecked:

iterm2 UI instructions

Settings

A number of settings can be set via environment variables. To set a setting you should add the following snippets to your ~/.bashrc / ~/.zshrc.

Light Mode

To swap the color scheme for use in a light terminal, set the environment variable MCFLY_LIGHT. bash 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. bash export MCFLY_KEY_SCHEME=vim

Possible Future Features

Development

Running tests

cargo test

Releasing

  1. Edit Cargo.toml and bump the version.
  2. Recompile.
  3. git add Cargo.toml
  4. Edit CHANGELOG.txt
  5. git ci -m 'Bumping to vx.x.x'
  6. git tag vx.x.x
  7. git push origin head --tags
  8. Let the build finish.
  9. Edit the new Release on Github.
  10. Edit pkg/brew/mcfly.rb and update the version and SHAs. (shasum -a 256 ...)
  11. cargo publish