diff options
-rw-r--r-- | src/c_defs.go | 14 | ||||
-rw-r--r-- | src/c_exec.go | 8 | ||||
-rw-r--r-- | src/c_ldirs.go | 2 | ||||
-rw-r--r-- | src/c_litems.go | 12 | ||||
-rw-r--r-- | src/c_utils.go | 3 | ||||
-rw-r--r-- | src/i_events.go | 42 | ||||
-rw-r--r-- | src/i_host.go | 6 | ||||
-rw-r--r-- | src/i_info.go | 154 | ||||
-rw-r--r-- | src/i_insert.go | 32 | ||||
-rw-r--r-- | src/i_ui.go | 155 |
10 files changed, 238 insertions, 190 deletions
diff --git a/src/c_defs.go b/src/c_defs.go index 1385a4c..cc4c264 100644 --- a/src/c_defs.go +++ b/src/c_defs.go @@ -85,13 +85,13 @@ const ( H = 1 ERROR_MSG = 0 ERROR_ERR = 1 - STYLE_DEF = 0 - STYLE_DIR = 1 - STYLE_BOX = 2 - STYLE_HEAD = 3 - STYLE_ERR = 4 - STYLE_TITLE = 5 - STYLE_BOT = 6 + DEF_STYLE = 0 + DIR_STYLE = 1 + BOX_STYLE = 2 + HEAD_STYLE = 3 + ERR_STYLE = 4 + TITLE_STYLE = 5 + BOT_STYLE = 6 ) const ( diff --git a/src/c_exec.go b/src/c_exec.go index 69bff7c..9e96188 100644 --- a/src/c_exec.go +++ b/src/c_exec.go @@ -195,11 +195,11 @@ func c_format_cmd(host *HostNode, opts HardOpts, return nil, nil } if len(gpg) > 0 && gpg != "plain" && len(host.Pass) > 0 { - i_draw_msg(ui.s, 1, ui.style[STYLE_BOX], ui.dim, " GnuPG ") + i_draw_msg(ui.s, 1, ui.style[BOX_STYLE], ui.dim, " GnuPG ") text := "decryption using gpg..." left, right := i_left_right(len(text), ui) i_draw_text(ui.s, left, ui.dim[H] - 3, right, ui.dim[H] - 3, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) ui.s.Show() var err error pass, err = c_decrypt_str(host.Pass) @@ -245,11 +245,11 @@ func c_exec(host *HostNode, opts HardOpts, ui *HardUI) { return } } else { - i_draw_msg(ui.s, 1, ui.style[STYLE_BOX], ui.dim, " Exec ") + i_draw_msg(ui.s, 1, ui.style[BOX_STYLE], ui.dim, " Exec ") text := "running command..." left, right := i_left_right(len(text), ui) i_draw_text(ui.s, left, ui.dim[H] - 3, right, ui.dim[H] - 3, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) ui.s.Show() } if err, err_str := c_exec_cmd(cmd_fmt, cmd_env, silent); diff --git a/src/c_ldirs.go b/src/c_ldirs.go index b2978f3..ce9c424 100644 --- a/src/c_ldirs.go +++ b/src/c_ldirs.go @@ -112,7 +112,7 @@ func (dir *DirsNode) path() string { var path string if dir == nil { - return "" + return "/" } curr := dir for curr != nil { diff --git a/src/c_litems.go b/src/c_litems.go index 229df41..67240c3 100644 --- a/src/c_litems.go +++ b/src/c_litems.go @@ -219,3 +219,15 @@ func (litems *ItemsList) reset_id() { ptr.next.ID = ptr.ID + 1 } } + +func (item *ItemsNode) path_node() *DirsNode { + if item.is_dir() == true { + return item.Dirs + } else { + return item.Host.Parent + } +} + +func (item *ItemsNode) path() string { + return item.path_node().path() +} diff --git a/src/c_utils.go b/src/c_utils.go index 667ecbc..8ee2fe1 100644 --- a/src/c_utils.go +++ b/src/c_utils.go @@ -158,6 +158,9 @@ func c_error_mode(msg string, err error, ui *HardUI) { // c_encrypt_str encrypts a string with the given gpgkey func c_encrypt_str(str string, gpg string) (string, error) { + if len(gpg) == 0 || gpg == "plain" { + return str, nil + } cmd := exec.Command("gpg", "-r", gpg, "-a", "-e") cmd.Stdin = strings.NewReader(str) out, err := cmd.Output() diff --git a/src/i_events.go b/src/i_events.go index 2899d7c..6143f8c 100644 --- a/src/i_events.go +++ b/src/i_events.go @@ -297,11 +297,7 @@ func i_mkdir(data *HardData, ui *HardUI) { } path := "/" if data.litems.curr != nil { - if data.litems.curr.is_dir() == true { - path = data.litems.curr.Dirs.path() - } else { - path = data.litems.curr.Host.Parent.path() - } + path = data.litems.curr.path() } if err := os.MkdirAll(data.data_dir + path + @@ -321,18 +317,21 @@ func i_mkdir(data *HardData, ui *HardUI) { } } -func i_set_protocol_defaults(in *HostNode) { +func i_set_protocol_defaults(data *HardData, in *HostNode) { switch in.Protocol { case 0: in.Port = 22 + data.ui.insert_sel_max = 5 case 1: in.Port = 3389 in.Quality = 2 in.Width = 1600 in.Height = 1200 in.Dynamic = true + data.ui.insert_sel_max = 4 case 2: in.Shell = []string{"/bin/sh", "-c"} + data.ui.insert_sel_max = 2 case 3: in.Stack.RegionName = "eu-west-0" in.Stack.IdentityAPI = "3" @@ -341,6 +340,7 @@ func i_set_protocol_defaults(in *HostNode) { in.Stack.VolumeAPI = "3.42" in.Stack.EndpointType = "publicURL" in.Stack.Interface = "public" + data.ui.insert_sel_max = 2 } } @@ -469,7 +469,6 @@ func i_events(data *HardData) { event.Rune() == 'i' { data.ui.mode = INSERT_MODE data.ui.insert_sel = 0 - data.ui.insert_sel_max = 4 data.ui.insert_sel_ok = false } else if event.Key() == tcell.KeyCtrlR { event = nil @@ -539,16 +538,20 @@ func i_events(data *HardData) { } ui.s.HideCursor() data.insert = &HostNode{} - i_set_protocol_defaults(data.insert) + i_set_protocol_defaults(data, data.insert) data.insert.Name = ui.buff ui.buff = "" + if data.litems.curr != nil { + data.insert.Parent = data.litems.curr.path_node() + } } else { i_readline(event, data) } } else if data.insert != nil { if data.ui.insert_sel_ok == false { if event.Key() == tcell.KeyEscape || - event.Key() == tcell.KeyCtrlC { + event.Key() == tcell.KeyCtrlC || + event.Rune() == 'q' { ui.s.HideCursor() data.ui.mode = NORMAL_MODE data.ui.insert_sel = 0 @@ -583,20 +586,37 @@ func i_events(data *HardData) { switch data.ui.insert_sel { case 0: if event.Rune() < '1' || event.Rune() > '4' { + data.ui.insert_sel_ok = false + ui.buff = "" + ui.s.HideCursor() break } else { + name := data.insert.Name + parent := data.insert.Parent + data.insert = nil + data.insert = &HostNode{} + data.insert.Name = name + data.insert.Parent = parent data.insert.Protocol = int8(event.Rune() - 48 - 1) data.ui.insert_sel_ok = false ui.s.HideCursor() - i_set_protocol_defaults(data.insert) + i_set_protocol_defaults(data, data.insert) } - case 1, 2: + case 1, 2, 3, 4: if event.Key() == tcell.KeyEnter { if data.ui.insert_sel == 1 { data.insert.Host = ui.buff } else if data.ui.insert_sel == 2 { tmp, _ := strconv.Atoi(ui.buff) data.insert.Port = uint16(tmp) + } else if data.ui.insert_sel == 3 { + data.insert.User = ui.buff + } else if data.ui.insert_sel == 4 { + pass, _ := c_encrypt_str(ui.buff, + data.opts.GPG) + data.insert.Pass = pass + } else if data.ui.insert_sel == 5 { + data.insert.Priv = ui.buff } data.ui.insert_sel_ok = false ui.buff = "" diff --git a/src/i_host.go b/src/i_host.go index 9afb352..76334e1 100644 --- a/src/i_host.go +++ b/src/i_host.go @@ -53,7 +53,7 @@ package main func i_host_panel_dirs(ui HardUI, icons bool, dir_icon uint8, dir *DirsNode, curr *DirsNode, line int) { - style := ui.style[STYLE_DIR] + style := ui.style[DIR_STYLE] if dir == curr { // style = style.Background(tcell.ColorBlack) style = style.Reverse(true) @@ -78,7 +78,7 @@ func i_host_panel_dirs(ui HardUI, icons bool, dir_icon uint8, func i_host_panel_host(ui HardUI, icons bool, depth uint16, host *HostNode, curr *HostNode, line int) { - style := ui.style[STYLE_DEF] + style := ui.style[DEF_STYLE] if host == curr { // style = style.Background(tcell.ColorBlack) style = style.Reverse(true) @@ -105,7 +105,7 @@ func i_draw_host_panel(ui HardUI, icons bool, litems *ItemsList, data *HardData) { i_draw_box(ui.s, 0, 0, ui.dim[W] / 3, ui.dim[H] - 2, - ui.style[STYLE_BOX], ui.style[STYLE_HEAD], " Hosts ", false) + ui.style[BOX_STYLE], ui.style[HEAD_STYLE], " Hosts ", false) line := 1 if litems == nil || litems.head == nil { return diff --git a/src/i_info.go b/src/i_info.go index 14eb9b0..f36a998 100644 --- a/src/i_info.go +++ b/src/i_info.go @@ -63,24 +63,24 @@ func i_info_dirs(ui HardUI, dir *DirsNode) { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Name: ") + ui.style[TITLE_STYLE], "Name: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], dir.Name) + ui.style[DEF_STYLE], dir.Name) if line += 1; line > ui.dim[H] - 3 { return } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Type: ") + ui.style[TITLE_STYLE], "Type: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], "Directory") + ui.style[DEF_STYLE], "Directory") if line += 2; line > ui.dim[H] - 3 { return } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Path: ") + ui.style[TITLE_STYLE], "Path: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], dir.path()[1:]) + ui.style[DEF_STYLE], dir.path()[1:]) } func i_info_name_type(ui HardUI, host *HostNode) int { @@ -90,17 +90,17 @@ func i_info_name_type(ui HardUI, host *HostNode) int { // name, type i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Name: ") + ui.style[TITLE_STYLE], "Name: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Name) + ui.style[DEF_STYLE], host.Name) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Type: ") + ui.style[TITLE_STYLE], "Type: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host_type) + ui.style[DEF_STYLE], host_type) if line += 2; line > ui.dim[H] - 3 { return line } return line } @@ -110,42 +110,42 @@ func i_info_ssh(ui HardUI, host *HostNode, line int) int { // host, port i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Host: ") + ui.style[TITLE_STYLE], "Host: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Host) + ui.style[DEF_STYLE], host.Host) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Port: ") + ui.style[TITLE_STYLE], "Port: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], strconv.Itoa(int(host.Port))) + ui.style[DEF_STYLE], strconv.Itoa(int(host.Port))) if line += 2; line > ui.dim[H] - 3 { return line } // user infos i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "User: ") + ui.style[TITLE_STYLE], "User: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.User) + ui.style[DEF_STYLE], host.User) if line += 1; line > ui.dim[H] - 3 { return line } if len(host.Pass) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Pass: ") + ui.style[TITLE_STYLE], "Pass: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], "***") + ui.style[DEF_STYLE], "***") if line += 1; line > ui.dim[H] - 3 { return line } } if len(host.Priv) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Privkey: ") + ui.style[TITLE_STYLE], "Privkey: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 12, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Priv) + ui.style[DEF_STYLE], host.Priv) if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } @@ -153,45 +153,45 @@ func i_info_ssh(ui HardUI, host *HostNode, line int) int { if len(host.Jump.Host) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Jump settings: ") + ui.style[TITLE_STYLE], "Jump settings: ") if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Host: ") + ui.style[TITLE_STYLE], "Host: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 10, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Jump.Host) + ui.style[DEF_STYLE], host.Jump.Host) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Port: ") + ui.style[TITLE_STYLE], "Port: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 10, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], strconv.Itoa(int(host.Jump.Port))) + ui.style[DEF_STYLE], strconv.Itoa(int(host.Jump.Port))) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "User: ") + ui.style[TITLE_STYLE], "User: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 10, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Jump.User) + ui.style[DEF_STYLE], host.Jump.User) if line += 1; line > ui.dim[H] - 3 { return line } if len(host.Jump.Pass) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Pass: ") + ui.style[TITLE_STYLE], "Pass: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 10, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], "***") + ui.style[DEF_STYLE], "***") if line += 1; line > ui.dim[H] - 3 { return line } } if len(host.Jump.Priv) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Privkey: ") + ui.style[TITLE_STYLE], "Privkey: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 13, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Jump.Priv) + ui.style[DEF_STYLE], host.Jump.Priv) if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } @@ -204,53 +204,53 @@ func i_info_rdp(ui HardUI, host *HostNode, line int) int { // host, port i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Host: ") + ui.style[TITLE_STYLE], "Host: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Host) + ui.style[DEF_STYLE], host.Host) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Port: ") + ui.style[TITLE_STYLE], "Port: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], strconv.Itoa(int(host.Port))) + ui.style[DEF_STYLE], strconv.Itoa(int(host.Port))) if line += 1; line > ui.dim[H] - 3 { return line } // rdp shit if len(host.Domain) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Domain: ") + ui.style[TITLE_STYLE], "Domain: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 11, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Domain) + ui.style[DEF_STYLE], host.Domain) if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } if len(host.RDPFile) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "RDP File: ") + ui.style[TITLE_STYLE], "RDP File: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 13, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.RDPFile) + ui.style[DEF_STYLE], host.RDPFile) if line += 2; line > ui.dim[H] - 3 { return line } } // user infos i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "User: ") + ui.style[TITLE_STYLE], "User: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.User) + ui.style[DEF_STYLE], host.User) if line += 1; line > ui.dim[H] - 3 { return line } if len(host.Pass) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Pass: ") + ui.style[TITLE_STYLE], "Pass: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], "***") + ui.style[DEF_STYLE], "***") if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } @@ -258,40 +258,40 @@ func i_info_rdp(ui HardUI, host *HostNode, line int) int { qual := [3]string{"Low", "Medium", "High"} i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Screen size: ") + ui.style[TITLE_STYLE], "Screen size: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 16, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], + ui.style[DEF_STYLE], strconv.Itoa(int(host.Width)) + "x" + strconv.Itoa(int(host.Height))) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Dynamic window: ") + ui.style[TITLE_STYLE], "Dynamic window: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 19, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], strconv.FormatBool(host.Dynamic)) + ui.style[DEF_STYLE], strconv.FormatBool(host.Dynamic)) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Quality: ") + ui.style[TITLE_STYLE], "Quality: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 12, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], qual[host.Quality]) + ui.style[DEF_STYLE], qual[host.Quality]) if line += 2; line > ui.dim[H] - 3 { return line } if host.Drive != nil { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Drives: ") + ui.style[TITLE_STYLE], "Drives: ") if line += 1; line > ui.dim[H] - 3 { return line } for share, path := range host.Drive { i_draw_text(ui.s, (ui.dim[W] / 3) + 4, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], share + ":") + ui.style[TITLE_STYLE], share + ":") i_draw_text(ui.s, (ui.dim[W] / 3) + 4 + len(share) + 2, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], path) + ui.style[DEF_STYLE], path) if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } @@ -303,28 +303,28 @@ func i_info_cmd(ui HardUI, host *HostNode, line int) int { if line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Command: ") + ui.style[TITLE_STYLE], "Command: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 12, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Host) + ui.style[DEF_STYLE], host.Host) if line += 2; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Silent: ") + ui.style[TITLE_STYLE], "Silent: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 11, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], strconv.FormatBool(host.Silent)) + ui.style[DEF_STYLE], strconv.FormatBool(host.Silent)) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Shell: ") + ui.style[TITLE_STYLE], "Shell: ") str := "" for _, s := range host.Shell { str += s + " " } i_draw_text(ui.s, (ui.dim[W] / 3) + 10, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], str) + ui.style[DEF_STYLE], str) if line += 2; line > ui.dim[H] - 3 { return line } return line } @@ -333,47 +333,47 @@ func i_info_openstack(ui HardUI, host *HostNode, line int) int { if line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Endpoint: ") + ui.style[TITLE_STYLE], "Endpoint: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 13, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Host) + ui.style[DEF_STYLE], host.Host) if line += 2; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "User domain ID: ") + ui.style[TITLE_STYLE], "User domain ID: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 19, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Stack.UserDomainID) + ui.style[DEF_STYLE], host.Stack.UserDomainID) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Project ID: ") + ui.style[TITLE_STYLE], "Project ID: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 15, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Stack.ProjectID) + ui.style[DEF_STYLE], host.Stack.ProjectID) if line += 1; line > ui.dim[H] - 3 { return line } i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Region name: ") + ui.style[TITLE_STYLE], "Region name: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 16, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Stack.RegionName) + ui.style[DEF_STYLE], host.Stack.RegionName) if line += 2; line > ui.dim[H] - 3 { return line } // user infos i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "User: ") + ui.style[TITLE_STYLE], "User: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.User) + ui.style[DEF_STYLE], host.User) if line += 1; line > ui.dim[H] - 3 { return line } if len(host.Pass) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Pass: ") + ui.style[TITLE_STYLE], "Pass: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], "***") + ui.style[DEF_STYLE], "***") if line += 1; line > ui.dim[H] - 3 { return line } } if line += 1; line > ui.dim[H] - 3 { return line } @@ -388,10 +388,10 @@ func i_info_note(ui HardUI, host *HostNode, line int) { if len(host.Note) > 0 { i_draw_text(ui.s, (ui.dim[W] / 3) + 3, line, ui.dim[W] - 2, line, - ui.style[STYLE_TITLE], "Note: ") + ui.style[TITLE_STYLE], "Note: ") i_draw_text(ui.s, (ui.dim[W] / 3) + 9, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], host.Note) + ui.style[DEF_STYLE], host.Note) } } @@ -400,10 +400,10 @@ func i_draw_info_panel(ui HardUI, percent bool, litems *ItemsList) { i_draw_box(ui.s, (ui.dim[W] / 3), 0, ui.dim[W] - 1, ui.dim[H] - 2, - ui.style[STYLE_BOX], ui.style[STYLE_HEAD], " Infos ", false) - ui.s.SetContent(ui.dim[W] / 3, 0, tcell.RuneTTee, nil, ui.style[STYLE_BOX]) + ui.style[BOX_STYLE], ui.style[HEAD_STYLE], " Infos ", false) + ui.s.SetContent(ui.dim[W] / 3, 0, tcell.RuneTTee, nil, ui.style[BOX_STYLE]) ui.s.SetContent(ui.dim[W] / 3, ui.dim[H] - 2, - tcell.RuneBTee, nil, ui.style[STYLE_BOX]) + tcell.RuneBTee, nil, ui.style[BOX_STYLE]) if litems == nil { return } @@ -420,7 +420,7 @@ func i_draw_info_panel(ui HardUI, percent bool, litems *ItemsList) { ui.dim[H] - 2, (ui.dim[W] - 1) - 1, ui.dim[H] - 2, - ui.style[STYLE_DEF], + ui.style[DEF_STYLE], text) } else { text := " 0 hosts " @@ -429,7 +429,7 @@ func i_draw_info_panel(ui HardUI, percent bool, litems *ItemsList) { ui.dim[H] - 2, (ui.dim[W] - 1) - 1, ui.dim[H] - 2, - ui.style[STYLE_DEF], + ui.style[DEF_STYLE], text) } // panel diff --git a/src/i_insert.go b/src/i_insert.go index ff967ce..536d3fa 100644 --- a/src/i_insert.go +++ b/src/i_insert.go @@ -59,7 +59,7 @@ import ( func i_draw_text_box(ui HardUI, line int, dim Quad, label, content string, id, selected int) { const tbox_size int = 14 - tbox_style := ui.style[STYLE_DEF].Background(tcell.ColorBlack).Dim(true) + tbox_style := ui.style[DEF_STYLE].Background(tcell.ColorBlack).Dim(true) if id == selected { tbox_style = tbox_style.Reverse(true).Dim(false) @@ -68,7 +68,7 @@ func i_draw_text_box(ui HardUI, line int, dim Quad, label, content string, l := ui.dim[W] / 2 - len(label) - 2 if l <= dim.L { l = dim.L + 1 } i_draw_text(ui.s, l, line, ui.dim[W] / 2, line, - ui.style[STYLE_DEF], label) + ui.style[DEF_STYLE], label) spaces := "" for i := 0; i < tbox_size; i++ { spaces += " " @@ -76,6 +76,9 @@ func i_draw_text_box(ui HardUI, line int, dim Quad, label, content string, i_draw_text(ui.s, ui.dim[W] / 2, line, dim.R, line, tbox_style, "[" + spaces + "]") + if id == 4 && len(content) > 0 { + content = "***" + } i_draw_text(ui.s, ui.dim[W] / 2 + 1, line, ui.dim[W] / 2 + 1 + tbox_size, line, tbox_style, content) } @@ -91,12 +94,12 @@ func i_draw_insert_panel(ui HardUI, in *HostNode) { ui.dim[H] - ui.dim[H] / 8, } i_draw_box(ui.s, win.L, win.T, win.R, win.B, - ui.style[STYLE_BOX], ui.style[STYLE_HEAD], + ui.style[BOX_STYLE], ui.style[HEAD_STYLE], " Insert - " + in.Name + " ", true) line := 2 i_draw_text_box(ui, win.T + line, win, "Connection type", in.protocol_str(), 0, ui.insert_sel) - line += 2 + line += 3 switch in.Protocol { case 0: i_draw_insert_ssh(ui, line, win, in) @@ -104,14 +107,25 @@ func i_draw_insert_panel(ui HardUI, in *HostNode) { } func i_draw_insert_ssh(ui HardUI, line int, win Quad, in *HostNode) { + if win.T + line >= win.B { return } + text := "---- Host settings ----" + i_draw_text(ui.s, ui.dim[W] / 2 - len(text) / 2, win.T + line, win.R - 1, + win.T + line, ui.style[DEF_STYLE], text) + if line += 2; win.T + line >= win.B { return } i_draw_text_box(ui, win.T + line, win, "Host/IP", in.Host, 1, ui.insert_sel) - line += 1 + if line += 1; win.T + line >= win.B { return } i_draw_text_box(ui, win.T + line, win, "Port", strconv.Itoa(int(in.Port)), 2, ui.insert_sel) - line += 2 + if line += 2; win.T + line >= win.B { return } i_draw_text_box(ui, win.T + line, win, "User", in.User, 3, ui.insert_sel) - line += 1 - i_draw_text_box(ui, win.T + line, win, "Pass", in.Pass, 4, ui.insert_sel) // TODO: gpg - line += 1 + if line += 1; win.T + line >= win.B { return } + i_draw_text_box(ui, win.T + line, win, "Pass", in.Pass, 4, ui.insert_sel) + if line += 1; win.T + line >= win.B { return } + i_draw_text_box(ui, win.T + line, win, "SSH private key", + in.Pass, 5, ui.insert_sel) + if line += 3; win.T + line >= win.B { return } + text = "---- Jump settings ----" + i_draw_text(ui.s, ui.dim[W] / 2 - len(text) / 2, win.T + line, win.R - 1, + win.T + line, ui.style[DEF_STYLE], text) // TODO: here } diff --git a/src/i_ui.go b/src/i_ui.go index 8e1f3b5..f52a3bc 100644 --- a/src/i_ui.go +++ b/src/i_ui.go @@ -202,10 +202,10 @@ func i_draw_bottom_text(ui HardUI, opts HardOpts, insert *HostNode) { } i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_BOT], text) + ui.style[BOT_STYLE], text) i_draw_text(ui.s, ui.dim[W] - len(VERSION) - 2, ui.dim[H] - 1, - ui.dim[W] - 1, ui.dim[H] - 1, ui.style[STYLE_BOT], " " + VERSION) + ui.dim[W] - 1, ui.dim[H] - 1, ui.style[BOT_STYLE], " " + VERSION) } func i_draw_welcome_box(ui HardUI) { @@ -213,7 +213,7 @@ func i_draw_welcome_box(ui HardUI) { b_max := ui.dim[H] / 2 - 1 i_draw_box(ui.s, l_max - 1, 0, r_max, b_max + 1, - ui.style[STYLE_BOX], ui.style[STYLE_HEAD], "", true) + ui.style[BOX_STYLE], ui.style[HEAD_STYLE], "", true) art := [4]string{ ` _ __`, `| |_ / _|`, @@ -228,7 +228,7 @@ func i_draw_welcome_box(ui HardUI) { if l < l_max { l = l_max }; if r > r_max { r = r_max } i_draw_text(ui.s, l, k + 1, r, k + 1, - ui.style[STYLE_DEF], v) + ui.style[DEF_STYLE], v) } if line > b_max { return } text := "hf " + VERSION @@ -238,32 +238,32 @@ func i_draw_welcome_box(ui HardUI) { l, r := ui.dim[W] / 2 - len(text) / 2 + 7, ui.dim[W] / 2 + len(text) / 2 + 1 + 7 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) if line += 2; line > b_max { return } text = `Welcome to hardflip!` l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) text = `Please select the gpg key ID to be used` if line += 1; line > b_max { return } l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) text = `for password encryption` if line += 1; line > b_max { return } l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) text = `Set gpg key can be modified in the config file` if line += 1; line > b_max { return } l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) text = `If you don't want to use GnuPG for password` if line += 2; line > b_max { return } l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) text = `storage, please select ` text_2 := `plain` text_3 := ` (plaintext passwords` @@ -271,21 +271,21 @@ func i_draw_welcome_box(ui HardUI) { l = ui.dim[W] / 2 - len(text + text_2 + text_3) / 2 r = r_max if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) l = l + len(text) r = l + len(text_2) if l < l_max { l = l_max }; if r > r_max { r = r_max } if l >= r_max { return } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF].Bold(true), text_2) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE].Bold(true), text_2) l = l + len(text_2) r = l + len(text_3) if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text_3) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text_3) text = `are not recommended)` if line += 1; line > b_max { return } l, r = ui.dim[W] / 2 - len(text) / 2, ui.dim[W] / 2 + len(text) / 2 + 1 if l < l_max { l = l_max }; if r > r_max { r = r_max } - i_draw_text(ui.s, l, line, r, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, l, line, r, line, ui.style[DEF_STYLE], text) } func i_prompt_gpg(ui HardUI, keys [][2]string) { @@ -293,7 +293,7 @@ func i_prompt_gpg(ui HardUI, keys [][2]string) { if lines == 1 { lines = 2 } - i_draw_msg(ui.s, lines, ui.style[STYLE_BOX], ui.dim, " GnuPG keys ") + i_draw_msg(ui.s, lines, ui.style[BOX_STYLE], ui.dim, " GnuPG keys ") for k, v := range keys { text := "" if v[0] != "plain" { @@ -304,146 +304,139 @@ func i_prompt_gpg(ui HardUI, keys [][2]string) { } line := ui.dim[H] - 2 - len(keys) + k i_draw_text(ui.s, 2, line, ui.dim[W] - 2, line, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) } if len(keys) == 1 { i_draw_text(ui.s, 2, ui.dim[H] - 4, ui.dim[W] - 1, ui.dim[H] - 4, - ui.style[STYLE_DEF], + ui.style[DEF_STYLE], "No gpg key! Creating your gpg key first is recommended") } i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], "gpg: ") + ui.style[DEF_STYLE], "gpg: ") ui.s.ShowCursor(6, ui.dim[H] - 1) } func i_prompt_confirm_gpg(ui HardUI, opts HardOpts) { if opts.GPG == "plain" { - i_draw_msg(ui.s, 1, ui.style[STYLE_BOX], ui.dim, " Confirm plaintext ") + i_draw_msg(ui.s, 1, ui.style[BOX_STYLE], ui.dim, " Confirm plaintext ") text := "Really use plaintext to store passwords?" l, r := i_left_right(len(text), &ui) i_draw_text(ui.s, l, ui.dim[H] - 3, r, ui.dim[H] - 3, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) return } - i_draw_msg(ui.s, 2, ui.style[STYLE_BOX], ui.dim, " Confirm GnuPG key ") + i_draw_msg(ui.s, 2, ui.style[BOX_STYLE], ui.dim, " Confirm GnuPG key ") text := "Really use this gpg key?" l, r := i_left_right(len(text), &ui) i_draw_text(ui.s, l, ui.dim[H] - 4, r, ui.dim[H] - 4, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) l, r = i_left_right(len(opts.GPG), &ui) i_draw_text(ui.s, l, ui.dim[H] - 3, r, ui.dim[H] - 3, - ui.style[STYLE_DEF], opts.GPG) + ui.style[DEF_STYLE], opts.GPG) } func i_prompt_mkdir(ui HardUI, curr *ItemsNode) { path := "/" if curr != nil { - if curr.is_dir() == true { - path = curr.Dirs.path() - } else { - path = curr.Host.Parent.path() - } + path = curr.path() } path = path[1:] prompt := "mkdir: " i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], prompt) + ui.style[DEF_STYLE], prompt) i_draw_text(ui.s, len(prompt) + 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], path) + ui.style[DEF_STYLE], path) i_draw_text(ui.s, len(prompt) + 1 + len(path), ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF].Bold(true), ui.buff) + ui.style[DEF_STYLE].Bold(true), ui.buff) ui.s.ShowCursor(len(prompt) + 1 + len(path) + len(ui.buff), ui.dim[H] - 1) } func i_prompt_type(ui HardUI) { - i_draw_msg(ui.s, 4, ui.style[STYLE_BOX], ui.dim, " Connection type ") + i_draw_msg(ui.s, 4, ui.style[BOX_STYLE], ui.dim, " Connection type ") i_draw_text(ui.s, 2, ui.dim[H] - 6, ui.dim[W] - 2, ui.dim[H] - 6, - ui.style[STYLE_DEF], "[1] SSH") + ui.style[DEF_STYLE], "[1] SSH") i_draw_text(ui.s, 2, ui.dim[H] - 5, ui.dim[W] - 2, ui.dim[H] - 5, - ui.style[STYLE_DEF], "[2] RDP") + ui.style[DEF_STYLE], "[2] RDP") i_draw_text(ui.s, 2, ui.dim[H] - 4, ui.dim[W] - 2, ui.dim[H] - 4, - ui.style[STYLE_DEF], "[3] Single command") + ui.style[DEF_STYLE], "[3] Single command") i_draw_text(ui.s, 2, ui.dim[H] - 3, ui.dim[W] - 2, ui.dim[H] - 3, - ui.style[STYLE_DEF], "[4] OpenStack CLI") + ui.style[DEF_STYLE], "[4] OpenStack CLI") text := "Type: " i_draw_text(ui.s, 0, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) ui.s.ShowCursor(len(text), ui.dim[H] - 1) } -func i_prompt_generic(ui HardUI, prompt string) { +func i_prompt_generic(ui HardUI, prompt string, secret bool) { i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], prompt) + ui.style[DEF_STYLE], prompt) + if secret == true { + ui.s.ShowCursor(len(prompt) + 1, ui.dim[H] - 1) + return + } i_draw_text(ui.s, len(prompt) + 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF].Bold(true), ui.buff) + ui.style[DEF_STYLE].Bold(true), ui.buff) ui.s.ShowCursor(len(prompt) + 1 + len(ui.buff), ui.dim[H] - 1) } func i_prompt_insert(ui HardUI, curr *ItemsNode) { path := "/" - if curr != nil { - if curr.is_dir() == true { - path = curr.Dirs.path() - } else { - path = curr.Host.Parent.path() - } - } + path = curr.path() path = path[1:] prompt := "Name: " i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], prompt) + ui.style[DEF_STYLE], prompt) i_draw_text(ui.s, len(prompt) + 1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF], path) + ui.style[DEF_STYLE], path) i_draw_text(ui.s, len(prompt) + 1 + len(path), ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, - ui.style[STYLE_DEF].Bold(true), ui.buff) + ui.style[DEF_STYLE].Bold(true), ui.buff) ui.s.ShowCursor(len(prompt) + 1 + len(path) + len(ui.buff), ui.dim[H] - 1) } func i_draw_zhosts_box(ui HardUI) { - i_draw_msg(ui.s, 1, ui.style[STYLE_BOX], ui.dim, " No hosts ") + i_draw_msg(ui.s, 1, ui.style[BOX_STYLE], ui.dim, " No hosts ") text := "Hosts list empty. Add hosts/folders by pressing (a/m)" left, right := i_left_right(len(text), &ui) i_draw_text(ui.s, left, ui.dim[H] - 2 - 1, right, ui.dim[H] - 2 - 1, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) } func i_draw_delete_msg(ui HardUI, item *ItemsNode) { var text string var file string + file = item.path() if item.is_dir() == true { text = "Really delete this directory and all of its content?" - file = item.Dirs.path() } else { - host := item.Host text = "Really delete this host?" - file = host.Parent.path() + host.Filename + file += item.Host.Filename } file = file[1:] - i_draw_msg(ui.s, 2, ui.style[STYLE_BOX], ui.dim, " Delete ") + i_draw_msg(ui.s, 2, ui.style[BOX_STYLE], ui.dim, " Delete ") left, right := i_left_right(len(text), &ui) line := ui.dim[H] - 2 - 2 - i_draw_text(ui.s, left, line, right, line, ui.style[STYLE_DEF], text) + i_draw_text(ui.s, left, line, right, line, ui.style[DEF_STYLE], text) left, right = i_left_right(len(file), &ui) line += 1 i_draw_text(ui.s, left, line, right, line, - ui.style[STYLE_DEF].Bold(true), file) + ui.style[DEF_STYLE].Bold(true), file) } func i_draw_load_error_msg(ui HardUI, load_err []error) { lines := len(load_err) - i_draw_msg(ui.s, lines, ui.style[STYLE_BOX], ui.dim, " Load time errors ") + i_draw_msg(ui.s, lines, ui.style[BOX_STYLE], ui.dim, " Load time errors ") left, right := 1, ui.dim[W] - 1 line := ui.dim[H] - 2 - 1 - len(load_err) if line < 0 { @@ -453,7 +446,7 @@ func i_draw_load_error_msg(ui HardUI, load_err []error) { line += 1 err_str := fmt.Sprintf("%v", err) i_draw_text(ui.s, left, line, right, line, - ui.style[STYLE_ERR], err_str) + ui.style[ERR_STYLE], err_str) } } @@ -466,18 +459,18 @@ func i_draw_error_msg(ui HardUI, load_err []error) { if len(ui.err[ERROR_ERR]) == 0 { lines = 1 } - i_draw_msg(ui.s, lines, ui.style[STYLE_BOX], ui.dim, " Error ") + i_draw_msg(ui.s, lines, ui.style[BOX_STYLE], ui.dim, " Error ") left, right := 1, ui.dim[W] - 2 line := ui.dim[H] - 2 - 2 if len(ui.err[ERROR_ERR]) == 0 { line += 1 } i_draw_text(ui.s, left, line, right, line, - ui.style[STYLE_ERR], ui.err[ERROR_MSG]) + ui.style[ERR_STYLE], ui.err[ERROR_MSG]) if len(ui.err[ERROR_ERR]) > 0 { line += 1 i_draw_text(ui.s, left, line, right, line, - ui.style[STYLE_ERR], ui.err[ERROR_ERR]) + ui.style[ERR_STYLE], ui.err[ERROR_ERR]) } } @@ -494,12 +487,12 @@ func i_draw_scrollhint(ui HardUI, litems *ItemsList) { if draw_id > 1 { ui.s.SetContent(0, 1, '▲', - nil, ui.style[STYLE_BOX]) + nil, ui.style[BOX_STYLE]) } if last - draw_id > h { ui.s.SetContent(0, ui.dim[H] - 3, '▼', - nil, ui.style[STYLE_BOX]) + nil, ui.style[BOX_STYLE]) return } } @@ -518,14 +511,14 @@ func i_draw_load_ui(ui *HardUI, opts HardOpts) { text += " " } i_draw_text(ui.s, 1, ui.dim[H] - 1, ui.dim[W], ui.dim[H] - 1, - ui.style[STYLE_BOT], text) + ui.style[BOT_STYLE], text) i_draw_bottom_text(*ui, opts, nil) - i_draw_msg(ui.s, 1, ui.style[STYLE_BOX], ui.dim, " Loading ") + i_draw_msg(ui.s, 1, ui.style[BOX_STYLE], ui.dim, " Loading ") text = "Loading " + strconv.Itoa(g_load_count) + " hosts" left, right := i_left_right(len(text), ui) i_draw_text(ui.s, left, ui.dim[H] - 2 - 1, right, ui.dim[H] - 2 - 1, - ui.style[STYLE_DEF], text) + ui.style[DEF_STYLE], text) ui.s.Show() ui.s.PostEvent(nil) event := ui.s.PollEvent() @@ -570,28 +563,28 @@ func i_ui(data_dir string) { if err := ui.s.Init(); err != nil { c_die("view", err) } - ui.style[STYLE_DEF] = tcell.StyleDefault. + ui.style[DEF_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorReset) - ui.style[STYLE_DIR] = tcell.StyleDefault. + ui.style[DIR_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorBlue).Dim(true).Bold(true) - ui.style[STYLE_BOX] = tcell.StyleDefault. + ui.style[BOX_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorReset) - ui.style[STYLE_HEAD] = tcell.StyleDefault. + ui.style[HEAD_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorReset) - ui.style[STYLE_ERR] = tcell.StyleDefault. + ui.style[ERR_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorRed).Dim(true) - ui.style[STYLE_TITLE] = tcell.StyleDefault. + ui.style[TITLE_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorBlue).Dim(true).Bold(true) - ui.style[STYLE_BOT] = tcell.StyleDefault. + ui.style[BOT_STYLE] = tcell.StyleDefault. Background(tcell.ColorReset). Foreground(tcell.ColorBlue).Dim(true) - ui.s.SetStyle(ui.style[STYLE_DEF]) + ui.s.SetStyle(ui.style[DEF_STYLE]) ui.dim[W], ui.dim[H], _ = term.GetSize(0) var load_err []error conf_dir := c_get_conf_dir(&load_err) @@ -651,9 +644,15 @@ func i_ui(data_dir string) { case 0: i_prompt_type(data.ui) case 1: - i_prompt_generic(data.ui, "Host/IP: ") + i_prompt_generic(data.ui, "Host/IP: ", false) case 2: - i_prompt_generic(data.ui, "Port: ") + i_prompt_generic(data.ui, "Port: ", false) + case 3: + i_prompt_generic(data.ui, "User: ", false) + case 4: + i_prompt_generic(data.ui, "Pass: ", true) + case 5: + i_prompt_generic(data.ui, "Private key: ", false) } } } |