diff --git a/frontend/src/css/tabs.css b/frontend/src/css/tabs.css index dab622d..ce3d38c 100644 --- a/frontend/src/css/tabs.css +++ b/frontend/src/css/tabs.css @@ -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, diff --git a/frontend/src/js/app.js b/frontend/src/js/app.js index a5962d0..8333afa 100644 --- a/frontend/src/js/app.js +++ b/frontend/src/js/app.js @@ -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; - } }); } diff --git a/frontend/src/js/tabs.js b/frontend/src/js/tabs.js index 4d31e35..90fe844 100644 --- a/frontend/src/js/tabs.js +++ b/frontend/src/js/tabs.js @@ -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: '×', diff --git a/main.go b/main.go index 0b2bc27..6e608c6 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,9 @@ import ( "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/linux" + "github.com/wailsapp/wails/v2/pkg/options/mac" + "github.com/wailsapp/wails/v2/pkg/options/windows" application "github.com/copilot-ssh-client/app/internal/app" "github.com/copilot-ssh-client/app/frontend" @@ -32,6 +35,17 @@ func main() { OnStartup: nexus.Startup, OnShutdown: nexus.Shutdown, OnDomReady: nexus.DomReady, + // macOS: enable the green fullscreen traffic-light button. + Mac: &mac.Options{ + About: &mac.AboutInfo{ + Title: "Nexus Terminal", + Message: "A premium desktop terminal client", + }, + }, + // Windows: default decorations include maximise; fullscreen via F11. + Windows: &windows.Options{}, + // Linux: use the default window manager decorations (fullscreen via WM). + Linux: &linux.Options{}, Bind: []interface{}{ nexus.APIService(), },