diff --git a/memory-bank/progress.md b/memory-bank/progress.md index 09a41af..cd99523 100644 --- a/memory-bank/progress.md +++ b/memory-bank/progress.md @@ -62,6 +62,7 @@ - ✅ **Live testing**: Manual testing confirms all functionality works correctly - ✅ **Human-readable formatting**: Tab-based column alignment with proper spacing - ✅ **Management header**: Automatic addition of management header to hosts files +- ✅ **Auto-save functionality**: Immediate saving of changes when entries are edited ### Phase 4: Advanced Edit Features - ❌ **Add new entries**: Create new host entries diff --git a/src/hosts/main.py b/src/hosts/main.py index ca7ba8a..c09deb4 100644 --- a/src/hosts/main.py +++ b/src/hosts/main.py @@ -497,11 +497,16 @@ class HostsManagerApp(App): success, message = self.manager.toggle_entry(self.hosts_file, self.selected_entry_index) if success: - self.populate_entries_table() - # Restore cursor position to the same entry - self.set_timer(0.1, lambda: self.restore_cursor_position(current_entry)) - self.update_entry_details() - self.update_status(message) + # Auto-save the changes immediately + save_success, save_message = self.manager.save_hosts_file(self.hosts_file) + if save_success: + self.populate_entries_table() + # Restore cursor position to the same entry + self.set_timer(0.1, lambda: self.restore_cursor_position(current_entry)) + self.update_entry_details() + self.update_status(f"{message} - Changes saved automatically") + else: + self.update_status(f"Entry toggled but save failed: {save_message}") else: self.update_status(f"Error toggling entry: {message}") @@ -517,17 +522,22 @@ class HostsManagerApp(App): success, message = self.manager.move_entry_up(self.hosts_file, self.selected_entry_index) if success: - # Update the selection index to follow the moved entry - if self.selected_entry_index > 0: - self.selected_entry_index -= 1 - self.populate_entries_table() - # Update the DataTable cursor position to follow the moved entry - table = self.query_one("#entries-table", DataTable) - display_index = self.actual_index_to_display_index(self.selected_entry_index) - if table.row_count > 0 and display_index < table.row_count: - table.move_cursor(row=display_index) - self.update_entry_details() - self.update_status(message) + # Auto-save the changes immediately + save_success, save_message = self.manager.save_hosts_file(self.hosts_file) + if save_success: + # Update the selection index to follow the moved entry + if self.selected_entry_index > 0: + self.selected_entry_index -= 1 + self.populate_entries_table() + # Update the DataTable cursor position to follow the moved entry + table = self.query_one("#entries-table", DataTable) + display_index = self.actual_index_to_display_index(self.selected_entry_index) + if table.row_count > 0 and display_index < table.row_count: + table.move_cursor(row=display_index) + self.update_entry_details() + self.update_status(f"{message} - Changes saved automatically") + else: + self.update_status(f"Entry moved but save failed: {save_message}") else: self.update_status(f"Error moving entry: {message}") @@ -543,17 +553,22 @@ class HostsManagerApp(App): success, message = self.manager.move_entry_down(self.hosts_file, self.selected_entry_index) if success: - # Update the selection index to follow the moved entry - if self.selected_entry_index < len(self.hosts_file.entries) - 1: - self.selected_entry_index += 1 - self.populate_entries_table() - # Update the DataTable cursor position to follow the moved entry - table = self.query_one("#entries-table", DataTable) - display_index = self.actual_index_to_display_index(self.selected_entry_index) - if table.row_count > 0 and display_index < table.row_count: - table.move_cursor(row=display_index) - self.update_entry_details() - self.update_status(message) + # Auto-save the changes immediately + save_success, save_message = self.manager.save_hosts_file(self.hosts_file) + if save_success: + # Update the selection index to follow the moved entry + if self.selected_entry_index < len(self.hosts_file.entries) - 1: + self.selected_entry_index += 1 + self.populate_entries_table() + # Update the DataTable cursor position to follow the moved entry + table = self.query_one("#entries-table", DataTable) + display_index = self.actual_index_to_display_index(self.selected_entry_index) + if table.row_count > 0 and display_index < table.row_count: + table.move_cursor(row=display_index) + self.update_entry_details() + self.update_status(f"{message} - Changes saved automatically") + else: + self.update_status(f"Entry moved but save failed: {save_message}") else: self.update_status(f"Error moving entry: {message}")