# README
go-prompt
A library for building powerful interactive prompts inspired by python-prompt-toolkit, making it easier to build cross-platform command line tools using Go.
package main
import (
"fmt"
"github.com/c-bata/go-prompt"
)
func completer(d prompt.Document) []prompt.Suggest {
s := []prompt.Suggest{
{Text: "users", Description: "Store the username and age"},
{Text: "articles", Description: "Store the article text posted by user"},
{Text: "comments", Description: "Store the text commented to articles"},
}
return prompt.FilterHasPrefix(s, d.GetWordBeforeCursor(), true)
}
func main() {
fmt.Println("Please select table.")
t := prompt.Input("> ", completer)
fmt.Println("You selected " + t)
}
Projects using go-prompt
- c-bata/kube-prompt : An interactive kubernetes client featuring auto-complete written in Go.
- rancher/cli : The Rancher Command Line Interface (CLI)is a unified tool to manage your Rancher server
- kubicorn/kubicorn : Simple, cloud native infrastructure for Kubernetes.
- cch123/asm-cli : Interactive shell of assembly language(X86/X64) based on unicorn and rasm2
- ktr0731/evans : more expressive universal gRPC client
- CrushedPixel/moshpit: A Command-line tool for datamoshing.
- last-ent/testy-go: Testy Go: A tool for easy testing!
- tiagorlampert/CHAOS: a PoC that allow generate payloads and control remote operating systems.
- abs-lang/abs: ABS is a scripting language that works best on terminal. It tries to combine the elegance of languages such as Python, or Ruby, to the convenience of Bash.
- takashabe/btcli: btcli is a CLI client for the Bigtable. Has many read options and auto-completion.
- ysn2233/kafka-prompt: An interactive kafka-prompt(kafka-shell) built on existing kafka command client
- fishi0x01/vsh: HashiCorp Vault interactive shell
- mstrYoda/docker-shell: A simple interactive prompt for docker
- c-bata/gh-prompt: An interactive GitHub CLI featuring auto-complete.
- docker-slim/docker-slim: Don't change anything in your Docker container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
- rueyaa332266/ezcron: Ezcron is a CLI tool, helping you deal with cron expression easier.
- qingstor/qsctl: Advanced command line tool for QingStor Object Storage.
- segmentio/topicctl: Tool for declarative management of Kafka topics
- chriswalz/bit: Bit is a modern Git CLI
- (If you create a CLI utility using go-prompt and want your own project to be listed here, please submit a GitHub issue.)
Features
Powerful auto-completion
(This is a GIF animation of kube-prompt.)
Flexible options
go-prompt provides many options. Please check option section of GoDoc for more details.
Keyboard Shortcuts
Emacs-like keyboard shortcuts are available by default (these also are the default shortcuts in Bash shell). You can customize and expand these shortcuts.
Key Binding | Description |
---|---|
Ctrl + A | Go to the beginning of the line (Home) |
Ctrl + E | Go to the end of the line (End) |
Ctrl + P | Previous command (Up arrow) |
Ctrl + N | Next command (Down arrow) |
Ctrl + F | Forward one character |
Ctrl + B | Backward one character |
Ctrl + D | Delete character under the cursor |
Ctrl + H | Delete character before the cursor (Backspace) |
Ctrl + W | Cut the word before the cursor to the clipboard |
Ctrl + K | Cut the line after the cursor to the clipboard |
Ctrl + U | Cut the line before the cursor to the clipboard |
Ctrl + L | Clear the screen |
History
You can use Up arrow and Down arrow to walk through the history of commands executed.
Multiple platform support
We have confirmed go-prompt works fine in the following terminals:
- iTerm2 (macOS)
- Terminal.app (macOS)
- Command Prompt (Windows)
- gnome-terminal (Ubuntu)
Links
Author
Masashi Shibata
License
This software is licensed under the MIT license, see LICENSE for more information.
# Functions
Choose to the shortcut of input function to select from string array.
DeleteBeforeChar Go to Backspace.
DeleteChar Delete character under the cursor.
DeleteWord Delete word before the cursor.
FilterContains checks whether the completion.Text contains sub.
FilterFuzzy checks whether the completion.Text fuzzy matches sub.
FilterHasPrefix checks whether the string completions.Text begins with sub.
FilterHasSuffix checks whether the completion.Text ends with sub.
GetKey returns Key correspond to input byte codes.
GoLeftChar Backward one character.
GoLeftWord Backward one word.
GoLineBeginning Go to the beginning of the line.
GoLineEnd Go to the End of the line.
GoRightChar Forward one character.
GoRightWord Forward one word.
Input get the input data from the user and return it.
New returns a Prompt with powerful auto-completion.
NewBuffer is constructor of Buffer struct.
NewCompletionManager returns initialized CompletionManager object.
NewDocument return the new empty document.
NewHistory returns new history object.
NewStandardInputParser returns ConsoleParser object to read from stdin.
NewStderrWriter returns ConsoleWriter object to write to stderr.
NewStdoutWriter returns ConsoleWriter object to write to stdout.
OptionAddASCIICodeBind to set a custom key bind.
OptionAddKeyBind to set a custom key bind.
OptionBreakLineCallback to run a callback at every break line.
OptionCompletionOnDown allows for Down arrow key to trigger completion.
OptionCompletionWordSeparator to set word separators.
OptionDescriptionBGColor to change a background color of description text in drop down suggestions.
OptionDescriptionTextColor to change a background color of description text in drop down suggestions.
OptionHistory to set history expressed by string array.
OptionInitialBufferText to set the initial buffer text.
OptionInputBGColor to change a color of background which is input by user.
OptionInputTextColor to change a color of text which is input by user.
OptionLivePrefix to change the prefix dynamically by callback function.
OptionMaxSuggestion specify the max number of displayed suggestions.
OptionParser to set a custom ConsoleParser object.
OptionPrefix to set prefix string.
OptionPrefixBackgroundColor to change a background color of prefix string.
OptionPrefixTextColor change a text color of prefix string.
OptionPreviewSuggestionBGColor to change a background color which is completed.
OptionPreviewSuggestionTextColor to change a text color which is completed.
OptionScrollbarBGColor to change a background color of scrollbar.
OptionScrollbarThumbColor to change a thumb color on scrollbar.
OptionSelectedDescriptionBGColor to change a background color of description which is selected inside suggestions drop down box.
OptionSelectedDescriptionTextColor to change a text color of description which is selected inside suggestions drop down box.
OptionSelectedSuggestionBGColor to change a background color for completed text which is selected inside suggestions drop down box.
OptionSelectedSuggestionTextColor to change a text color for completed text which is selected inside suggestions drop down box.
OptionSetExitCheckerOnInput set an exit function which checks if go-prompt exits its Run loop.
OptionShowCompletionAtStart to set completion window is open at start.
OptionSuggestionBGColor change a background color in drop down suggestions.
OptionSuggestionTextColor to change a text color in drop down suggestions.
OptionSwitchKeyBindMode set a key bind mode.
OptionTitle to set title displayed at the header bar of terminal.
OptionWriter to set a custom ConsoleWriter object.
# Constants
Matches any key.
Black represents a black.
Blue represents a blue.
Brown represents a brown.
CommonKeyBind is a mode without any keyboard shortcut.
Special.
Cyan represents a cyan.
DarkBlue represents a dark blue.
DarkGray represents a dark gray.
DarkGreen represents a dark green.
DarkRed represents a dark red.
DefaultColor represents a default color.
DisplayBlink set blink (less than 150 per minute).
DisplayBold set bold or increases intensity.
DisplayCrossedOut set characters legible, but marked for deletion.
DisplayDefaultFont set primary(default) font.
DisplayInvisible set invisible.
DisplayItalic set italic.
DisplayLowIntensity decreases intensity.
DisplayRapidBlink set blink (more than 150 per minute).
DisplayReset reset all display attributes.
DisplayReverse swap foreground and background colors.
DisplayUnderline set underline.
EmacsKeyBind is a mode to use emacs-like keyboard shortcut.
Fuchsia represents a fuchsia.
Green represents a green.
Key which is ignored.
LightGray represents a light gray.
Key is not defined.
Purple represents a purple.
Red represents a red.
Aliases.
Turquoise represents a turquoise.
White represents a white.
Yellow represents a yellow.
# Variables
ASCIISequences holds mappings of the key and byte array.
NewStandardOutputWriter returns ConsoleWriter object to write to stdout.
SwitchKeyBindMode to set a key bind mode.
# Structs
ASCIICode is the type contains Key and it's ascii byte array.
ASCIICodeBind represents which []byte should do what operation.
Buffer emulates the console buffer.
CompletionManager manages which suggestion is now selected.
Document has text displayed in terminal and cursor position.
Exec is the struct contains user input context.
History stores the texts that are entered.
KeyBind represents which key should do what operation.
PosixParser is a ConsoleParser implementation for POSIX environment.
PosixWriter is a ConsoleWriter implementation for POSIX environment.
Prompt is core struct of go-prompt.
Render to render prompt information from state of Buffer.
Suggest is printed when completing.
VT100Writer generates VT100 escape sequences.
WinSize represents the width and height of terminal.
# Interfaces
ConsoleParser is an interface to abstract input layer.
ConsoleWriter is an interface to abstract output layer.
# Type aliases
Color represents color on terminal.
Completer should return the suggest item from Document.
DisplayAttribute represents display attributes like Blinking, Bold, Italic and so on.
Executor is called when user input something text.
ExitChecker is called after user input to check if prompt must stop and exit go-prompt Run loop.
Filter is the type to filter the prompt.Suggestion array.
Key is the type express the key inserted from user.go:generate stringer -type=Key.
KeyBindFunc receives buffer and processed it.
KeyBindMode to switch a key binding flexibly.
Option is the type to replace default parameters.