-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
96 lines (85 loc) · 1.81 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package main
import (
"fmt"
"os"
"github.com/gdamore/tcell/v2"
"github.com/taybart/fm/config"
"github.com/taybart/fm/display"
"github.com/taybart/fm/fs"
"github.com/taybart/fm/handlers"
"github.com/taybart/log"
)
var conf *config.Config
func main() {
var err error
_, sessionActive := os.LookupEnv("FM_SESSION_ACTIVE")
if sessionActive {
fmt.Println("Nesting sessions is not a wise idea")
os.Exit(0)
}
os.Setenv("FM_SESSION_ACTIVE", "true")
defer os.Unsetenv("FM_SESSION_ACTIVE")
setupLog()
cd := pwd()
cmd := handlers.Command{}
dt, err := fs.Init(conf, cd)
if err != nil {
fmt.Println(err)
log.Fatal(err)
}
display.Init(conf)
defer display.Close()
quit := make(chan bool)
handlers.Init(conf, quit)
go func() {
for {
parent := fs.GetParentPath(cd)
w := display.Window{Current: *(*dt)[cd], Cmd: display.Command(cmd)}
if parentDir, ok := (*dt)[parent]; ok && parent != "" {
w.Parent = *parentDir
}
if childDir, ok := (*dt)[(*dt)[cd].ActiveFile.FullPath]; ok {
w.Child = *childDir
}
display.Draw(w)
event := display.PollEvents()
switch ev := event.(type) {
case *tcell.EventKey:
hr := handlers.Keys(ev, dt, cd)
cd = hr.CD
cmd = hr.Cmd
}
log.Verbose("Current Directory", cd)
}
}()
<-quit
display.Close()
}
func pwd() string {
cd, err := os.Getwd()
if err != nil {
log.Errorln(err)
}
return cd
}
func setupLog() {
var err error
home := os.Getenv("HOME")
log.UseColors(false)
log.SetTimeFmt("2006-01-02 15:04:05.9999")
conf, err = config.Load(home + "/.config/fm/config.json")
if err != nil {
fmt.Println(err)
log.Fatal(err)
}
err = log.SetOutput(conf.Folder + "/fm.log")
if err != nil {
fmt.Println(err)
log.Fatal(err)
}
llevel := log.WARN
if os.Getenv("ENV") == "development" {
llevel = log.DEBUG
}
log.SetLevel(llevel)
}