Skip to content

Commit

Permalink
use trailing '/' in 'setlocal' for subdir matching
Browse files Browse the repository at this point in the history
  • Loading branch information
gokcehan committed Aug 24, 2023
1 parent 217c7ae commit bd5d661
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 23 deletions.
2 changes: 1 addition & 1 deletion eval.go
Original file line number Diff line number Diff line change
Expand Up @@ -904,7 +904,7 @@ func (e *setExpr) eval(app *app, args []string) {
}

func (e *setLocalExpr) eval(app *app, args []string) {
path := filepath.Clean(replaceTilde(e.path))
path := replaceTilde(e.path)
if !filepath.IsAbs(path) {
app.ui.echoerr("setlocal: path should be absolute")
return
Expand Down
71 changes: 49 additions & 22 deletions opts.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package main

import "time"
import (
"path/filepath"
"time"
)

type sortMethod byte

Expand Down Expand Up @@ -100,35 +103,55 @@ var gLocalOpts struct {
infos map[string][]string
}

func localOptPaths(path string) []string {
var list []string
list = append(list, path)
for curr := path; !isRoot(curr); curr = filepath.Dir(curr) {
list = append(list, curr + string(filepath.Separator))
}
return list
}

func getSortMethod(path string) sortMethod {
if val, ok := gLocalOpts.sortMethods[path]; ok {
return val
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.sortMethods[key]; ok {
return val
}
}
return gOpts.sortType.method
}

func getSortType(path string) sortType {
method := getSortMethod(path)
option := gOpts.sortType.option
if val, ok := gLocalOpts.dirfirsts[path]; ok {
if val {
option |= dirfirstSort
} else {
option &= ^dirfirstSort
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.dirfirsts[key]; ok {
if val {
option |= dirfirstSort
} else {
option &= ^dirfirstSort
}
break
}
}
if val, ok := gLocalOpts.hiddens[path]; ok {
if val {
option |= hiddenSort
} else {
option &= ^hiddenSort
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.hiddens[key]; ok {
if val {
option |= hiddenSort
} else {
option &= ^hiddenSort
}
break
}
}
if val, ok := gLocalOpts.reverses[path]; ok {
if val {
option |= reverseSort
} else {
option &= ^reverseSort
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.reverses[key]; ok {
if val {
option |= reverseSort
} else {
option &= ^reverseSort
}
break
}
}
val := sortType{
Expand All @@ -139,15 +162,19 @@ func getSortType(path string) sortType {
}

func getDirOnly(path string) bool {
if val, ok := gLocalOpts.dironlys[path]; ok {
return val
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.dironlys[key]; ok {
return val
}
}
return gOpts.dironly
}

func getInfo(path string) []string {
if val, ok := gLocalOpts.infos[path]; ok {
return val
for _, key := range localOptPaths(path) {
if val, ok := gLocalOpts.infos[key]; ok {
return val
}
}
return gOpts.info
}
Expand Down

0 comments on commit bd5d661

Please sign in to comment.