Cell canvas renderer with frame cache and a perceptual 256-colour quantizer; responsive geometry (large/medium/small/too-small); squarified treemap with nested previews, LOD grouping, category colouring and adaptive labels; spatial arrow navigation with stable NodeID selection; zoom and breadcrumbs; modal system (info, help, confirm, save); list, file-type, top-N, scan-info, duplicate and comparison views; live search/filter; mouse support; move-to-trash.
33 lines
740 B
Go
33 lines
740 B
Go
package platform
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
)
|
|
|
|
// startDetached runs a helper program with an argument vector (never a
|
|
// shell), detached from the terminal so it cannot disturb the TUI.
|
|
func startDetached(name string, args ...string) error {
|
|
cmd := exec.Command(name, args...)
|
|
cmd.Stdin, cmd.Stdout, cmd.Stderr = nil, nil, nil
|
|
if err := cmd.Start(); err != nil {
|
|
return err
|
|
}
|
|
go cmd.Wait()
|
|
return nil
|
|
}
|
|
|
|
// checkAbs guards helper invocations: an absolute path can never be parsed
|
|
// as an option by the helper program.
|
|
func checkAbs(path string) error {
|
|
if !filepath.IsAbs(path) {
|
|
return errors.New("refusing relative path")
|
|
}
|
|
if _, err := os.Lstat(path); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|