add file completion to search

Related #150
This commit is contained in:
Gokcehan 2019-03-14 01:20:06 +03:00
parent 866a7e6a2b
commit 1eedd29546
2 changed files with 45 additions and 2 deletions

View File

@ -321,6 +321,44 @@ func completeCmd(acc []rune) (matches []string, longestAcc []rune) {
return
}
func completeFile(acc []rune) (matches []string, longestAcc []rune) {
s := string(acc)
wd, err := os.Getwd()
if err != nil {
log.Printf("getting current directory: %s", err)
}
files, err := ioutil.ReadDir(wd)
if err != nil {
log.Printf("reading directory: %s", err)
}
var longest string
for _, f := range files {
if !strings.HasPrefix(f.Name(), s) {
continue
}
matches = append(matches, f.Name())
if longest != "" {
longest = matchLongest(longest, f.Name())
} else if s != "" {
longest = f.Name()
}
}
if longest == "" {
longest = s
}
longestAcc = []rune(longest)
return
}
func completeShell(acc []rune) (matches []string, longestAcc []rune) {
s := string(acc)
f := tokenize(s)

View File

@ -839,10 +839,15 @@ func (e *callExpr) eval(app *app, args []string) {
app.ui.cmdPrefix = ""
case "cmd-complete":
var matches []string
if app.ui.cmdPrefix == ":" {
switch app.ui.cmdPrefix {
case ":":
matches, app.ui.cmdAccLeft = completeCmd(app.ui.cmdAccLeft)
} else {
case "/", "?":
matches, app.ui.cmdAccLeft = completeFile(app.ui.cmdAccLeft)
case "$", "%", "!", "&":
matches, app.ui.cmdAccLeft = completeShell(app.ui.cmdAccLeft)
default:
return
}
app.ui.draw(app.nav)
if len(matches) > 1 {