Export options as environment variables (#448)
* Export options as environment variables Any options from gOpts are available via lf_OPTION environment variables. For now it works only on booleans, integers and strings (no array support) * Do not export some of the options * Add support for arrays and fix numbers * Fix comments * Replace 1 and 0 with true and false * Export hidden,reverse,dirfirst and sortby options * Fix comments * Little fix * Simplify boolean conversion
This commit is contained in:
parent
143de6e7eb
commit
25c2f037cb
82
app.go
82
app.go
@ -9,6 +9,8 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
@ -333,6 +335,85 @@ func (app *app) exportFiles() {
|
|||||||
exportFiles(currFile, currSelections)
|
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 {
|
func waitKey() error {
|
||||||
cmd := pauseCommand()
|
cmd := pauseCommand()
|
||||||
|
|
||||||
@ -356,6 +437,7 @@ func waitKey() error {
|
|||||||
// & No Yes No No No Do nothing
|
// & No Yes No No No Do nothing
|
||||||
func (app *app) runShell(s string, args []string, prefix string) {
|
func (app *app) runShell(s string, args []string, prefix string) {
|
||||||
app.exportFiles()
|
app.exportFiles()
|
||||||
|
app.exportOpts()
|
||||||
|
|
||||||
cmd := shellCommand(s, args)
|
cmd := shellCommand(s, args)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user