59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package ui
|
|
|
|
const maxStackSize = 10
|
|
|
|
// CmdStack tracks users command breadcrumbs.
|
|
type CmdStack struct {
|
|
index int
|
|
stack []string
|
|
}
|
|
|
|
// NewCmdStack returns a new cmd stack.
|
|
func NewCmdStack() *CmdStack {
|
|
return &CmdStack{stack: make([]string, 0, maxStackSize)}
|
|
}
|
|
|
|
// Items returns current stack content.
|
|
func (s *CmdStack) Items() []string {
|
|
return s.stack
|
|
}
|
|
|
|
// Push adds a new item,
|
|
func (s *CmdStack) Push(cmd string) {
|
|
if len(s.stack) == maxStackSize {
|
|
s.stack = s.stack[1 : len(s.stack)-1]
|
|
}
|
|
s.stack = append(s.stack, cmd)
|
|
}
|
|
|
|
// Pop delete an item.
|
|
func (s *CmdStack) Pop() (string, bool) {
|
|
if s.Empty() {
|
|
return "", false
|
|
}
|
|
|
|
top := s.stack[len(s.stack)-1]
|
|
s.stack = s.stack[:len(s.stack)-1]
|
|
|
|
return top, true
|
|
}
|
|
|
|
// Top return top element.
|
|
func (s *CmdStack) Top() (string, bool) {
|
|
if s.Empty() {
|
|
return "", false
|
|
}
|
|
|
|
return s.stack[len(s.stack)-1], true
|
|
}
|
|
|
|
// Empty check if stack is empty.
|
|
func (s *CmdStack) Empty() bool {
|
|
return len(s.stack) == 0
|
|
}
|
|
|
|
// Last returns the last command.
|
|
func (s *CmdStack) Last() bool {
|
|
return len(s.stack) == 1
|
|
}
|