diff --git a/app.go b/app.go index e5c1510e..186cc021 100644 --- a/app.go +++ b/app.go @@ -9,8 +9,6 @@ import ( "os/exec" "os/signal" "path/filepath" - "reflect" - "strconv" "strings" "syscall" "time" @@ -364,85 +362,6 @@ func (app *app) exportFiles() { exportFiles(currFile, currSelections) } -func fieldToString(field reflect.Value) string { - kind := field.Kind() - var value string - - switch kind { - case reflect.Int: - value = strconv.Itoa(int(field.Int())) - case reflect.Bool: - value = strconv.FormatBool(field.Bool()) - case reflect.Slice: - for i := 0; i < field.Len(); i++ { - element := field.Index(i) - - if i == 0 { - value = fieldToString(element) - } else { - value += ":" + fieldToString(element) - } - } - default: - value = field.String() - } - - return value -} - -func (app *app) exportOpts() { - e := reflect.ValueOf(&gOpts).Elem() - - for i := 0; i < e.NumField(); i++ { - // Get name and prefix it with lf_ - name := e.Type().Field(i).Name - name = fmt.Sprintf("lf_%s", name) - - // Skip maps - if name == "lf_keys" || name == "lf_cmdkeys" || name == "lf_cmds" { - continue - } - - // Get string representation of the value - if name == "lf_sortType" { - var sortby string - - switch gOpts.sortType.method { - case naturalSort: - sortby = "natural" - case nameSort: - sortby = "name" - case sizeSort: - sortby = "size" - case timeSort: - sortby = "time" - case ctimeSort: - sortby = "ctime" - case atimeSort: - sortby = "atime" - case extSort: - sortby = "ext" - } - - os.Setenv("lf_sortby", sortby) - - reverse := strconv.FormatBool(gOpts.sortType.option&reverseSort != 0) - os.Setenv("lf_reverse", reverse) - - hidden := strconv.FormatBool(gOpts.sortType.option&hiddenSort != 0) - os.Setenv("lf_hidden", hidden) - - dirfirst := strconv.FormatBool(gOpts.sortType.option&dirfirstSort != 0) - os.Setenv("lf_dirfirst", dirfirst) - } else { - field := e.Field(i) - value := fieldToString(field) - - os.Setenv(name, value) - } - } -} - func waitKey() error { cmd := pauseCommand() @@ -466,7 +385,7 @@ func waitKey() error { // & No Yes No No No Do nothing func (app *app) runShell(s string, args []string, prefix string) { app.exportFiles() - app.exportOpts() + exportOpts() cmd := shellCommand(s, args) diff --git a/main.go b/main.go index d25918ee..240f9864 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "net" "os" "path/filepath" + "reflect" "runtime" "runtime/pprof" "strconv" @@ -62,6 +63,86 @@ func exportEnvVars() { os.Setenv("LF_LEVEL", strconv.Itoa(level)) } +// used by exportOpts below +func fieldToString(field reflect.Value) string { + kind := field.Kind() + var value string + + switch kind { + case reflect.Int: + value = strconv.Itoa(int(field.Int())) + case reflect.Bool: + value = strconv.FormatBool(field.Bool()) + case reflect.Slice: + for i := 0; i < field.Len(); i++ { + element := field.Index(i) + + if i == 0 { + value = fieldToString(element) + } else { + value += ":" + fieldToString(element) + } + } + default: + value = field.String() + } + + return value +} + +func exportOpts() { + e := reflect.ValueOf(&gOpts).Elem() + + for i := 0; i < e.NumField(); i++ { + // Get name and prefix it with lf_ + name := e.Type().Field(i).Name + name = fmt.Sprintf("lf_%s", name) + + // Skip maps + if name == "lf_keys" || name == "lf_cmdkeys" || name == "lf_cmds" { + continue + } + + // Get string representation of the value + if name == "lf_sortType" { + var sortby string + + switch gOpts.sortType.method { + case naturalSort: + sortby = "natural" + case nameSort: + sortby = "name" + case sizeSort: + sortby = "size" + case timeSort: + sortby = "time" + case ctimeSort: + sortby = "ctime" + case atimeSort: + sortby = "atime" + case extSort: + sortby = "ext" + } + + os.Setenv("lf_sortby", sortby) + + reverse := strconv.FormatBool(gOpts.sortType.option&reverseSort != 0) + os.Setenv("lf_reverse", reverse) + + hidden := strconv.FormatBool(gOpts.sortType.option&hiddenSort != 0) + os.Setenv("lf_hidden", hidden) + + dirfirst := strconv.FormatBool(gOpts.sortType.option&dirfirstSort != 0) + os.Setenv("lf_dirfirst", dirfirst) + } else { + field := e.Field(i) + value := fieldToString(field) + + os.Setenv(name, value) + } + } +} + func startServer() { cmd := detachedCommand(os.Args[0], "-server") cmd.Dir = gUser.HomeDir diff --git a/nav.go b/nav.go index 8115c6cb..85bb5314 100644 --- a/nav.go +++ b/nav.go @@ -427,6 +427,7 @@ func (nav *nav) preview() { var reader io.Reader if len(gOpts.previewer) != 0 { + exportOpts() cmd := exec.Command(gOpts.previewer, curr.path, strconv.Itoa(nav.height)) out, err := cmd.StdoutPipe()