fix: correct field mapping in forms and prevent double -o prefix in SSH options

This commit is contained in:
2026-01-04 20:44:01 +01:00
parent 2f9587c8c8
commit def2b4fa8d
4 changed files with 39 additions and 13 deletions

View File

@@ -85,7 +85,6 @@ Examples:
return completions, cobra.ShellCompDirectiveNoFileComp return completions, cobra.ShellCompDirectiveNoFileComp
}, },
SilenceErrors: true,
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
runInteractiveMode() runInteractiveMode()

View File

@@ -658,13 +658,34 @@ func AddSSHHostToFile(host SSHHost, configPath string) error {
} }
// ParseSSHOptionsFromCommand converts SSH command line options to config format // ParseSSHOptionsFromCommand converts SSH command line options to config format
// Input: "-o Compression=yes -o ServerAliveInterval=60" // Input: "-o Compression=yes -o ServerAliveInterval=60" or "ForwardX11 true" or "Compression yes"
// Output: "Compression yes\nServerAliveInterval 60" // Output: "Compression yes\nServerAliveInterval 60"
func ParseSSHOptionsFromCommand(options string) string { func ParseSSHOptionsFromCommand(options string) string {
if options == "" { if options == "" {
return "" return ""
} }
options = strings.TrimSpace(options)
// If it doesn't contain -o, assume it's already in config format
if !strings.Contains(options, "-o") {
// Just normalize spaces and ensure newlines between options
lines := strings.Split(options, "\n")
var result []string
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
// Normalize spacing (replace multiple spaces with single space)
parts := strings.Fields(line)
if len(parts) > 0 {
result = append(result, strings.Join(parts, " "))
}
}
return strings.Join(result, "\n")
}
var result []string var result []string
parts := strings.Split(options, "-o") parts := strings.Split(options, "-o")
@@ -690,6 +711,12 @@ func FormatSSHOptionsForCommand(options string) string {
return "" return ""
} }
// If already in command format (starts with -o), return as is
trimmed := strings.TrimSpace(options)
if strings.HasPrefix(trimmed, "-o ") {
return trimmed
}
var result []string var result []string
lines := strings.Split(options, "\n") lines := strings.Split(options, "\n")

View File

@@ -145,9 +145,9 @@ const (
identityInput identityInput
proxyJumpInput proxyJumpInput
proxyCommandInput proxyCommandInput
optionsInput
tagsInput tagsInput
// Advanced tab inputs // Advanced tab inputs
optionsInput
remoteCommandInput remoteCommandInput
requestTTYInput requestTTYInput
) )

View File

@@ -686,15 +686,15 @@ func (m *editFormModel) submitEditForm() tea.Cmd {
} }
// Get property values using direct indices // Get property values using direct indices
hostname := strings.TrimSpace(m.inputs[0].Value()) // hostnameInput hostname := strings.TrimSpace(m.inputs[0].Value()) // hostnameInput
user := strings.TrimSpace(m.inputs[1].Value()) // userInput user := strings.TrimSpace(m.inputs[1].Value()) // userInput
port := strings.TrimSpace(m.inputs[2].Value()) // portInput port := strings.TrimSpace(m.inputs[2].Value()) // portInput
identity := strings.TrimSpace(m.inputs[3].Value()) // identityInput identity := strings.TrimSpace(m.inputs[3].Value()) // identityInput
proxyJump := strings.TrimSpace(m.inputs[4].Value()) // proxyJumpInput proxyJump := strings.TrimSpace(m.inputs[4].Value()) // proxyJumpInput
proxyCommand := strings.TrimSpace(m.inputs[5].Value()) // proxyCommandInput proxyCommand := strings.TrimSpace(m.inputs[5].Value()) // proxyCommandInput
options := strings.TrimSpace(m.inputs[6].Value()) // optionsInput options := config.ParseSSHOptionsFromCommand(strings.TrimSpace(m.inputs[6].Value())) // optionsInput
remoteCommand := strings.TrimSpace(m.inputs[8].Value()) // remoteCommandInput remoteCommand := strings.TrimSpace(m.inputs[8].Value()) // remoteCommandInput
requestTTY := strings.TrimSpace(m.inputs[9].Value()) // requestTTYInput requestTTY := strings.TrimSpace(m.inputs[9].Value()) // requestTTYInput
// Set defaults // Set defaults
if port == "" { if port == "" {
@@ -714,7 +714,7 @@ func (m *editFormModel) submitEditForm() tea.Cmd {
} }
// Parse tags // Parse tags
tagsStr := strings.TrimSpace(m.inputs[6].Value()) // tagsInput tagsStr := strings.TrimSpace(m.inputs[7].Value()) // tagsInput
var tags []string var tags []string
if tagsStr != "" { if tagsStr != "" {
for _, tag := range strings.Split(tagsStr, ",") { for _, tag := range strings.Split(tagsStr, ",") {