Git Product home page Git Product logo

mcfly's Introduction

Build Status

McFly - fly through your shell history

screenshot

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)

  1. Install the tap:
    brew tap cantino/mcfly https://github.com/cantino/mcfly
  2. Install mcfly:
    brew install mcfly
  3. Add the following to your ~/.bashrc file:
    if [[ -f "$(brew --prefix)/opt/mcfly/mcfly.bash" ]]; then
      source "$(brew --prefix)/opt/mcfly/mcfly.bash"
    fi
  4. Run . ~/.bashrc or restart your terminal emulator.

Uninstalling with Homebrew

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

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.)
  3. Copy mcfly.bash to a known location.
  4. Add the following to your ~/.bashrc file:
    if [[ -f /path/to/mcfly.bash ]]; then
      source /path/to/mcfly.bash
    fi
  5. Run . ~/.bashrc 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 your ~/.bashrc file:
    if [[ -f /path/to/mcfly.bash ]]; then
      source /path/to/mcfly.bash
    fi
  6. 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:

iterm2 UI instructions

Light Mode

To swap the color scheme for use in a light terminal, set the environment variable MCFLY_LIGHT.

For example, add the following to your ~/.bash_profile:

export MCFLY_LIGHT=TRUE

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

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

mcfly's People

Contributors

cantino avatar marshall avatar bperel avatar gwk avatar f355 avatar markusjevringgoeuro avatar melkor333 avatar greyblake avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.