aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoe <rbo@gmx.us>2025-08-26 18:47:19 +0200
committerjoe <rbo@gmx.us>2025-08-26 18:47:19 +0200
commit323f5bcba9c05beeb52040968a6d2ef8598f99a3 (patch)
tree6623ac8d128d821b8d9042ecb6f26df9c50a6503
parentcleaned more (diff)
downloadhardflip-323f5bcba9c05beeb52040968a6d2ef8598f99a3.tar.gz
hardflip-323f5bcba9c05beeb52040968a6d2ef8598f99a3.tar.bz2
hardflip-323f5bcba9c05beeb52040968a6d2ef8598f99a3.tar.xz
hardflip-323f5bcba9c05beeb52040968a6d2ef8598f99a3.tar.zst
hardflip-323f5bcba9c05beeb52040968a6d2ef8598f99a3.zip
finally fixed my shit
-rw-r--r--src/c_defs.go1
-rw-r--r--src/e_keys.go858
-rw-r--r--src/i_host.go7
-rw-r--r--src/i_insert.go6
-rw-r--r--src/i_ui.go34
5 files changed, 445 insertions, 461 deletions
diff --git a/src/c_defs.go b/src/c_defs.go
index b955f0c..d1bc32b 100644
--- a/src/c_defs.go
+++ b/src/c_defs.go
@@ -79,7 +79,6 @@ const (
ERROR_MODE
WELCOME_MODE
MKDIR_MODE
- INSERT_NAME_MODE
INSERT_MODE
RENAME_MODE
HELP_MODE
diff --git a/src/e_keys.go b/src/e_keys.go
index 5aec304..cc77ee3 100644
--- a/src/e_keys.go
+++ b/src/e_keys.go
@@ -43,7 +43,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* hardflip: src/e_keys.go
- * Fri May 24 18:02:07 2024
+ * Tue, 26 Aug 2025 18:43:37 +0200
* Joe
*
* events in the keys
@@ -168,23 +168,11 @@ func e_normal_events(data *HardData, ui *HardUI, event tcell.EventKey) bool {
}
} else if event.Rune() == 'a' ||
event.Rune() == 'i' {
- ui.mode = INSERT_NAME_MODE
+ ui.mode = INSERT_MODE
ui.insert_method = INSERT_ADD
ui.insert_sel = 0
ui.insert_sel_ok = false
ui.insert_scroll = 0
- // tmp := ItemsNode{}
- data.insert = &HostNode{}
- // tmp.Host = data.insert
- // if data.litems.curr == nil {
- // tmp.Host.parent = data.ldirs.head
- // } else if data.litems.curr.is_dir() == true {
- // data.insert.parent = data.litems.curr.Dirs
- // } else {
- // data.insert.parent = data.litems.curr.Host.parent
- // }
- // e_set_protocol_defaults(data, data.insert)
- // data.litems.add_after(&tmp)
} else if event.Rune() == 'e' &&
data.litems.curr != nil &&
data.litems.curr.is_dir() == false {
@@ -358,49 +346,8 @@ func e_mkdir_events(data *HardData, ui *HardUI, event tcell.EventKey) bool {
return false
}
-func e_insert_name_events(data *HardData, ui *HardUI,
- event tcell.EventKey) bool {
- if event.Key() == tcell.KeyEscape ||
- event.Key() == tcell.KeyCtrlC {
- ui.s.HideCursor()
- ui.mode = NORMAL_MODE
- ui.insert_sel = 0
- data.insert = nil
- ui.buff.empty()
- } else if event.Key() == tcell.KeyEnter {
- if ui.buff.len() == 0 {
- ui.s.HideCursor()
- ui.mode = NORMAL_MODE
- ui.insert_sel = 0
- ui.insert_sel_ok = false
- data.insert = nil
- ui.buff.empty()
- return true
- }
- data.insert.Name = ui.buff.str()
- data.insert.parent = data.litems.curr.Host.parent
- e_set_protocol_defaults(data, data.insert)
- ui.s.HideCursor()
- ui.mode = INSERT_MODE
- ui.buff.empty()
- } else {
- e_readline(event, &ui.buff, ui, data.home_dir)
- }
- return false
-}
-
func e_insert_events(data *HardData, ui *HardUI, event tcell.EventKey) bool {
if data.insert == nil {
- ui.mode = NORMAL_MODE
- return true
- }
- if data.insert_err != nil {
- if event.Rune() != 0 ||
- event.Key() == tcell.KeyEscape ||
- event.Key() == tcell.KeyEnter {
- data.insert_err = nil
- }
- } else if ui.insert_sel_ok == false {
if event.Key() == tcell.KeyEscape ||
event.Key() == tcell.KeyCtrlC ||
event.Rune() == 'q' {
@@ -409,439 +356,478 @@ func e_insert_events(data *HardData, ui *HardUI, event tcell.EventKey) bool {
ui.insert_sel = 0
data.insert = nil
ui.buff.empty()
- } else if event.Rune() == 'j' ||
- event.Key() == tcell.KeyDown ||
- event.Key() == tcell.KeyTab {
- if data.insert.Protocol == PROTOCOL_RDP &&
- ui.insert_sel == INS_PROTOCOL {
- ui.insert_sel = INS_RDP_HOST
- } else if data.insert.Protocol == PROTOCOL_RDP &&
- ui.insert_sel == INS_RDP_JUMP_HOST +
- len(data.insert.Drive) &&
- len(data.insert.Jump.Host) == 0 {
- ui.insert_sel = INS_RDP_NOTE + len(data.insert.Drive)
- } else if data.insert.Protocol == PROTOCOL_CMD &&
- ui.insert_sel == INS_PROTOCOL {
- ui.insert_sel = INS_CMD_CMD
- } else if data.insert.Protocol == PROTOCOL_OS &&
- ui.insert_sel == INS_PROTOCOL {
- ui.insert_sel = INS_OS_HOST
- } else if data.insert.Protocol == PROTOCOL_SSH &&
- ui.insert_sel == INS_SSH_JUMP_HOST &&
- len(data.insert.Jump.Host) == 0 {
- ui.insert_sel = INS_SSH_NOTE
- } else if ui.insert_sel < ui.insert_sel_max {
- ui.insert_sel += 1
- }
- if ui.insert_butt == false {
- ui.insert_scroll += 2
- }
- } else if event.Rune() == 'k' ||
- event.Key() == tcell.KeyUp {
- if data.insert.Protocol == PROTOCOL_RDP &&
- ui.insert_sel == INS_RDP_HOST {
- ui.insert_sel = INS_PROTOCOL
- } else if data.insert.Protocol == PROTOCOL_RDP &&
- ui.insert_sel == INS_RDP_NOTE +
- len(data.insert.Drive) &&
- len(data.insert.Jump.Host) == 0 {
- ui.insert_sel = INS_RDP_JUMP_HOST + len(data.insert.Drive)
- } else if data.insert.Protocol == PROTOCOL_CMD &&
- ui.insert_sel == INS_CMD_CMD {
- ui.insert_sel = INS_PROTOCOL
- } else if data.insert.Protocol == PROTOCOL_OS &&
- ui.insert_sel == INS_OS_HOST {
- ui.insert_sel = INS_PROTOCOL
- } else if data.insert.Protocol == PROTOCOL_SSH &&
- ui.insert_sel == INS_SSH_NOTE &&
- len(data.insert.Jump.Host) == 0 {
- ui.insert_sel = INS_SSH_JUMP_HOST
- } else if ui.insert_sel > INS_PROTOCOL {
- ui.insert_sel -= 1
- }
- if ui.insert_scroll > 0 {
- ui.insert_scroll -= 2
- if ui.insert_scroll < 0 {
- ui.insert_scroll = 0
- }
- }
- } else if event.Rune() == 'g' ||
- event.Rune() == 'h' ||
- event.Key() == tcell.KeyLeft {
- ui.insert_sel = INS_PROTOCOL
- ui.insert_scroll = 0
- } else if event.Rune() == 'G' ||
- event.Rune() == 'l' ||
- event.Key() == tcell.KeyRight {
- ui.insert_sel = ui.insert_sel_max
- for data.ui.insert_butt == false {
- ui.insert_scroll += 2
- i_draw_insert_panel(&data.ui, data.insert, data.home_dir)
- }
- data.ui.s.Show()
- } else if event.Rune() == 'i' ||
- event.Rune() == 'a' ||
- event.Rune() == ' ' ||
- event.Key() == tcell.KeyEnter {
- ui.insert_sel_ok = true
- switch ui.insert_sel {
- case INS_SSH_OK,
- INS_RDP_OK + len(data.insert.Drive),
- INS_CMD_OK,
- INS_OS_OK:
- ui.insert_sel_ok = false
- i_insert_check_ok(data, data.insert)
- if data.insert_err != nil {
- return true
- }
- i_insert_host(data, data.insert)
- case INS_SSH_HOST,
- INS_RDP_HOST,
- INS_OS_HOST:
- ui.buff.insert(data.insert.Host)
- case INS_SSH_PORT,
- INS_RDP_PORT:
- if data.insert.Port > 0 {
- ui.buff.insert(strconv.Itoa(int(data.insert.Port)))
- }
- case INS_SSH_USER,
- INS_RDP_USER,
- INS_OS_USER:
- ui.buff.insert(data.insert.User)
- case INS_SSH_PASS,
- INS_RDP_PASS,
- INS_OS_PASS:
- return true
- case INS_SSH_PRIV: ui.buff.insert(data.insert.Priv)
- case INS_SSH_EXEC: ui.buff.insert(data.insert.Exec)
- case INS_SSH_JUMP_HOST,
- INS_RDP_JUMP_HOST + len(data.insert.Drive):
- ui.buff.insert(data.insert.Jump.Host)
- case INS_SSH_JUMP_PORT,
- INS_RDP_JUMP_PORT + len(data.insert.Drive):
- if data.insert.Jump.Port > 0 {
- ui.buff.insert(strconv.Itoa(int(data.insert.Jump.Port)))
- }
- case INS_SSH_JUMP_USER,
- INS_RDP_JUMP_USER + len(data.insert.Drive):
- ui.buff.insert(data.insert.Jump.User)
- case INS_SSH_JUMP_PASS,
- INS_RDP_JUMP_PASS + len(data.insert.Drive):
- return true
- case INS_SSH_JUMP_PRIV,
- INS_RDP_JUMP_PRIV + len(data.insert.Drive):
- ui.buff.insert(data.insert.Jump.Priv)
- case INS_RDP_DOMAIN: ui.buff.insert(data.insert.Domain)
- case INS_RDP_FILE: ui.buff.insert(data.insert.RDPFile)
- case INS_RDP_SCREENSIZE: return true
- case INS_RDP_DYNAMIC:
- ui.insert_sel_ok = false
- if data.insert.Dynamic == true {
- data.insert.Dynamic = false
- } else {
- data.insert.Dynamic = true
- }
- return true
- case INS_RDP_FULLSCR:
- ui.insert_sel_ok = false
- if data.insert.FullScr == true {
- data.insert.FullScr = false
- } else {
- data.insert.FullScr = true
- }
- return true
- case INS_RDP_MULTIMON:
- ui.insert_sel_ok = false
- if data.insert.MultiMon == true {
- data.insert.MultiMon = false
- } else {
- data.insert.MultiMon = true
- }
- return true
- case INS_RDP_QUALITY: return true
- case INS_RDP_DRIVE + len(data.insert.Drive): return true
- case INS_CMD_CMD: ui.buff.insert(data.insert.Host)
- case INS_CMD_SHELL: ui.buff.insert(data.insert.Shell[0])
- case INS_CMD_SILENT:
+ } else if event.Key() == tcell.KeyEnter {
+ if ui.buff.len() == 0 {
+ ui.s.HideCursor()
+ ui.mode = NORMAL_MODE
+ ui.insert_sel = 0
ui.insert_sel_ok = false
- if data.insert.Silent == true {
- data.insert.Silent = false
- } else {
- data.insert.Silent = true
- }
+ data.insert = nil
+ ui.buff.empty()
return true
- case INS_OS_USERDOMAINID:
- ui.buff.insert(data.insert.Stack.UserDomainID)
- case INS_OS_PROJECTID:
- ui.buff.insert(data.insert.Stack.ProjectID)
- case INS_OS_REGION:
- ui.buff.insert(data.insert.Stack.RegionName)
- case INS_OS_ENDTYPE:
- ui.buff.insert(data.insert.Stack.EndpointType)
- case INS_OS_INTERFACE:
- ui.buff.insert(data.insert.Stack.Interface)
- case INS_OS_IDAPI:
- ui.buff.insert(data.insert.Stack.IdentityAPI)
- case INS_OS_IMGAPI:
- ui.buff.insert(data.insert.Stack.ImageAPI)
- case INS_OS_NETAPI:
- ui.buff.insert(data.insert.Stack.NetworkAPI)
- case INS_OS_VOLAPI:
- ui.buff.insert(data.insert.Stack.VolumeAPI)
- case INS_SSH_NOTE,
- INS_RDP_NOTE + len(data.insert.Drive),
- INS_CMD_NOTE,
- INS_OS_NOTE:
- ui.buff.insert(data.insert.Note)
}
- }
- } else {
- if event.Key() == tcell.KeyEscape ||
- event.Key() == tcell.KeyCtrlC {
- ui.insert_sel_ok = false
- ui.buff.empty()
- ui.drives_buff = ""
ui.s.HideCursor()
- }
- if len(data.insert.Drive) > 0 &&
- (ui.insert_sel >= INS_RDP_DRIVE &&
- ui.insert_sel < INS_RDP_DRIVE +
- len(data.insert.Drive)) {
- if event.Rune() == 'y' ||
- event.Rune() == 'Y' ||
- event.Key() == tcell.KeyEnter {
- delete(data.insert.Drive,
- data.insert.drive_keys[
- ui.insert_sel - INS_RDP_DRIVE])
- if len(data.insert.Drive) == 0 {
- data.insert.Drive = nil
- }
- e_set_drive_keys(data)
+ data.insert = &HostNode{}
+ e_set_protocol_defaults(data, data.insert)
+ data.insert.Name = ui.buff.str()
+ ui.buff.empty()
+ if data.litems.curr != nil {
+ data.insert.parent = data.litems.curr.path_node()
+ } else {
+ data.insert.parent = data.ldirs.head
}
- ui.insert_sel_ok = false
- return true
+ } else {
+ e_readline(event, &ui.buff, ui, data.home_dir)
}
- switch ui.insert_sel {
- case INS_PROTOCOL:
- if event.Rune() < '1' || event.Rune() > '4' {
- ui.insert_sel_ok = false
- ui.buff.empty()
+ } else if data.insert != nil {
+ if data.insert_err != nil {
+ if event.Rune() != 0 ||
+ event.Key() == tcell.KeyEscape ||
+ event.Key() == tcell.KeyEnter {
+ data.insert_err = nil
+ }
+ } else if ui.insert_sel_ok == false {
+ if event.Key() == tcell.KeyEscape ||
+ event.Key() == tcell.KeyCtrlC ||
+ event.Rune() == 'q' {
ui.s.HideCursor()
- return true
- } else {
- filename := data.insert.filename
- name := data.insert.Name
- parent := data.insert.parent
+ ui.mode = NORMAL_MODE
+ ui.insert_sel = 0
data.insert = nil
- data.insert = &HostNode{}
- data.insert.Name = name
- data.insert.parent = parent
- data.insert.filename = filename
- data.insert.Protocol = int8(event.Rune() - 48 - 1)
- data.litems.curr.Host.Protocol = data.insert.Protocol
- ui.insert_sel_ok = false
- ui.s.HideCursor()
- e_set_protocol_defaults(data, data.insert)
- }
- case INS_RDP_SCREENSIZE:
- if event.Rune() < '1' || event.Rune() > '7' {
- ui.insert_sel_ok = false
ui.buff.empty()
- ui.s.HideCursor()
- return true
- } else {
- s := strings.Split(
- RDP_SCREENSIZE[uint8(event.Rune() - 48 - 1)],
- "x")
- if len(s) != 2 {
- return true
+ } else if event.Rune() == 'j' ||
+ event.Key() == tcell.KeyDown ||
+ event.Key() == tcell.KeyTab {
+ if data.insert.Protocol == PROTOCOL_RDP &&
+ ui.insert_sel == INS_PROTOCOL {
+ ui.insert_sel = INS_RDP_HOST
+ } else if data.insert.Protocol == PROTOCOL_RDP &&
+ ui.insert_sel == INS_RDP_JUMP_HOST +
+ len(data.insert.Drive) &&
+ len(data.insert.Jump.Host) == 0 {
+ ui.insert_sel = INS_RDP_NOTE + len(data.insert.Drive)
+ } else if data.insert.Protocol == PROTOCOL_CMD &&
+ ui.insert_sel == INS_PROTOCOL {
+ ui.insert_sel = INS_CMD_CMD
+ } else if data.insert.Protocol == PROTOCOL_OS &&
+ ui.insert_sel == INS_PROTOCOL {
+ ui.insert_sel = INS_OS_HOST
+ } else if data.insert.Protocol == PROTOCOL_SSH &&
+ ui.insert_sel == INS_SSH_JUMP_HOST &&
+ len(data.insert.Jump.Host) == 0 {
+ ui.insert_sel = INS_SSH_NOTE
+ } else if ui.insert_sel < ui.insert_sel_max {
+ ui.insert_sel += 1
}
- tmp, _ := strconv.Atoi(s[W])
- data.insert.Width = uint16(tmp)
- tmp, _ = strconv.Atoi(s[H])
- data.insert.Height = uint16(tmp)
- ui.insert_sel_ok = false
- ui.s.HideCursor()
- }
- case INS_RDP_QUALITY:
- if event.Rune() < '1' || event.Rune() > '3' {
- ui.insert_sel_ok = false
- ui.buff.empty()
- ui.s.HideCursor()
- return true
- } else {
- data.insert.Quality = uint8(event.Rune() - 48 - 1)
- ui.insert_sel_ok = false
- ui.s.HideCursor()
- }
- case INS_RDP_DRIVE + len(data.insert.Drive):
- if len(ui.drives_buff) == 0 {
- if event.Key() == tcell.KeyEnter {
- if ui.buff.len() == 0 {
- ui.insert_sel_ok = false
- ui.drives_buff = ""
- ui.buff.empty()
- ui.s.HideCursor()
- return true
- }
- ui.drives_buff = ui.buff.str()
- ui.buff.empty()
- } else {
- e_readline(event, &ui.buff, ui, data.home_dir)
+ if ui.insert_butt == false {
+ ui.insert_scroll += 2
}
- } else {
- if event.Key() == tcell.KeyEnter {
- if ui.buff.len() == 0 {
- ui.insert_sel_ok = false
- ui.drives_buff = ""
- ui.buff.empty()
- ui.s.HideCursor()
- return true
- }
- if len(data.insert.Drive) == 0 {
- data.insert.Drive = make(map[string]string)
+ } else if event.Rune() == 'k' ||
+ event.Key() == tcell.KeyUp {
+ if data.insert.Protocol == PROTOCOL_RDP &&
+ ui.insert_sel == INS_RDP_HOST {
+ ui.insert_sel = INS_PROTOCOL
+ } else if data.insert.Protocol == PROTOCOL_RDP &&
+ ui.insert_sel == INS_RDP_NOTE +
+ len(data.insert.Drive) &&
+ len(data.insert.Jump.Host) == 0 {
+ ui.insert_sel = INS_RDP_JUMP_HOST + len(data.insert.Drive)
+ } else if data.insert.Protocol == PROTOCOL_CMD &&
+ ui.insert_sel == INS_CMD_CMD {
+ ui.insert_sel = INS_PROTOCOL
+ } else if data.insert.Protocol == PROTOCOL_OS &&
+ ui.insert_sel == INS_OS_HOST {
+ ui.insert_sel = INS_PROTOCOL
+ } else if data.insert.Protocol == PROTOCOL_SSH &&
+ ui.insert_sel == INS_SSH_NOTE &&
+ len(data.insert.Jump.Host) == 0 {
+ ui.insert_sel = INS_SSH_JUMP_HOST
+ } else if ui.insert_sel > INS_PROTOCOL {
+ ui.insert_sel -= 1
+ }
+ if ui.insert_scroll > 0 {
+ ui.insert_scroll -= 2
+ if ui.insert_scroll < 0 {
+ ui.insert_scroll = 0
}
- data.insert.Drive[ui.drives_buff] = ui.buff.str()
- e_set_drive_keys(data)
- ui.insert_sel_ok = false
- ui.drives_buff = ""
- ui.buff.empty()
- ui.s.HideCursor()
- } else {
- e_readline(event, &ui.buff, ui, data.home_dir)
}
- }
- case INS_SSH_HOST,
- INS_SSH_PORT,
- INS_SSH_USER,
- INS_SSH_PASS,
- INS_SSH_PRIV,
- INS_SSH_EXEC,
- INS_SSH_JUMP_HOST,
- INS_SSH_JUMP_PORT,
- INS_SSH_JUMP_USER,
- INS_SSH_JUMP_PASS,
- INS_SSH_JUMP_PRIV,
- INS_RDP_JUMP_HOST + len(data.insert.Drive),
- INS_RDP_JUMP_PORT + len(data.insert.Drive),
- INS_RDP_JUMP_USER + len(data.insert.Drive),
- INS_RDP_JUMP_PASS + len(data.insert.Drive),
- INS_RDP_JUMP_PRIV + len(data.insert.Drive),
- INS_SSH_NOTE,
- INS_RDP_HOST,
- INS_RDP_PORT,
- INS_RDP_DOMAIN,
- INS_RDP_USER,
- INS_RDP_PASS,
- INS_RDP_FILE,
- INS_RDP_NOTE + len(data.insert.Drive),
- INS_CMD_CMD,
- INS_CMD_SHELL,
- INS_CMD_NOTE,
- INS_OS_HOST,
- INS_OS_USER,
- INS_OS_PASS,
- INS_OS_USERDOMAINID,
- INS_OS_PROJECTID,
- INS_OS_REGION,
- INS_OS_ENDTYPE,
- INS_OS_INTERFACE,
- INS_OS_IDAPI,
- INS_OS_IMGAPI,
- INS_OS_NETAPI,
- INS_OS_VOLAPI,
- INS_OS_NOTE:
- if event.Key() == tcell.KeyEnter {
+ } else if event.Rune() == 'g' ||
+ event.Rune() == 'h' ||
+ event.Key() == tcell.KeyLeft {
+ ui.insert_sel = INS_PROTOCOL
+ ui.insert_scroll = 0
+ } else if event.Rune() == 'G' ||
+ event.Rune() == 'l' ||
+ event.Key() == tcell.KeyRight {
+ ui.insert_sel = ui.insert_sel_max
+ for data.ui.insert_butt == false {
+ ui.insert_scroll += 2
+ i_draw_insert_panel(&data.ui, data.insert, data.home_dir)
+ }
+ data.ui.s.Show()
+ } else if event.Rune() == 'i' ||
+ event.Rune() == 'a' ||
+ event.Rune() == ' ' ||
+ event.Key() == tcell.KeyEnter {
+ ui.insert_sel_ok = true
switch ui.insert_sel {
+ case INS_SSH_OK,
+ INS_RDP_OK + len(data.insert.Drive),
+ INS_CMD_OK,
+ INS_OS_OK:
+ ui.insert_sel_ok = false
+ i_insert_check_ok(data, data.insert)
+ if data.insert_err != nil {
+ return true
+ }
+ i_insert_host(data, data.insert)
case INS_SSH_HOST,
INS_RDP_HOST,
INS_OS_HOST:
- data.insert.Host = ui.buff.str()
+ ui.buff.insert(data.insert.Host)
case INS_SSH_PORT,
INS_RDP_PORT:
- tmp, _ := strconv.Atoi(ui.buff.str())
- data.insert.Port = uint16(tmp)
+ if data.insert.Port > 0 {
+ ui.buff.insert(strconv.Itoa(int(data.insert.Port)))
+ }
case INS_SSH_USER,
INS_RDP_USER,
INS_OS_USER:
- data.insert.User = ui.buff.str()
+ ui.buff.insert(data.insert.User)
case INS_SSH_PASS,
INS_RDP_PASS,
INS_OS_PASS:
- if ui.buff.len() == 0 {
- data.insert.Pass = ""
- return true
- } else {
- data.insert.Pass, _ = c_encrypt_str(ui.buff.str(),
- data.opts.GPG)
- }
- case INS_SSH_PRIV: data.insert.Priv = ui.buff.str()
- case INS_SSH_EXEC: data.insert.Exec = ui.buff.str()
+ return true
+ case INS_SSH_PRIV: ui.buff.insert(data.insert.Priv)
+ case INS_SSH_EXEC: ui.buff.insert(data.insert.Exec)
case INS_SSH_JUMP_HOST,
INS_RDP_JUMP_HOST + len(data.insert.Drive):
- data.insert.Jump.Host = ui.buff.str()
- if len(ui.buff.str()) > 0 {
- data.insert.Jump.Port = 22
- data.insert.Jump.Priv = data.opts.DefSSH
- } else {
- data.insert.Jump.Port = 0
- data.insert.Jump.Priv = ""
- }
+ ui.buff.insert(data.insert.Jump.Host)
case INS_SSH_JUMP_PORT,
INS_RDP_JUMP_PORT + len(data.insert.Drive):
- tmp, _ := strconv.Atoi(ui.buff.str())
- data.insert.Jump.Port = uint16(tmp)
+ if data.insert.Jump.Port > 0 {
+ ui.buff.insert(strconv.Itoa(int(data.insert.Jump.Port)))
+ }
case INS_SSH_JUMP_USER,
INS_RDP_JUMP_USER + len(data.insert.Drive):
- data.insert.Jump.User = ui.buff.str()
+ ui.buff.insert(data.insert.Jump.User)
case INS_SSH_JUMP_PASS,
INS_RDP_JUMP_PASS + len(data.insert.Drive):
- if len(ui.buff.str()) == 0 {
- data.insert.Jump.Pass = ""
+ return true
+ case INS_SSH_JUMP_PRIV,
+ INS_RDP_JUMP_PRIV + len(data.insert.Drive):
+ ui.buff.insert(data.insert.Jump.Priv)
+ case INS_RDP_DOMAIN: ui.buff.insert(data.insert.Domain)
+ case INS_RDP_FILE: ui.buff.insert(data.insert.RDPFile)
+ case INS_RDP_SCREENSIZE: return true
+ case INS_RDP_DYNAMIC:
+ ui.insert_sel_ok = false
+ if data.insert.Dynamic == true {
+ data.insert.Dynamic = false
} else {
- data.insert.Jump.Pass, _ =
- c_encrypt_str(ui.buff.str(), data.opts.GPG)
+ data.insert.Dynamic = true
}
- case INS_SSH_JUMP_PRIV,
- INS_RDP_JUMP_PRIV + len(data.insert.Drive):
- data.insert.Jump.Priv = ui.buff.str()
- case INS_RDP_DOMAIN:
- data.insert.Domain = ui.buff.str()
- case INS_RDP_FILE:
- data.insert.RDPFile = ui.buff.str()
- case INS_CMD_CMD:
- data.insert.Host = ui.buff.str()
- case INS_CMD_SHELL:
- data.insert.Shell[0] = ui.buff.str()
+ return true
+ case INS_RDP_FULLSCR:
+ ui.insert_sel_ok = false
+ if data.insert.FullScr == true {
+ data.insert.FullScr = false
+ } else {
+ data.insert.FullScr = true
+ }
+ return true
+ case INS_RDP_MULTIMON:
+ ui.insert_sel_ok = false
+ if data.insert.MultiMon == true {
+ data.insert.MultiMon = false
+ } else {
+ data.insert.MultiMon = true
+ }
+ return true
+ case INS_RDP_QUALITY: return true
+ case INS_RDP_DRIVE + len(data.insert.Drive): return true
+ case INS_CMD_CMD: ui.buff.insert(data.insert.Host)
+ case INS_CMD_SHELL: ui.buff.insert(data.insert.Shell[0])
+ case INS_CMD_SILENT:
+ ui.insert_sel_ok = false
+ if data.insert.Silent == true {
+ data.insert.Silent = false
+ } else {
+ data.insert.Silent = true
+ }
+ return true
case INS_OS_USERDOMAINID:
- data.insert.Stack.UserDomainID = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.UserDomainID)
case INS_OS_PROJECTID:
- data.insert.Stack.ProjectID = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.ProjectID)
case INS_OS_REGION:
- data.insert.Stack.RegionName = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.RegionName)
case INS_OS_ENDTYPE:
- data.insert.Stack.EndpointType = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.EndpointType)
case INS_OS_INTERFACE:
- data.insert.Stack.Interface = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.Interface)
case INS_OS_IDAPI:
- data.insert.Stack.IdentityAPI = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.IdentityAPI)
case INS_OS_IMGAPI:
- data.insert.Stack.ImageAPI = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.ImageAPI)
case INS_OS_NETAPI:
- data.insert.Stack.NetworkAPI = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.NetworkAPI)
case INS_OS_VOLAPI:
- data.insert.Stack.VolumeAPI = ui.buff.str()
+ ui.buff.insert(data.insert.Stack.VolumeAPI)
case INS_SSH_NOTE,
INS_RDP_NOTE + len(data.insert.Drive),
INS_CMD_NOTE,
INS_OS_NOTE:
- data.insert.Note = ui.buff.str()
+ ui.buff.insert(data.insert.Note)
}
+ }
+ } else {
+ if event.Key() == tcell.KeyEscape ||
+ event.Key() == tcell.KeyCtrlC {
ui.insert_sel_ok = false
ui.buff.empty()
+ ui.drives_buff = ""
ui.s.HideCursor()
- } else {
- e_readline(event, &ui.buff, ui, data.home_dir)
+ }
+ if len(data.insert.Drive) > 0 &&
+ (ui.insert_sel >= INS_RDP_DRIVE &&
+ ui.insert_sel < INS_RDP_DRIVE +
+ len(data.insert.Drive)) {
+ if event.Rune() == 'y' ||
+ event.Rune() == 'Y' ||
+ event.Key() == tcell.KeyEnter {
+ delete(data.insert.Drive,
+ data.insert.drive_keys[
+ ui.insert_sel - INS_RDP_DRIVE])
+ if len(data.insert.Drive) == 0 {
+ data.insert.Drive = nil
+ }
+ e_set_drive_keys(data)
+ }
+ ui.insert_sel_ok = false
+ return true
+ }
+ switch ui.insert_sel {
+ case INS_PROTOCOL:
+ if event.Rune() < '1' || event.Rune() > '4' {
+ ui.insert_sel_ok = false
+ ui.buff.empty()
+ ui.s.HideCursor()
+ return true
+ } else {
+ filename := data.insert.filename
+ name := data.insert.Name
+ parent := data.insert.parent
+ data.insert = nil
+ data.insert = &HostNode{}
+ data.insert.Name = name
+ data.insert.parent = parent
+ data.insert.filename = filename
+ data.insert.Protocol = int8(event.Rune() - 48 - 1)
+ ui.insert_sel_ok = false
+ ui.s.HideCursor()
+ e_set_protocol_defaults(data, data.insert)
+ }
+ case INS_RDP_SCREENSIZE:
+ if event.Rune() < '1' || event.Rune() > '7' {
+ ui.insert_sel_ok = false
+ ui.buff.empty()
+ ui.s.HideCursor()
+ return true
+ } else {
+ s := strings.Split(
+ RDP_SCREENSIZE[uint8(event.Rune() - 48 - 1)],
+ "x")
+ if len(s) != 2 {
+ return true
+ }
+ tmp, _ := strconv.Atoi(s[W])
+ data.insert.Width = uint16(tmp)
+ tmp, _ = strconv.Atoi(s[H])
+ data.insert.Height = uint16(tmp)
+ ui.insert_sel_ok = false
+ ui.s.HideCursor()
+ }
+ case INS_RDP_QUALITY:
+ if event.Rune() < '1' || event.Rune() > '3' {
+ ui.insert_sel_ok = false
+ ui.buff.empty()
+ ui.s.HideCursor()
+ return true
+ } else {
+ data.insert.Quality = uint8(event.Rune() - 48 - 1)
+ ui.insert_sel_ok = false
+ ui.s.HideCursor()
+ }
+ case INS_RDP_DRIVE + len(data.insert.Drive):
+ if len(ui.drives_buff) == 0 {
+ if event.Key() == tcell.KeyEnter {
+ if ui.buff.len() == 0 {
+ ui.insert_sel_ok = false
+ ui.drives_buff = ""
+ ui.buff.empty()
+ ui.s.HideCursor()
+ return true
+ }
+ ui.drives_buff = ui.buff.str()
+ ui.buff.empty()
+ } else {
+ e_readline(event, &ui.buff, ui, data.home_dir)
+ }
+ } else {
+ if event.Key() == tcell.KeyEnter {
+ if ui.buff.len() == 0 {
+ ui.insert_sel_ok = false
+ ui.drives_buff = ""
+ ui.buff.empty()
+ ui.s.HideCursor()
+ return true
+ }
+ if len(data.insert.Drive) == 0 {
+ data.insert.Drive = make(map[string]string)
+ }
+ data.insert.Drive[ui.drives_buff] = ui.buff.str()
+ e_set_drive_keys(data)
+ ui.insert_sel_ok = false
+ ui.drives_buff = ""
+ ui.buff.empty()
+ ui.s.HideCursor()
+ } else {
+ e_readline(event, &ui.buff, ui, data.home_dir)
+ }
+ }
+ case INS_SSH_HOST,
+ INS_SSH_PORT,
+ INS_SSH_USER,
+ INS_SSH_PASS,
+ INS_SSH_PRIV,
+ INS_SSH_EXEC,
+ INS_SSH_JUMP_HOST,
+ INS_SSH_JUMP_PORT,
+ INS_SSH_JUMP_USER,
+ INS_SSH_JUMP_PASS,
+ INS_SSH_JUMP_PRIV,
+ INS_RDP_JUMP_HOST + len(data.insert.Drive),
+ INS_RDP_JUMP_PORT + len(data.insert.Drive),
+ INS_RDP_JUMP_USER + len(data.insert.Drive),
+ INS_RDP_JUMP_PASS + len(data.insert.Drive),
+ INS_RDP_JUMP_PRIV + len(data.insert.Drive),
+ INS_SSH_NOTE,
+ INS_RDP_HOST,
+ INS_RDP_PORT,
+ INS_RDP_DOMAIN,
+ INS_RDP_USER,
+ INS_RDP_PASS,
+ INS_RDP_FILE,
+ INS_RDP_NOTE + len(data.insert.Drive),
+ INS_CMD_CMD,
+ INS_CMD_SHELL,
+ INS_CMD_NOTE,
+ INS_OS_HOST,
+ INS_OS_USER,
+ INS_OS_PASS,
+ INS_OS_USERDOMAINID,
+ INS_OS_PROJECTID,
+ INS_OS_REGION,
+ INS_OS_ENDTYPE,
+ INS_OS_INTERFACE,
+ INS_OS_IDAPI,
+ INS_OS_IMGAPI,
+ INS_OS_NETAPI,
+ INS_OS_VOLAPI,
+ INS_OS_NOTE:
+ if event.Key() == tcell.KeyEnter {
+ switch ui.insert_sel {
+ case INS_SSH_HOST,
+ INS_RDP_HOST,
+ INS_OS_HOST:
+ data.insert.Host = ui.buff.str()
+ case INS_SSH_PORT,
+ INS_RDP_PORT:
+ tmp, _ := strconv.Atoi(ui.buff.str())
+ data.insert.Port = uint16(tmp)
+ case INS_SSH_USER,
+ INS_RDP_USER,
+ INS_OS_USER:
+ data.insert.User = ui.buff.str()
+ case INS_SSH_PASS,
+ INS_RDP_PASS,
+ INS_OS_PASS:
+ if ui.buff.len() == 0 {
+ data.insert.Pass = ""
+ return true
+ } else {
+ data.insert.Pass, _ = c_encrypt_str(ui.buff.str(),
+ data.opts.GPG)
+ }
+ case INS_SSH_PRIV: data.insert.Priv = ui.buff.str()
+ case INS_SSH_EXEC: data.insert.Exec = ui.buff.str()
+ case INS_SSH_JUMP_HOST,
+ INS_RDP_JUMP_HOST + len(data.insert.Drive):
+ data.insert.Jump.Host = ui.buff.str()
+ if len(ui.buff.str()) > 0 {
+ data.insert.Jump.Port = 22
+ data.insert.Jump.Priv = data.opts.DefSSH
+ } else {
+ data.insert.Jump.Port = 0
+ data.insert.Jump.Priv = ""
+ }
+ case INS_SSH_JUMP_PORT,
+ INS_RDP_JUMP_PORT + len(data.insert.Drive):
+ tmp, _ := strconv.Atoi(ui.buff.str())
+ data.insert.Jump.Port = uint16(tmp)
+ case INS_SSH_JUMP_USER,
+ INS_RDP_JUMP_USER + len(data.insert.Drive):
+ data.insert.Jump.User = ui.buff.str()
+ case INS_SSH_JUMP_PASS,
+ INS_RDP_JUMP_PASS + len(data.insert.Drive):
+ if len(ui.buff.str()) == 0 {
+ data.insert.Jump.Pass = ""
+ } else {
+ data.insert.Jump.Pass, _ =
+ c_encrypt_str(ui.buff.str(), data.opts.GPG)
+ }
+ case INS_SSH_JUMP_PRIV,
+ INS_RDP_JUMP_PRIV + len(data.insert.Drive):
+ data.insert.Jump.Priv = ui.buff.str()
+ case INS_RDP_DOMAIN:
+ data.insert.Domain = ui.buff.str()
+ case INS_RDP_FILE:
+ data.insert.RDPFile = ui.buff.str()
+ case INS_CMD_CMD:
+ data.insert.Host = ui.buff.str()
+ case INS_CMD_SHELL:
+ data.insert.Shell[0] = ui.buff.str()
+ case INS_OS_USERDOMAINID:
+ data.insert.Stack.UserDomainID = ui.buff.str()
+ case INS_OS_PROJECTID:
+ data.insert.Stack.ProjectID = ui.buff.str()
+ case INS_OS_REGION:
+ data.insert.Stack.RegionName = ui.buff.str()
+ case INS_OS_ENDTYPE:
+ data.insert.Stack.EndpointType = ui.buff.str()
+ case INS_OS_INTERFACE:
+ data.insert.Stack.Interface = ui.buff.str()
+ case INS_OS_IDAPI:
+ data.insert.Stack.IdentityAPI = ui.buff.str()
+ case INS_OS_IMGAPI:
+ data.insert.Stack.ImageAPI = ui.buff.str()
+ case INS_OS_NETAPI:
+ data.insert.Stack.NetworkAPI = ui.buff.str()
+ case INS_OS_VOLAPI:
+ data.insert.Stack.VolumeAPI = ui.buff.str()
+ case INS_SSH_NOTE,
+ INS_RDP_NOTE + len(data.insert.Drive),
+ INS_CMD_NOTE,
+ INS_OS_NOTE:
+ data.insert.Note = ui.buff.str()
+ }
+ ui.insert_sel_ok = false
+ ui.buff.empty()
+ ui.s.HideCursor()
+ } else {
+ e_readline(event, &ui.buff, ui, data.home_dir)
+ }
}
}
}
diff --git a/src/i_host.go b/src/i_host.go
index ef20aab..6c28f51 100644
--- a/src/i_host.go
+++ b/src/i_host.go
@@ -43,7 +43,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* hardflip: src/i_host.go
- * Tue Jan 23 18:11:24 2024
+ * Tue, 26 Aug 2025 18:38:20 +0200
* Joe
*
* interfacing hosts
@@ -51,14 +51,14 @@
package main
-func i_host_panel_dirs(ui HardUI, icons bool, dir_icon uint8, depth uint16,
+func i_host_panel_dirs(ui HardUI, icons bool, dir_icon uint8,
dir *DirsNode, curr *DirsNode, line int) {
style := ui.style[DIR_STYLE]
if dir == curr {
style = style.Reverse(true)
}
text := " "
- for i := 0; i < int(depth) - 2; i++ {
+ for i := 0; i < int(dir.Depth) - 2; i++ {
text += " "
}
if icons == true {
@@ -131,7 +131,6 @@ func i_draw_host_panel(ui HardUI, icons bool,
dir_icon = 1
}
i_host_panel_dirs(ui, icons, dir_icon,
- ptr.Dirs.Depth,
ptr.Dirs,
litems.curr.Dirs,
line)
diff --git a/src/i_insert.go b/src/i_insert.go
index abe5c30..79d46e6 100644
--- a/src/i_insert.go
+++ b/src/i_insert.go
@@ -43,7 +43,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* hardflip: src/i_insert.go
- * Fri, 24 May 2024 17:47:03 +0200
+ * Tue, 26 Aug 2025 18:40:46 +0200
* Joe
*
* insert a new host
@@ -183,12 +183,12 @@ func i_insert_host(data *HardData, insert *HostNode) error {
0,
nil,
insert,
- data.litems.curr.prev,
+ data.litems.curr,
next,
}
curr := data.litems.curr
if curr != nil {
- data.litems.overwrite(item)
+ data.litems.add_after(item)
// curr.next = item
// if curr.next.next != nil {
// data.litems.curr.next.next.prev = item
diff --git a/src/i_ui.go b/src/i_ui.go
index d9b8925..cbeb9b0 100644
--- a/src/i_ui.go
+++ b/src/i_ui.go
@@ -221,7 +221,6 @@ func i_set_box_style(ui *HardUI) {
ui.style[BOX_STYLE] = tmp.Foreground(tcell.ColorRed).Dim(true)
ui.style[HEAD_STYLE] = tmp.Foreground(tcell.ColorRed).Dim(true)
case MKDIR_MODE,
- INSERT_NAME_MODE,
INSERT_MODE,
RENAME_MODE:
ui.style[BOX_STYLE] = tmp.Foreground(tcell.ColorBlue).Dim(true)
@@ -833,17 +832,16 @@ func i_ui(data_dir string) {
data.keys = c_get_secret_gpg_keyring()
}
fp := [MODE_MAX + 1]key_event_mode_func{
- NORMAL_MODE: e_normal_events,
- DELETE_MODE: e_delete_events,
- LOAD_MODE: e_load_events,
- ERROR_MODE: e_error_events,
- WELCOME_MODE: e_welcome_events,
- MKDIR_MODE: e_mkdir_events,
- INSERT_NAME_MODE: e_insert_name_events,
- INSERT_MODE: e_insert_events,
- RENAME_MODE: e_rename_events,
- HELP_MODE: e_help_events,
- FUZZ_MODE: e_fuzz_events,
+ NORMAL_MODE: e_normal_events,
+ DELETE_MODE: e_delete_events,
+ LOAD_MODE: e_load_events,
+ ERROR_MODE: e_error_events,
+ WELCOME_MODE: e_welcome_events,
+ MKDIR_MODE: e_mkdir_events,
+ INSERT_MODE: e_insert_events,
+ RENAME_MODE: e_rename_events,
+ HELP_MODE: e_help_events,
+ FUZZ_MODE: e_fuzz_events,
}
for {
data.ui.s.Clear()
@@ -876,12 +874,14 @@ func i_ui(data_dir string) {
i_draw_error_msg(data.ui, data.load_err)
case MKDIR_MODE:
i_prompt_mkdir(data.ui, data.litems.curr)
- case INSERT_NAME_MODE:
- i_prompt_insert(data.ui, data.litems.curr)
case INSERT_MODE:
- i_draw_insert_panel(&data.ui, data.insert, data.home_dir)
- if data.insert_err != nil {
- i_draw_insert_err_msg(data.ui, data.insert_err)
+ if data.insert == nil {
+ i_prompt_insert(data.ui, data.litems.curr)
+ } else {
+ i_draw_insert_panel(&data.ui, data.insert, data.home_dir)
+ if data.insert_err != nil {
+ i_draw_insert_err_msg(data.ui, data.insert_err)
+ }
}
case RENAME_MODE:
i_prompt_insert(data.ui, data.litems.curr)