@@ -240,6 +240,14 @@ class App(Generic[ReturnType], DOMNode):
240240 TITLE : str | None = None
241241 SUB_TITLE : str | None = None
242242
243+ BINDINGS = [
244+ Binding ("ctrl+c" , "quit" , "Quit" , show = False , priority = True ),
245+ Binding ("tab" , "focus_next" , "Focus Next" , show = False , priority = False ),
246+ Binding (
247+ "shift+tab" , "focus_previous" , "Focus Previous" , show = False , priority = False
248+ ),
249+ ]
250+
243251 title : Reactive [str ] = Reactive ("" )
244252 sub_title : Reactive [str ] = Reactive ("" )
245253 dark : Reactive [bool ] = Reactive (True )
@@ -301,7 +309,6 @@ def __init__(
301309
302310 self ._logger = Logger (self ._log )
303311
304- self ._bindings .bind ("ctrl+c" , "quit" , show = False , priority = True )
305312 self ._refresh_required = False
306313
307314 self .design = DEFAULT_COLORS
@@ -1898,13 +1905,8 @@ async def _on_layout(self, message: messages.Layout) -> None:
18981905 message .stop ()
18991906
19001907 async def _on_key (self , event : events .Key ) -> None :
1901- if event .key == "tab" :
1902- self .screen .focus_next ()
1903- elif event .key == "shift+tab" :
1904- self .screen .focus_previous ()
1905- else :
1906- if not (await self .check_bindings (event .key )):
1907- await self .dispatch_key (event )
1908+ if not (await self .check_bindings (event .key )):
1909+ await self .dispatch_key (event )
19081910
19091911 async def _on_shutdown_request (self , event : events .ShutdownRequest ) -> None :
19101912 log ("shutdown request" )
@@ -2124,6 +2126,14 @@ async def action_remove_class_(self, selector: str, class_name: str) -> None:
21242126 async def action_toggle_class (self , selector : str , class_name : str ) -> None :
21252127 self .screen .query (selector ).toggle_class (class_name )
21262128
2129+ def action_focus_next (self ) -> None :
2130+ """Focus the next widget."""
2131+ self .screen .focus_next ()
2132+
2133+ def action_focus_previous (self ) -> None :
2134+ """Focus the previous widget."""
2135+ self .screen .focus_previous ()
2136+
21272137 def _on_terminal_supports_synchronized_output (
21282138 self , message : messages .TerminalSupportsSynchronizedOutput
21292139 ) -> None :
0 commit comments