Add SFTP toggle button to SSH tabs and enable fullscreen support

- Added 📁 folder icon button on SSH tabs to toggle the SFTP file browser
- Button appears on hover/active, styled consistently with the close button
- Removed conflicting Cmd+Shift+F shortcut (clashes with macOS find)
- Added platform-specific window options (Mac, Windows, Linux)
- Added F11 fullscreen toggle and Escape to exit fullscreen
- Cleaned up SFTP panel on session close
This commit is contained in:
2026-04-16 00:00:00 +01:00
parent 5e40d06a6c
commit d5d0a5c27a
4 changed files with 77 additions and 12 deletions
+36 -1
View File
@@ -128,6 +128,41 @@
.tab-status.is-error { background: var(--error); }
.tab-status.is-disconnected { background: var(--text-tertiary); }
/* -----------------------------------------------------------------------
SFTP toggle button — revealed on hover (SSH tabs only)
----------------------------------------------------------------------- */
.tab-sftp {
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-sm);
font-size: 10px;
color: var(--text-tertiary);
flex-shrink: 0;
opacity: 0;
transition:
opacity var(--transition-fast),
background var(--transition-fast),
color var(--transition-fast);
cursor: pointer;
background: none;
border: none;
padding: 0;
margin-left: auto;
}
.tab:hover .tab-sftp,
.tab.active .tab-sftp {
opacity: 1;
}
.tab-sftp:hover {
background: var(--bg-active);
color: var(--accent);
}
/* -----------------------------------------------------------------------
Close button — revealed on hover
----------------------------------------------------------------------- */
@@ -147,7 +182,7 @@
background var(--transition-fast),
color var(--transition-fast);
cursor: pointer;
margin-left: auto;
margin-left: 2px;
}
.tab:hover .tab-close,
+13 -11
View File
@@ -333,9 +333,22 @@ class App {
return;
}
// F11 — toggle fullscreen (Windows/Linux convention)
if (e.key === 'F11') {
e.preventDefault();
if (window.runtime && typeof window.runtime.WindowFullscreen === 'function') {
window.runtime.WindowFullscreen();
}
return;
}
// Escape — close any open overlays
if (e.key === 'Escape') {
this.commandPalette.close();
// Also exit fullscreen if active (Windows/Linux)
if (window.runtime && typeof window.runtime.WindowUnfullscreen === 'function') {
window.runtime.WindowUnfullscreen();
}
}
// Ctrl/Cmd+Shift+D — split pane vertically (left/right)
@@ -361,17 +374,6 @@ class App {
return;
}
// Ctrl/Cmd+Shift+F — toggle SFTP file browser on active SSH session
if (mod && e.shiftKey && e.key === 'F') {
e.preventDefault();
if (this.state.activeSessionId) {
var session = this.state.getSession(this.state.activeSessionId);
if (session && session.protocol === 'ssh') {
this.sftp.toggle(this.state.activeSessionId);
}
}
return;
}
});
}
+14
View File
@@ -418,6 +418,20 @@ class TabManager {
tab.classList.add('tab-pinned');
}
// SFTP toggle button (SSH sessions only)
if (sessionInfo.protocol === 'ssh') {
const sftpBtn = createElement('button', 'tab-sftp', {
textContent: '📁',
title: 'Toggle SFTP file browser',
'aria-label': 'Toggle SFTP',
});
sftpBtn.addEventListener('click', (e) => {
e.stopPropagation();
this.app.sftp.toggle(sessionInfo.id);
});
tab.appendChild(sftpBtn);
}
// Close button
const closeBtn = createElement('button', 'tab-close', {
textContent: '×',