diff options
author | Joe <rbo@gmx.us> | 2023-12-20 20:20:20 +0100 |
---|---|---|
committer | Joe <rbo@gmx.us> | 2023-12-20 20:20:20 +0100 |
commit | 7984a7e7073cae00a2d9dd5f37a32c3136ba14a4 (patch) | |
tree | 5770101ac639ecc801c2b7b20249a98c1d223cc3 | |
parent | fuck ye (diff) | |
download | hardflip-7984a7e7073cae00a2d9dd5f37a32c3136ba14a4.tar.gz hardflip-7984a7e7073cae00a2d9dd5f37a32c3136ba14a4.tar.bz2 hardflip-7984a7e7073cae00a2d9dd5f37a32c3136ba14a4.tar.xz hardflip-7984a7e7073cae00a2d9dd5f37a32c3136ba14a4.tar.zst hardflip-7984a7e7073cae00a2d9dd5f37a32c3136ba14a4.zip |
refactor
-rw-r--r-- | c_hardflip.go | 23 | ||||
-rw-r--r-- | c_init.go | 2 | ||||
-rw-r--r-- | i_events.go | 62 | ||||
-rw-r--r-- | i_ui.go | 337 |
4 files changed, 215 insertions, 209 deletions
diff --git a/c_hardflip.go b/c_hardflip.go index ca231f7..c3e871a 100644 --- a/c_hardflip.go +++ b/c_hardflip.go @@ -39,7 +39,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * hardflip: src/c_hardflip.go - * Wed Dec 20 10:50:24 2023 + * Wed Dec 20 16:34:51 2023 * Joe * * the main @@ -47,29 +47,22 @@ package main -import ( - // "os" - - "github.com/gdamore/tcell/v2" -) - -type Data struct { +// the main data structure, holds up everything important +type HardData struct { lhost *HostList // dirs *DirList - opts Opts - s tcell.Screen + ui HardUI + opts HardOpts data_dir string - list_start int } func main() { data_dir := c_get_data_dir() - data := Data{ + data := HardData{ c_load_data_dir(data_dir), - Opts{true, true}, - nil, + HardUI{}, + HardOpts{true, true}, data_dir, - 0, } i_ui(&data) } @@ -52,7 +52,7 @@ import ( "path/filepath" ) -type Opts struct { +type HardOpts struct { icon bool loop bool } diff --git a/i_events.go b/i_events.go index 74dbe06..df96cab 100644 --- a/i_events.go +++ b/i_events.go @@ -39,7 +39,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * hardflip: src/i_events.go - * Wed Dec 20 16:17:19 2023 + * Wed Dec 20 16:35:04 2023 * Joe * * the hosts linked list @@ -52,81 +52,69 @@ import ( "github.com/gdamore/tcell/v2" ) -func i_delete_selected(data *Data, sel *uint64) { - host := data.lhost.sel(*sel) - file_path := data.data_dir + "/" + host.Folder + host.Filename - err := os.Remove(file_path) - if err != nil { - } - // TODO: err, confirm -} - -func i_reload_data(data *Data, sel, sel_max *uint64) { +func i_reload_data(data *HardData) { + ui := data.ui data.lhost = c_load_data_dir(data.data_dir) l := data.lhost - *sel_max = l.count() - if *sel >= *sel_max { - *sel = *sel_max - 1 + data.ui.sel_max = l.count() + if ui.sel >= ui.sel_max { + ui.sel = ui.sel_max - 1 } } // screen events such as keypresses -func i_events(data *Data, - sel, sel_max *uint64, - term_size *[2]int) { +func i_events(data *HardData) { var err error - event := data.s.PollEvent() + ui := &data.ui + event := ui.s.PollEvent() switch event := event.(type) { case *tcell.EventResize: - data.s.Sync() + ui.s.Sync() case *tcell.EventKey: if event.Key() == tcell.KeyEscape || event.Key() == tcell.KeyCtrlC || event.Rune() == 'q' { - data.s.Fini() + ui.s.Fini() os.Exit(0) } if event.Rune() == 'j' || event.Key() == tcell.KeyDown { - if *sel < *sel_max - 1 { - *sel += 1 + if ui.sel < ui.sel_max - 1 { + ui.sel += 1 } } if event.Rune() == 'k' || event.Key() == tcell.KeyUp { - if *sel > 0 { - *sel -= 1 + if ui.sel > 0 { + ui.sel -= 1 } } if event.Rune() == 'g' { - *sel = 0 + ui.sel = 0 } if event.Rune() == 'G' { - *sel = *sel_max - 1 + ui.sel = ui.sel_max - 1 } if event.Rune() == 'D' { - i_delete_selected(data, sel) - i_reload_data(data, sel, sel_max) + ui.delete_mode = true + ui.delete_id = ui.sel } if event.Key() == tcell.KeyEnter { - data.s.Fini() - c_exec(*sel, data.lhost) + ui.s.Fini() + c_exec(ui.sel, data.lhost) if data.opts.loop == false { os.Exit(0) } - if data.s, err = tcell.NewScreen(); err != nil { + if ui.s, err = tcell.NewScreen(); err != nil { c_die("view", err) } - if err := data.s.Init(); err != nil { + if err := ui.s.Init(); err != nil { c_die("view", err) } - def_style := tcell.StyleDefault. - Background(tcell.ColorReset). - Foreground(tcell.ColorReset) - data.s.SetStyle(def_style) + ui.s.SetStyle(ui.def_style) } if event.Key() == tcell.KeyCtrlR { - i_reload_data(data, sel, sel_max) + i_reload_data(data) } } } @@ -54,6 +54,18 @@ import ( "golang.org/x/term" ) +type HardUI struct { + s tcell.Screen + list_start int + delete_mode bool + delete_id uint64 + sel uint64 + sel_max uint64 + def_style tcell.Style + bot_style tcell.Style + dim [2]int +} + func i_draw_text(s tcell.Screen, x1, y1, x2, y2 int, style tcell.Style, text string) { @@ -102,81 +114,75 @@ func i_draw_box(s tcell.Screen, x1, y1, x2, y2 int, title string) { i_draw_text(s, x1 + 1, y1, x2 - 1, y2 - 1, style, title) } -func i_bottom_text(s tcell.Screen, t [2]int) { - style := tcell.StyleDefault. - Background(tcell.ColorReset). - Foreground(tcell.ColorGrey) +func i_bottom_text(ui HardUI) { spaces := "" - for i := 0; i < (t[W]) - len(KEYS_HINTS); i++ { + for i := 0; i < (ui.dim[W]) - len(KEYS_HINTS); i++ { spaces += " " } - i_draw_text(s, 0, t[H] - 1, t[W], t[H] - 1, style, spaces + KEYS_HINTS) + i_draw_text(ui.s, + 0, ui.dim[H] - 1, ui.dim[W], ui.dim[H] - 1, + ui.def_style.Dim(true), spaces + KEYS_HINTS) } -func i_draw_zhosts_box(s tcell.Screen, t [2]int, def_style tcell.Style) { +func i_draw_zhosts_box(ui HardUI) { text := "Hosts list empty. Add hosts by pressing (a)" left, right := - (t[W] / 2) - (len(text) / 2) - 5, - (t[W] / 2) + (len(text) / 2) + 5 + (ui.dim[W] / 2) - (len(text) / 2) - 5, + (ui.dim[W] / 2) + (len(text) / 2) + 5 top, bot := - (t[H] / 2) - 3, - (t[H] / 2) + 3 - i_draw_box(s, left, top, right, bot, "") - if left < t[W] / 3 { + (ui.dim[H] / 2) - 3, + (ui.dim[H] / 2) + 3 + i_draw_box(ui.s, left, top, right, bot, "") + if left < ui.dim[W] / 3 { for y := top + 1; y < bot; y++ { - s.SetContent(t[W] / 3, y, ' ', nil, def_style) + ui.s.SetContent(ui.dim[W] / 3, y, ' ', nil, ui.def_style) } } - i_draw_text(s, - (t[W] / 2) - (len(text) / 2), t[H] / 2, right, t[H] / 2, - def_style, text) + i_draw_text(ui.s, + (ui.dim[W] / 2) - (len(text) / 2), ui.dim[H] / 2, right, ui.dim[H] / 2, + ui.def_style, text) } -func i_host_panel(data *Data, t [2]int, - def_style tcell.Style, - sel uint64, sel_max uint64) { - i_draw_box(data.s, 0, 0, - t[W] / 3, t[H] - 2, +func i_host_panel(ui HardUI, lhost *HostList) { + i_draw_box(ui.s, 0, 0, + ui.dim[W] / 3, ui.dim[H] - 2, " Hosts ") - host := data.lhost.head - for i := 0; i < data.list_start && host.next != nil; i++ { + host := lhost.head + for i := 0; i < ui.list_start && host.next != nil; i++ { host = host.next } - for line := 1; line < t[H] - 2 && host != nil; line++ { - style := def_style - if sel == host.ID { - style = tcell.StyleDefault. - Background(tcell.ColorWhite). - Foreground(tcell.ColorBlack) + for line := 1; line < ui.dim[H] - 2 && host != nil; line++ { + style := ui.def_style + if ui.sel == host.ID { + style = ui.def_style.Reverse(true) } spaces := "" - for i := 0; i < (t[W] / 3) - len(host.Folder + host.Name) - 2; i++ { + for i := 0; i < (ui.dim[W] / 3) - len(host.Folder + host.Name) - 2; i++ { spaces += " " } if host.Type == 0 { - i_draw_text(data.s, - 1, line, t[W] / 3, line, + i_draw_text(ui.s, + 1, line, ui.dim[W] / 3, line, style, " " + host.Folder + host.Name + spaces) } else if host.Type == 1 { - i_draw_text(data.s, - 1, line, t[W] / 3, line, + i_draw_text(ui.s, + 1, line, ui.dim[W] / 3, line, style, " " + host.Folder + host.Name + spaces) } - i_draw_text(data.s, - 4, line, t[W] / 3, line, + i_draw_text(ui.s, + 4, line, ui.dim[W] / 3, line, style, host.Folder + host.Name + spaces) host = host.next } - i_draw_text(data.s, - 1, t[H] - 2, (t[W] / 3) - 1, t[H] - 2, - def_style, - " " + strconv.Itoa(int(sel + 1)) + "/" + - strconv.Itoa(int(sel_max)) + " hosts ") + i_draw_text(ui.s, + 1, ui.dim[H] - 2, (ui.dim[W] / 3) - 1, ui.dim[H] - 2, + ui.def_style, + " " + strconv.Itoa(int(ui.sel + 1)) + "/" + + strconv.Itoa(int(ui.sel_max)) + " hosts ") } -func i_info_panel(s tcell.Screen, t [2]int, - def_style tcell.Style, lhost *HostList, sel uint64) { +func i_info_panel(ui HardUI, lhost *HostList) { title_style := tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorBlue).Dim(true).Bold(true) @@ -184,15 +190,15 @@ func i_info_panel(s tcell.Screen, t [2]int, curr_line := 2 var host_type string - i_draw_box(s, (t[W] / 3), 0, - t[W] - 1, t[H] - 2, + i_draw_box(ui.s, (ui.dim[W] / 3), 0, + ui.dim[W] - 1, ui.dim[H] - 2, " Infos ") - s.SetContent(t[W] / 3, 0, tcell.RuneTTee, nil, def_style) - s.SetContent(t[W] / 3, t[H] - 2, tcell.RuneBTee, nil, def_style) + ui.s.SetContent(ui.dim[W] / 3, 0, tcell.RuneTTee, nil, ui.def_style) + ui.s.SetContent(ui.dim[W] / 3, ui.dim[H] - 2, tcell.RuneBTee, nil, ui.def_style) if lhost.head == nil { return } - host = lhost.sel(sel) + host = lhost.sel(ui.sel) if host.Type == 0 { host_type = "SSH" } else if host.Type == 1 { @@ -200,118 +206,118 @@ func i_info_panel(s tcell.Screen, t [2]int, } // name, type - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Name: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, host.Name) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Name) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Type: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, host_type) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host_type) curr_line += 2 // host, port - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Host: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, host.Host) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Host) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Port: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, strconv.Itoa(int(host.Port))) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, strconv.Itoa(int(host.Port))) curr_line += 1 // RDP shit if host.Type == 1 { if len(host.Domain) > 0 { - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Domain: ") - i_draw_text(s, - (t[W] / 3) + 12, curr_line, t[W] - 2, curr_line, - def_style, host.Domain) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 12, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Domain) curr_line += 1 } } curr_line += 1 // user infos - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "User: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, host.User) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.User) curr_line += 1 if len(host.Pass) > 0 { - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Pass: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, "***") + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, "***") curr_line += 1 } if host.Type == 0 && len(host.Priv) > 0 { - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Privkey: ") - i_draw_text(s, - (t[W] / 3) + 13, curr_line, t[W] - 2, curr_line, - def_style, host.Priv) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 13, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Priv) curr_line += 1 } curr_line += 1 // jump if host.Type == 0 && len(host.Jump) > 0 { - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Jump settings: ") curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 5, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line, title_style, "Host: ") - i_draw_text(s, - (t[W] / 3) + 11, curr_line, t[W] - 2, curr_line, - def_style, host.Jump) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 11, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Jump) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 5, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line, title_style, "Port: ") - i_draw_text(s, - (t[W] / 3) + 11, curr_line, t[W] - 2, curr_line, - def_style, strconv.Itoa(int(host.JumpPort))) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 11, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, strconv.Itoa(int(host.JumpPort))) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 5, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line, title_style, "User: ") - i_draw_text(s, - (t[W] / 3) + 11, curr_line, t[W] - 2, curr_line, - def_style, host.JumpUser) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 11, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.JumpUser) curr_line += 1 if len(host.JumpPass) > 0 { - i_draw_text(s, - (t[W] / 3) + 5, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line, title_style, "Pass: ") - i_draw_text(s, - (t[W] / 3) + 11, curr_line, t[W] - 2, curr_line, - def_style, "***") + i_draw_text(ui.s, + (ui.dim[W] / 3) + 11, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, "***") curr_line += 1 } if host.Type == 0 && len(host.JumpPriv) > 0 { - i_draw_text(s, - (t[W] / 3) + 5, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 5, curr_line, ui.dim[W] - 2, curr_line, title_style, "Privkey: ") - i_draw_text(s, - (t[W] / 3) + 14, curr_line, t[W] - 2, curr_line, - def_style, host.JumpPriv) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 14, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.JumpPriv) curr_line += 1 } curr_line += 1 @@ -319,75 +325,94 @@ func i_info_panel(s tcell.Screen, t [2]int, // RDP shit if host.Type == 1 { qual := [3]string{"Low", "Medium", "High"} - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Screen size: ") - i_draw_text(s, - (t[W] / 3) + 17, curr_line, t[W] - 2, curr_line, - def_style, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 17, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, strconv.Itoa(int(host.Width)) + "x" + strconv.Itoa(int(host.Height))) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Dynamic window: ") - i_draw_text(s, - (t[W] / 3) + 20, curr_line, t[W] - 2, curr_line, - def_style, strconv.FormatBool(host.Dynamic)) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 20, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, strconv.FormatBool(host.Dynamic)) curr_line += 1 - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Quality: ") - i_draw_text(s, - (t[W] / 3) + 13, curr_line, t[W] - 2, curr_line, - def_style, qual[host.Quality]) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 13, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, qual[host.Quality]) curr_line += 1 curr_line += 1 } // note if len(host.Note) > 0 { - i_draw_text(s, - (t[W] / 3) + 4, curr_line, t[W] - 2, curr_line, + i_draw_text(ui.s, + (ui.dim[W] / 3) + 4, curr_line, ui.dim[W] - 2, curr_line, title_style, "Note: ") - i_draw_text(s, - (t[W] / 3) + 10, curr_line, t[W] - 2, curr_line, - def_style, host.Note) + i_draw_text(ui.s, + (ui.dim[W] / 3) + 10, curr_line, ui.dim[W] - 2, curr_line, + ui.def_style, host.Note) curr_line += 1 } } -func i_ui(data *Data) { +func i_ui(data *HardData) { var err error - data.s, err = tcell.NewScreen() - var term_size [2]int - var sel uint64 = 0 - sel_max := data.lhost.count() + ui := &data.ui + ui.s, err = tcell.NewScreen() + ui.sel_max = data.lhost.count() if err != nil { c_die("view", err) } - if err := data.s.Init(); err != nil { + if err := ui.s.Init(); err != nil { c_die("view", err) } - def_style := tcell.StyleDefault. + ui.def_style = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorReset) - data.s.SetStyle(def_style) + ui.bot_style = tcell.StyleDefault. + Background(tcell.ColorReset). + Foreground(tcell.ColorGrey) + ui.s.SetStyle(ui.def_style) for { - term_size[W], term_size[H], _ = term.GetSize(0) - data.s.Clear() - i_bottom_text(data.s, term_size) - i_host_panel(data, term_size, def_style, sel, sel_max) - i_info_panel(data.s, term_size, def_style, data.lhost, sel) + ui.dim[W], ui.dim[H], _ = term.GetSize(0) + ui.s.Clear() + i_bottom_text(*ui) + i_host_panel(data.ui, data.lhost) + i_info_panel(data.ui, data.lhost) if data.lhost.head == nil { - i_draw_zhosts_box(data.s, term_size, def_style) + i_draw_zhosts_box(*ui) + } + if ui.delete_mode == true { + host := data.lhost.sel(ui.sel) + // file_path := data.data_dir + "/" + host.Folder + host.Filename + text := "Do you really want to delete host " + + host.Folder + host.Filename + "?" + left, right := + (ui.dim[W] / 2) - (len(text) / 2) - 5, + (ui.dim[W] / 2) + (len(text) / 2) + 5 + top, bot := + (ui.dim[H] / 2) - 3, + (ui.dim[H] / 2) + 3 + i_draw_box(ui.s, left, top, right, bot, text) + // if err := os.Remove(file_path); err != nil { + // c_die("can't remove " + file_path, err) + // } + // i_reload_data(data, sel, sel_max) } - data.s.Show() - i_events(data, &sel, &sel_max, &term_size) - if int(sel) > data.list_start + term_size[H] - 4 { - data.list_start = int(sel + 1) - term_size[H] + 3 - } else if int(sel) < data.list_start { - data.list_start = int(sel) + ui.s.Show() + i_events(data) + if int(ui.sel) > ui.list_start + ui.dim[H] - 4 { + ui.list_start = int(ui.sel + 1) - ui.dim[H] + 3 + } else if int(ui.sel) < ui.list_start { + ui.list_start = int(ui.sel) } } } |