mirror of
https://github.com/Gu1llaum-3/sshm.git
synced 2026-03-14 03:41:27 +01:00
fix: use line numbers to prevent deleting all duplicate SSH hosts when removing one
This commit is contained in:
@@ -74,14 +74,14 @@ type Model struct {
|
||||
filteredHosts []config.SSHHost
|
||||
searchMode bool
|
||||
deleteMode bool
|
||||
deleteHost string
|
||||
deleteHost *config.SSHHost // Host to be deleted (with line number for precise targeting)
|
||||
historyManager *history.HistoryManager
|
||||
pingManager *connectivity.PingManager
|
||||
sortMode SortMode
|
||||
configFile string // Path to the SSH config file
|
||||
|
||||
// Application configuration
|
||||
appConfig *config.AppConfig
|
||||
appConfig *config.AppConfig
|
||||
|
||||
// Version update information
|
||||
updateInfo *version.UpdateInfo
|
||||
|
||||
@@ -452,7 +452,7 @@ func (m Model) handleListViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
||||
if m.deleteMode {
|
||||
// Exit delete mode
|
||||
m.deleteMode = false
|
||||
m.deleteHost = ""
|
||||
m.deleteHost = nil
|
||||
m.table.Focus()
|
||||
return m, nil
|
||||
}
|
||||
@@ -508,15 +508,13 @@ func (m Model) handleListViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
||||
} else if m.deleteMode {
|
||||
// Confirm deletion
|
||||
var err error
|
||||
if m.configFile != "" {
|
||||
err = config.DeleteSSHHostFromFile(m.deleteHost, m.configFile)
|
||||
} else {
|
||||
err = config.DeleteSSHHost(m.deleteHost)
|
||||
if m.deleteHost != nil {
|
||||
err = config.DeleteSSHHostWithLine(*m.deleteHost)
|
||||
}
|
||||
if err != nil {
|
||||
// Could display an error message here
|
||||
m.deleteMode = false
|
||||
m.deleteHost = ""
|
||||
m.deleteHost = nil
|
||||
m.table.Focus()
|
||||
return m, nil
|
||||
}
|
||||
@@ -533,7 +531,7 @@ func (m Model) handleListViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
||||
if parseErr != nil {
|
||||
// Could display an error message here
|
||||
m.deleteMode = false
|
||||
m.deleteHost = ""
|
||||
m.deleteHost = nil
|
||||
m.table.Focus()
|
||||
return m, nil
|
||||
}
|
||||
@@ -548,7 +546,7 @@ func (m Model) handleListViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
||||
|
||||
m.updateTableRows()
|
||||
m.deleteMode = false
|
||||
m.deleteHost = ""
|
||||
m.deleteHost = nil
|
||||
m.table.Focus()
|
||||
return m, nil
|
||||
} else {
|
||||
@@ -673,11 +671,13 @@ func (m Model) handleListViewKeys(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
|
||||
case "d":
|
||||
if !m.searchMode && !m.deleteMode {
|
||||
// Delete the selected host
|
||||
selected := m.table.SelectedRow()
|
||||
if len(selected) > 0 {
|
||||
hostName := extractHostNameFromTableRow(selected[0]) // Extract hostname from first column
|
||||
cursor := m.table.Cursor()
|
||||
if cursor >= 0 && cursor < len(m.filteredHosts) {
|
||||
// Get the host at the cursor position (which corresponds to filteredHosts index)
|
||||
targetHost := &m.filteredHosts[cursor]
|
||||
|
||||
m.deleteMode = true
|
||||
m.deleteHost = hostName
|
||||
m.deleteHost = targetHost
|
||||
m.table.Blur()
|
||||
return m, nil
|
||||
}
|
||||
|
||||
@@ -144,7 +144,11 @@ func (m Model) renderListView() string {
|
||||
func (m Model) renderDeleteConfirmation() string {
|
||||
// Remove emojis (uncertain width depending on terminal) to stabilize the frame
|
||||
title := "DELETE SSH HOST"
|
||||
question := fmt.Sprintf("Are you sure you want to delete host '%s'?", m.deleteHost)
|
||||
hostName := ""
|
||||
if m.deleteHost != nil {
|
||||
hostName = m.deleteHost.Name
|
||||
}
|
||||
question := fmt.Sprintf("Are you sure you want to delete host '%s'?", hostName)
|
||||
action := "This action cannot be undone."
|
||||
help := "Enter: confirm • Esc: cancel"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user