Open
Description
Proposal Details
--- Newer "Interface" Proposal:
https://github.com/golang/term/pull/20/files
// The History interface provides a way to replace the default automatic
// 100 slots ringbuffer implementation.
type History interface {
// Add will be called by Terminal to add a new line into the history.
// An implementation may decide to not add every lines by ignoring calls
// to this function (from Terminal.ReadLine) and to only add validated
// entries out of band.
Add(entry string)
// At retrieves a line from history.
// idx 0 should be the most recent entry.
// return false when out of range.
At(idx int) (string, bool)
}
// In terminal:
// History allows to replace the default implementation of the history
// which contains previously entered commands so that they can be
// accessed with the up and down keys.
// It's not safe to call ReadLine and methods on History concurrently.
History History
Earlier "direct" proposal for reference:
x/term is very nice, it includes a 100 slot history ring buffer, unfortunately entirely private
https://github.com/golang/term/blob/master/terminal.go#L89
it would be nice to let people
// History returns a slice of strings containing the history of entered commands so far.
func (t *Terminal) History() []string {
and
// AddToHistory populates history.
func (t *Terminal) AddToHistory(commands ...string) {
and resize
// NewHistory resets the history to one of a given capacity.
func (t *Terminal) NewHistory(capacity int) {
and allow replacement of last command in history (for instance to replace invalid by validated or canonical variant)
// ReplaceLatest replaces the most recent history entry with the given string.
// Enables to add invalid commands to the history for editing purpose and
// replace them with the corrected version. Returns the replaced entry.
func (t *Terminal) ReplaceLatest(entry string) string {
and control whether lines are automatically added to history (defaults remains true)
// AutoHistory sets whether lines are automatically added to the history
// before being returned by ReadLine() or not. Defaults to true.
func (t *Terminal) AutoHistory(onOff bool) {
if acceptable I'd be happy to make a PR edit: made a PR
Metadata
Metadata
Assignees
Type
Projects
Status
Active