Skip to content

lasantosr/intelli-shell

Repository files navigation

IntelliShell

Like IntelliSense, but for shells!

intelli-shell demo

IntelliShell acts like a bookmark store for commands, so you don't have to keep your history clean in order to be able to find something useful with ctrl + R.

It currently works on Bash, Zsh, Fish and PowerShell and should be compatible with most Linux, Windows and MacOS.

TL;DR

  1. Install the binaries:

    curl -sSf https://raw.githubusercontent.com/lasantosr/intelli-shell/main/install.sh | bash
  2. Bookmark your first command by typing it on a terminal and using ctrl + b

  3. (optional) Run intelli-shell fetch to download commands from tldr

  4. Hit ctrl + space to begin the journey!

  5. (optional) Check out the tips section below to get some ideas

Features

  • Standalone binaries
  • Autocomplete currently typed command
    • Full Text Search in both command and description with hashtag support on descriptions
  • Find & replace labels of currently typed command
  • Edit bookmarked commands and provide aliases
  • Non-intrusive (inline) and full-screen interfaces
  • Fetch command to parse and store tldr pages (Thanks to them!)
  • Portability. You can use bookmarked commands in any supported shell, as well as exporting and importing elsewhere.

Installation

Remember to bookmark some commands or fetch them after the installation!

To skip profile updates, set INTELLI_SKIP_PROFILE environment variable to 1 before installing.

Bash (Linux)

curl -sSf https://raw.githubusercontent.com/lasantosr/intelli-shell/main/install.sh | bash

After installing it using bash, it should work in any supported shell.

PowerShell (Windows)

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time
irm https://raw.githubusercontent.com/lasantosr/intelli-shell/main/install.ps1 | iex

After installing it with powershell, it should also work on cmd (without hotkeys).

Source

To install from source you'll need to have Rust installed, which is recommended to be installed using rustup.

cargo install intelli-shell --locked

To enable hotkeys, additional steps are required:

Linux

Download source script:

  • Bash / Zsh:

    mkdir -p ~/.local/share/intelli-shell/bin
    curl -sSf https://raw.githubusercontent.com/lasantosr/intelli-shell/main/intelli-shell.sh > ~/.local/share/intelli-shell/bin/intelli-shell.sh
  • Fish:

    mkdir -p ~/.local/share/intelli-shell/bin
    curl -sSf https://raw.githubusercontent.com/lasantosr/intelli-shell/main/intelli-shell.fish > ~/.local/share/intelli-shell/bin/intelli-shell.fish

Edit your profile to source it:

  • Bash / Zsh: ~/.bashrc, ~/.zshrc or ~/.bash_profile

    source ~/.local/share/intelli-shell/bin/intelli-shell.sh
  • Fish: ~/.config/fish/config.fish:

    source ~/.local/share/intelli-shell/bin/intelli-shell.fish
Windows

Download the source script also:

New-Item -Path $env:APPDATA\IntelliShell\Intelli-Shell\data\bin -Type Directory
Invoke-WebRequest -UseBasicParsing -URI "https://raw.githubusercontent.com/lasantosr/intelli-shell/main/intelli-shell.ps1" -OutFile $env:APPDATA\IntelliShell\Intelli-Shell\data\bin\intelli-shell.ps1

Edit your $Profile to execute it:

. $env:APPDATA\IntelliShell\Intelli-Shell\data\bin\intelli-shell.ps1

Usage

You can view supported actions by running intelli-shell -h. Most used standalone commands are:

  • intelli-shell fetch [category] to fetch tldr commands and store them. [category] can be skipped or a valid folder from tldr's pages
  • intelli-shell export to export user-bookmarked commands (won't export tldr's commands)
  • intelli-shell import user_commands.txt to import commands into the user category

Hotkeys

  • ctrl + b bookmark currently typed command
  • ctrl + space show suggestions for current line
  • ctrl + l replace labels of currently typed command
  • esc clean current line, this binding can be skipped if INTELLI_SKIP_ESC_BIND=1

Note: When navigating items, selected suggestion can be deleted with ctrl + d or edited with any of: ctrl + e, ctrl + u or F2

You can customize key bindings using environment variables: INTELLI_BOOKMARK_HOTKEY, INTELLI_SEARCH_HOTKEY and INTELLI_LABEL_HOTKEY

Tips

  • When the search criteria matches an alias or produces a single result, it's automatically autocompleted!

    • The label UI will still be shown if the command contains labels
  • You can alias common commands to store some kind of favorite labels, for example bookmark cd {{path}} and give it a cd alias

    • You can regularly use cd but if you hit ctrl + space it will show your "pinned" folders
  • Long commands or even functions can also be bookmarked

    • For example function custom_echo () { echo "hey: $@"; }; custom_echo {{text}};
  • You can avoid labels to be stored and keep them secret if wrapped between '*' : echo {{*my-secret*}}

  • Label suggestions are stored based on the root command and the label name, which gives you flexibility to decide.

    For these two commands, the same images will be suggested:

    • docker run {{--rm}} {{--interactive}} {{image}}
    • docker rmi {{--no-prune}} {{image}}

    But these two commands will suggest different volumes:

    • docker run --volume {{image-1-volumes}} image-1
    • docker run --volume {{image-2-volumes}} -p {{image-2-ports}} image-2
  • Include hashtags on descriptions like #cool and use them while searching

Wishlist

  • Labels support to store most used labels and select them using a dedicated UI
  • Usability improvements to manage stored commands (including aliases)
  • Support for more terminals
  • Export also labels and UI to filter what to export
  • Deploy to package managers
  • Sync user bookmarks using some public / private Git repo

Alternatives

You might want to have a look at Marker which is pretty similar but requires Python to be installed on your system.

License

IntelliShell is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.