71 lines
1017 B
Go
71 lines
1017 B
Go
package input_parser
|
|
|
|
var commandsTab []string
|
|
var prevInput string
|
|
var tabIndex int
|
|
|
|
func AutoComplete(input string) string {
|
|
|
|
inputLength := len(input)
|
|
|
|
if inputLength == 0 {
|
|
return input
|
|
}
|
|
|
|
if tabIndex+2 > len(commandsTab) {
|
|
tabIndex = -1
|
|
}
|
|
|
|
if prevInput == input {
|
|
tabIndex = tabIndex + 1
|
|
|
|
prevInput = commandsTab[tabIndex]
|
|
return commandsTab[tabIndex]
|
|
}
|
|
|
|
prevInput = input
|
|
tabIndex = 0
|
|
|
|
currentCommands := []string{
|
|
"cat",
|
|
"cd",
|
|
"cp",
|
|
"echo",
|
|
"head",
|
|
"help",
|
|
"ls",
|
|
"man",
|
|
"mv",
|
|
"pwd",
|
|
"rm",
|
|
"tail",
|
|
"touch",
|
|
}
|
|
|
|
var commandsWorking []string
|
|
|
|
for _, currentCommand := range currentCommands {
|
|
|
|
if len(currentCommand) < inputLength {
|
|
continue
|
|
}
|
|
|
|
currentCommandWithoutEnd := currentCommand[:inputLength]
|
|
|
|
if currentCommandWithoutEnd != input {
|
|
continue
|
|
}
|
|
|
|
commandsWorking = append(commandsWorking, currentCommand)
|
|
}
|
|
|
|
commandsTab = commandsWorking
|
|
|
|
if len(commandsTab) == 0 {
|
|
return input
|
|
}
|
|
|
|
prevInput = commandsTab[0]
|
|
return commandsTab[0]
|
|
}
|