@@ -56,6 +56,7 @@ export function App({
5656 const [ wrapLines , setWrapLines ] = useState ( bootstrap . initialWrapLines ?? false ) ;
5757 const [ showHunkHeaders , setShowHunkHeaders ] = useState ( bootstrap . initialShowHunkHeaders ?? true ) ;
5858 const [ sidebarVisible , setSidebarVisible ] = useState ( true ) ;
59+ const [ forceSidebarOpen , setForceSidebarOpen ] = useState ( false ) ;
5960 const [ showHelp , setShowHelp ] = useState ( false ) ;
6061 const [ focusArea , setFocusArea ] = useState < FocusArea > ( "files" ) ;
6162 const [ filter , setFilter ] = useState ( "" ) ;
@@ -128,7 +129,10 @@ export function App({
128129 const bodyPadding = pagerMode ? 0 : BODY_PADDING ;
129130 const bodyWidth = Math . max ( 0 , terminal . width - bodyPadding ) ;
130131 const responsiveLayout = resolveResponsiveLayout ( layoutMode , terminal . width ) ;
131- const showFilesPane = pagerMode ? false : responsiveLayout . showFilesPane && sidebarVisible ;
132+ const canForceShowFilesPane = bodyWidth >= FILES_MIN_WIDTH + DIVIDER_WIDTH + DIFF_MIN_WIDTH ;
133+ const showFilesPane = pagerMode
134+ ? false
135+ : sidebarVisible && ( responsiveLayout . showFilesPane || ( forceSidebarOpen && canForceShowFilesPane ) ) ;
132136 const centerWidth = bodyWidth ;
133137 const resolvedLayout = responsiveLayout . layout ;
134138 const currentHunk = selectedFile ?. metadata . hunks [ selectedHunkIndex ] ;
@@ -258,9 +262,23 @@ export function App({
258262 setWrapLines ( ( current ) => ! current ) ;
259263 } ;
260264
261- /** Toggle sidebar visibility independently of layout mode . */
265+ /** Toggle the sidebar, forcing it open on narrower layouts when the shell can still fit both panes . */
262266 const toggleSidebar = ( ) => {
263- setSidebarVisible ( ( current ) => ! current ) ;
267+ if ( sidebarVisible && ( responsiveLayout . showFilesPane || forceSidebarOpen ) ) {
268+ setSidebarVisible ( false ) ;
269+ setForceSidebarOpen ( false ) ;
270+ return ;
271+ }
272+
273+ if ( sidebarVisible && ! responsiveLayout . showFilesPane ) {
274+ if ( canForceShowFilesPane ) {
275+ setForceSidebarOpen ( true ) ;
276+ }
277+ return ;
278+ }
279+
280+ setSidebarVisible ( true ) ;
281+ setForceSidebarOpen ( ! responsiveLayout . showFilesPane && canForceShowFilesPane ) ;
264282 } ;
265283
266284 /** Toggle visibility of hunk metadata rows without changing the actual diff lines. */
0 commit comments