From 9e0f81b7a03fac6d894a719951241de0973fe227 Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Tue, 28 Jul 2026 16:20:19 +1000 Subject: [PATCH] add closing tabs --- src/main.py | 14 +++++++++++--- src/widgets/file_tabs.py | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index f76acbf..3a1745b 100644 --- a/src/main.py +++ b/src/main.py @@ -29,7 +29,8 @@ class Berry(App): "save-as": "ctrl+shift+s", "settings": "ctrl+f1", "home": "ctrl+h", - "find": "ctrl+f" + "find": "ctrl+f", + "close-tab": "ctrl+w" } @@ -44,9 +45,10 @@ class Berry(App): Binding(self.bind_keys['open'], "open_file", "Open file"), Binding(self.bind_keys['open-folder'], "open_folder", "Open directory"), Binding(self.bind_keys['save'], "save", "Save"), - Binding(self.bind_keys['save-as'], "save_as", "Save as...", priority=True), + Binding(self.bind_keys['save-as'], "save_as", "Save as..."), Binding(self.bind_keys['home'], "home", "Home"), - Binding(self.bind_keys['find'], "find", "Find and replace") + Binding(self.bind_keys['find'], "find", "Find and replace"), + Binding(self.bind_keys['close-tab'], "close_tab", "Close tab", priority=True), ) for bind in self.BINDINGS: @@ -64,6 +66,12 @@ class Berry(App): yield Footer() + async def action_home(self): + await self.file_tabs.open_home() + + async def action_close_tab(self): + await self.file_tabs.close_open_tab() + async def action_save(self): await self.file_tabs.save() diff --git a/src/widgets/file_tabs.py b/src/widgets/file_tabs.py index d1c68a8..405cf82 100644 --- a/src/widgets/file_tabs.py +++ b/src/widgets/file_tabs.py @@ -2,11 +2,13 @@ from textual.widgets import TabbedContent, Tab, TabPane from textual.widget import Widget from textual.widgets._tabbed_content import ContentTabs from textual.reactive import reactive +from textual.events import MouseDown from textual_fspicker import FileOpen, FileSave, SelectDirectory from widgets.text_editor import TextEditor from widgets.home_page import HomePage +from widgets.context_menu import ContextMenu import os, pathlib @@ -33,6 +35,7 @@ class FileTab(TabPane): self.path = path self.last_saved_value = True + def watch_saved(self, saved_value: bool): if self.last_saved_value != saved_value: self.changed = True @@ -96,6 +99,10 @@ class FileTabs(TabbedContent): return False return True + async def close_open_tab(self): + if self.active_pane: + self.remove_pane(self.active) + async def new_file(self): new_tab = FileTab(None) @@ -163,7 +170,11 @@ class FileTabs(TabbedContent): await self.app.push_screen(FileOpen(), callback=callback) async def open_home(self) -> None: - await self.add_pane(HomeTab()) + new_home_tab = HomeTab() + + await self.add_pane(new_home_tab) + + self.active = new_home_tab.id async def open_file(self, path: str) -> None: opened_new_tab = await self.clean_up_tabs(path) @@ -192,4 +203,6 @@ class FileTabs(TabbedContent): await new_pane.mount(text_editor) self.active = new_pane.id + + text_editor.focus() \ No newline at end of file