aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c_exec.go19
-rw-r--r--i_events.go28
-rw-r--r--i_ui.go46
3 files changed, 54 insertions, 39 deletions
diff --git a/c_exec.go b/c_exec.go
index cd7a11c..80fd132 100644
--- a/c_exec.go
+++ b/c_exec.go
@@ -128,26 +128,23 @@ func c_format_rdp(host *HostNode) []string {
return cmd_fmt
}
-func c_format_cmd(dir_id, host_id uint64, ldirs *DirsList) {
+func c_format_cmd(host *HostNode) {
var cmd_fmt []string
- host := ldirs.sel(dir_id).lhost.sel(host_id)
- if host == nil {
- c_die("host id not found", nil)
- }
- if host.Protocol == 0 {
+ switch host.Protocol {
+ case 0:
cmd_fmt = c_format_ssh(host)
- } else if host.Protocol == 1 {
+ case 1:
cmd_fmt = c_format_rdp(host)
- } else if host.Protocol > 1 {
+ default:
c_die("type not found", nil)
}
c_exec_cmd(cmd_fmt)
}
-func c_exec(dir_id, host_id uint64, ldirs *DirsList) {
- if ldirs.head == nil {
+func c_exec(host *HostNode) {
+ if host == nil {
return
}
- c_format_cmd(dir_id, host_id, ldirs)
+ c_format_cmd(host)
}
diff --git a/i_events.go b/i_events.go
index 6e3bdc5..7937f7e 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
- * Thu Dec 21 12:49:09 2023
+ * Wed Dec 27 17:56:44 2023
* Joe
*
* events in the code
@@ -54,7 +54,9 @@ import (
func i_reload_data(data *HardData) {
data.ldirs = c_load_data_dir(data.data_dir, data.opts)
- data.ui.sel_max, data.ui.count_dirs, data.ui.count_hosts = i_get_sel_max(data.ldirs)
+ data.ui.sel_max,
+ data.ui.count_dirs,
+ data.ui.count_hosts = i_get_sel_max(data.ldirs)
}
func i_delete_host(data *HardData) {
@@ -90,27 +92,29 @@ func i_events(data *HardData) {
os.Exit(0)
} else if event.Rune() == 'j' ||
event.Key() == tcell.KeyDown {
- if ui.sel < ui.sel_max - 1 {
- ui.sel += 1
+ if ui.sel.line < ui.sel_max - 1 {
+ ui.inc_sel(1)
}
} else if event.Rune() == 'k' ||
event.Key() == tcell.KeyUp {
- if ui.sel > 0 {
- ui.sel -= 1
+ if ui.sel.line > 0 {
+ ui.inc_sel(-1)
}
} else if event.Rune() == 'g' {
- ui.sel = 0
+ ui.sel.line = 0
} else if event.Rune() == 'G' {
- ui.sel = ui.sel_max - 1
+ ui.sel.line = ui.sel_max - 1
} else if event.Rune() == 'D' &&
data.ldirs.head != nil &&
ui.sel_max != 0 {
ui.mode = DELETE_MODE
} else if event.Key() == tcell.KeyEnter {
- ui.s.Fini()
- c_exec(ui.sel, ui.sel, data.ldirs)
- if data.opts.Loop == false {
- os.Exit(0)
+ if ui.sel.host_ptr != nil {
+ ui.s.Fini()
+ c_exec(ui.sel.host_ptr)
+ if data.opts.Loop == false {
+ os.Exit(0)
+ }
}
if ui.s, err = tcell.NewScreen(); err != nil {
c_die("view", err)
diff --git a/i_ui.go b/i_ui.go
index 5fbff2e..727afbd 100644
--- a/i_ui.go
+++ b/i_ui.go
@@ -58,14 +58,28 @@ type HardUI struct {
s tcell.Screen
list_start int
mode uint8
- sel uint64
- sel_max uint64
+ sel_max int
count_dirs uint64
count_hosts uint64
def_style tcell.Style
dir_style tcell.Style
title_style tcell.Style
dim [2]int
+ sel HardSelect
+}
+
+type HardSelect struct {
+ line int
+ dirs_ptr *DirsNode
+ host_ptr *HostNode
+}
+
+func (ui *HardUI) inc_sel(n ...int) {
+ sel := &ui.sel
+ if n[0] == 0 {
+ n[0] = 1
+ }
+ sel.line += n[0]
}
func i_draw_text(s tcell.Screen,
@@ -218,7 +232,7 @@ func i_draw_delete_box(ui HardUI, host *HostNode) {
func i_host_panel_dirs(ui HardUI, opts HardOpts, dirs *DirsNode, line int) {
style := ui.dir_style
- if ui.sel == dirs.ID {
+ if &ui.sel.dirs_ptr == &dirs {
style = style.Reverse(true)
}
text := ""
@@ -248,7 +262,7 @@ func i_host_panel_dirs(ui HardUI, opts HardOpts, dirs *DirsNode, line int) {
func i_host_panel_host(ui HardUI, opts HardOpts,
dirs *DirsNode, host *HostNode, line int) {
style := ui.def_style
- if ui.sel == host.ID {
+ if &ui.sel.host_ptr == &host {
style = style.Reverse(true)
}
text := ""
@@ -301,7 +315,7 @@ func i_host_panel(ui HardUI, opts HardOpts, ldirs *DirsList) {
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.line + 1)) + "/" +
strconv.Itoa(int(ui.sel_max)) + " hosts ")
}
}
@@ -320,7 +334,7 @@ func i_info_panel(ui HardUI, lhost *HostList) {
if lhost.head == nil {
return
}
- host = lhost.sel(ui.sel)
+ host = ui.sel.host_ptr
if host.Protocol == 0 {
host_type = "SSH"
} else if host.Protocol == 1 {
@@ -483,10 +497,10 @@ func i_info_panel(ui HardUI, lhost *HostList) {
}
}
-func i_get_sel_max(ldirs *DirsList) (uint64, uint64, uint64) {
+func i_get_sel_max(ldirs *DirsList) (int, uint64, uint64) {
count_dirs, count_hosts := ldirs.count()
- return count_dirs + count_hosts, count_dirs, count_hosts
+ return int(count_dirs + count_hosts), count_dirs, count_hosts
}
func i_ui(data *HardData) {
@@ -528,15 +542,15 @@ func i_ui(data *HardData) {
}
ui.s.Show()
i_events(data)
- if ui.sel >= ui.sel_max {
- ui.sel = ui.sel_max - 1
- } else if ui.sel < 0 {
- ui.sel = 0
+ if ui.sel.line >= ui.sel_max {
+ ui.sel.line = ui.sel_max - 1
+ } else if ui.sel.line < 0 {
+ ui.sel.line = 0
}
- 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)
+ if int(ui.sel.line) > ui.list_start + ui.dim[H] - 4 {
+ ui.list_start = int(ui.sel.line + 1) - ui.dim[H] + 3
+ } else if int(ui.sel.line) < ui.list_start {
+ ui.list_start = int(ui.sel.line)
}
}
}