Skip to content

Latest commit

 

History

History
146 lines (111 loc) · 7.92 KB

README.md

File metadata and controls

146 lines (111 loc) · 7.92 KB

go-prompt

Go Report Card Software License GoDoc tests

A library for building powerful interactive prompts inspired by python-prompt-toolkit, making it easier to build cross-platform command line tools using Go.

This is a fork from the original here with several breaking changes

Fixes and changes in this fork:

  • Fix errors where the selected index can be greater than the number of suggestions
  • Support setting max widths for text and description so long text doesn't take up the entire screem
  • Allow setting multiple separator words (breaking change)
  • Try to avoid panicking in PosixParser if there's no /dev/tty (from this PR)
  • Add placeholder field to show a usage example for suggestions
  • Add completion field to show different text for suggestion and selection
  • Add metadata field to attach arbitrary metadata to a suggestion
  • Pass selected suggestion to executor (breaking change)
  • Instead of calling os.Exit on SIGTERM, return control to the calling app to decide how to handle the result (breaking change)
  • When choosing a selection, overwrite the entire text intead of keeping text past the cursor
  • Run completer function asynchronously. This allows for making expensive actions like calling an API in the completer without blocking the user from typing
  • Fix scrollbar height calculations so that the scrollbar never shows that it's at the very top or the very bottom unless there are no more items to scroll to
  • Remove deprecated Input function (breaking change)
  • Improve long line handling on Windows terminal (from this commit)
  • Update all dependencies
  • Change overwrite option to overwrite entire line
  • Add status bar. Largely taken from here
package main

import (
	"fmt"
	"github.com/aschey/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

Features

Powerful auto-completion

demo

(This is a GIF animation of kube-prompt.)

Flexible options

go-prompt provides many options. Please check option section of GoDoc for more details.

options

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.

keyboard 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.

History

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.