diff options
Diffstat (limited to '')
| -rw-r--r-- | src/i_events.go | 27 | ||||
| -rw-r--r-- | src/i_insert.go | 50 | ||||
| -rw-r--r-- | src/i_ui.go | 33 | 
3 files changed, 64 insertions, 46 deletions
| diff --git a/src/i_events.go b/src/i_events.go index 6582ac6..39db96a 100644 --- a/src/i_events.go +++ b/src/i_events.go @@ -570,10 +570,12 @@ func i_events(data *HardData) {  					} else if event.Key() == tcell.KeyEnter {  						data.ui.insert_sel_ok = true  						switch data.ui.insert_sel { -						case 1: -							ui.buff = data.insert.Host -						case 2: -							ui.buff = strconv.Itoa(int(data.insert.Port)) +						case 1: ui.buff = data.insert.Host +						case 2: ui.buff = strconv.Itoa(int(data.insert.Port)) +						case 3: ui.buff = data.insert.User +						case 4: break +						case 5: ui.buff = data.insert.Priv +						case 6: ui.buff = data.insert.Jump.Host  						}  					}  				} else { @@ -604,21 +606,18 @@ func i_events(data *HardData) {  						}  					case 1, 2, 3, 4, 5, 6:  						if event.Key() == tcell.KeyEnter { -							if data.ui.insert_sel == 1 { -								data.insert.Host = ui.buff -							} else if data.ui.insert_sel == 2 { +							switch data.ui.insert_sel { +							case 1: data.insert.Host = ui.buff +							case 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 { +							case 3: data.insert.User = ui.buff +							case 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 -							} else if data.ui.insert_sel == 6 { -								data.insert.Jump.Host = ui.buff +							case 5: data.insert.Priv = ui.buff +							case 6: data.insert.Jump.Host = ui.buff  							}  							data.ui.insert_sel_ok = false  							ui.buff = "" diff --git a/src/i_insert.go b/src/i_insert.go index e2f677d..7d5a6ed 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) { +					 id, selected int, red bool) {  	const tbox_size int = 14  	tbox_style := ui.style[DEF_STYLE].Background(tcell.ColorBlack).Dim(true) @@ -73,16 +73,9 @@ func i_draw_text_box(ui HardUI, line int, dim Quad, label, content string,  		ui.style[DEF_STYLE], label)  	if id == 4 && len(content) > 0 {  		content = "***" -	} else if id == 5 && len(content) > 0 { -		file := content -		if file[0] == '~' { -			home, _ := os.UserHomeDir() -			file = home + file[1:] -		} -		if _, err := os.Stat(file); -		   err != nil { -			tbox_style = tbox_style.Foreground(tcell.ColorRed) -		} +	} +	if red == true { +		tbox_style = tbox_style.Foreground(tcell.ColorRed)  	}  	spaces := ""  	for i := 0; i < tbox_size; i++ { @@ -111,7 +104,7 @@ func i_draw_insert_panel(ui HardUI, in *HostNode) {  	line := 2  	if win.T + line >= win.B { return }  	i_draw_text_box(ui, win.T + line, win, "Connection type", in.protocol_str(), -		0, ui.insert_sel) +		0, ui.insert_sel, false)  	line += 2  	switch in.Protocol {  	case 0: @@ -120,42 +113,49 @@ func i_draw_insert_panel(ui HardUI, in *HostNode) {  }  func i_draw_insert_ssh(ui HardUI, line int, win Quad, in *HostNode) { +	red := false  	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) +	i_draw_text_box(ui, win.T + line, win, "Host/IP", in.Host, 1, ui.insert_sel, +		false)  	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) +		2, ui.insert_sel, false)  	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) +	i_draw_text_box(ui, win.T + line, win, "User", in.User, 3, ui.insert_sel, +		false)  	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) +	i_draw_text_box(ui, win.T + line, win, "Pass", in.Pass, 4, ui.insert_sel, +		false)  	if line += 1; win.T + line >= win.B { return } -	i_draw_text_box(ui, win.T + line, win, "SSH private key", -		in.Priv, 5, ui.insert_sel)  	if len(in.Priv) > 0 {  		file := in.Priv  		if file[0] == '~' {  			home, _ := os.UserHomeDir()  			file = home + file[1:]  		} -		if _, err := os.Stat(file); -		   err != nil { -			if line += 1; win.T + line >= win.B { return } -			text := "file does not exist" -			i_draw_text(ui.s, ui.dim[W] / 2 - len(text) / 2, win.T + line, -				win.R - 1, win.T + line, ui.style[ERR_STYLE], text) +		if stat, err := os.Stat(file); +		   err != nil || stat.IsDir() == true { +			red = true  		}  	} +	i_draw_text_box(ui, win.T + line, win, "SSH private key", +		in.Priv, 5, ui.insert_sel, red) +	if red == true { +		if line += 1; win.T + line >= win.B { return } +		text := "file does not exist" +		i_draw_text(ui.s, ui.dim[W] / 2, win.T + line, +			win.R - 1, win.T + line, ui.style[ERR_STYLE], text) +	}  	if line += 2; 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)  	if line += 2; win.T + line >= win.B { return }  	i_draw_text_box(ui, win.T + line, win, "Host/IP", -		in.Jump.Host, 6, ui.insert_sel) +		in.Jump.Host, 6, ui.insert_sel, false)  	// TODO: here  } diff --git a/src/i_ui.go b/src/i_ui.go index 31cc6bb..db782c1 100644 --- a/src/i_ui.go +++ b/src/i_ui.go @@ -372,7 +372,7 @@ func i_prompt_type(ui HardUI) {  	ui.s.ShowCursor(len(text), ui.dim[H] - 1)  } -func i_prompt_generic(ui HardUI, prompt string, secret, file bool) { +func i_prompt_generic(ui HardUI, prompt string, secret bool, home_dir string) {  	i_draw_text(ui.s,  		1, ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1,  		ui.style[DEF_STYLE], prompt) @@ -380,9 +380,26 @@ func i_prompt_generic(ui HardUI, prompt string, secret, file bool) {  		ui.s.ShowCursor(len(prompt) + 1, ui.dim[H] - 1)  		return  	} +	style := ui.style[DEF_STYLE].Bold(true) +	if len(home_dir) > 0 && len(ui.buff) > 0 { +		file := ui.buff +		if file[0] == '~' { +			file = home_dir + file[1:] +		} +		if stat, err := os.Stat(file); +		   err != nil { +			style = style.Foreground(tcell.ColorRed) +		} else if stat.IsDir() == true { +			style = style.Foreground(tcell.ColorPurple). +				Bold(false). +				Underline(true) +		} else { +			style = style.Foreground(tcell.ColorGreen) +		} +	}  	i_draw_text(ui.s, len(prompt) + 1,  		ui.dim[H] - 1, ui.dim[W] - 1, ui.dim[H] - 1, -		ui.style[DEF_STYLE].Bold(true), ui.buff) +		style, ui.buff)  	ui.s.ShowCursor(len(prompt) + 1 + len(ui.buff), ui.dim[H] - 1)  } @@ -552,6 +569,7 @@ func i_load_ui(data_dir string,  }  func i_ui(data_dir string) { +	home_dir, _ := os.UserHomeDir()  	ui := HardUI{}  	opts := HardOpts{}  	var err error @@ -644,15 +662,16 @@ func i_ui(data_dir string) {  					case 0:  						i_prompt_type(data.ui)  					case 1, 6: -						i_prompt_generic(data.ui, "Host/IP: ", false, false) +						i_prompt_generic(data.ui, "Host/IP: ", false, "")  					case 2: -						i_prompt_generic(data.ui, "Port: ", false, false) +						i_prompt_generic(data.ui, "Port: ", false, "")  					case 3: -						i_prompt_generic(data.ui, "User: ", false, false) +						i_prompt_generic(data.ui, "User: ", false, "")  					case 4: -						i_prompt_generic(data.ui, "Pass: ", true, false) +						i_prompt_generic(data.ui, "Pass: ", true, "")  					case 5: -						i_prompt_generic(data.ui, "Private key: ", false, true) +						i_prompt_generic(data.ui, "Private key: ", +							false, home_dir)  					}  				}  			} | 
