diff --git a/src/extensionsIntegrated/Terminal/TerminalInstance.js b/src/extensionsIntegrated/Terminal/TerminalInstance.js index 6807e68c06..b1c9e995b7 100644 --- a/src/extensionsIntegrated/Terminal/TerminalInstance.js +++ b/src/extensionsIntegrated/Terminal/TerminalInstance.js @@ -65,6 +65,8 @@ define(function (require, exports, module) { cursorAccent: v("--terminal-background"), selectionBackground: v("--terminal-selection"), selectionForeground: undefined, + // Setting a scrollbar width also enables xterm's overview ruler. + overviewRulerBorder: "transparent", black: v("--terminal-ansi-black"), red: v("--terminal-ansi-red"), green: v("--terminal-ansi-green"), @@ -138,6 +140,8 @@ define(function (require, exports, module) { cursorBlink: true, cursorStyle: "block", scrollback: 10000, + // Match Phoenix's scrollbar width and keep FitAddon's column calculation in sync. + scrollbar: { width: 12 }, allowProposedApi: true }); diff --git a/src/styles/Extn-AIChatPanel.less b/src/styles/Extn-AIChatPanel.less index 927c967cbf..0b95c4da28 100644 --- a/src/styles/Extn-AIChatPanel.less +++ b/src/styles/Extn-AIChatPanel.less @@ -259,6 +259,7 @@ --terminal-foreground: #cccccc; --terminal-cursor: #ffffff; --terminal-selection: rgba(255, 255, 255, 0.2); + --terminal-scrollbar-thumb: rgba(255, 255, 255, 0.24); --terminal-ansi-black: #000000; --terminal-ansi-red: #cd3131; --terminal-ansi-green: #0dbc79; diff --git a/src/styles/Extn-Terminal.less b/src/styles/Extn-Terminal.less index 8743e14cab..ed54b2dd50 100644 --- a/src/styles/Extn-Terminal.less +++ b/src/styles/Extn-Terminal.less @@ -27,6 +27,7 @@ --terminal-foreground: #cccccc; --terminal-cursor: #ffffff; --terminal-selection: rgba(255, 255, 255, 0.2); + --terminal-scrollbar-thumb: rgba(255, 255, 255, 0.24); --terminal-border: #333333; --terminal-toolbar-bg: #1e1e1e; --terminal-tab-bg: #181818; @@ -57,6 +58,7 @@ --terminal-foreground: #383a42; --terminal-cursor: #383a42; --terminal-selection: rgba(0, 0, 0, 0.12); + --terminal-scrollbar-thumb: @linux-scrollbar-thumb; --terminal-border: #e0e0e0; --terminal-toolbar-bg: #f5f5f5; --terminal-tab-bg: #eeeeee; @@ -389,6 +391,51 @@ background-color: var(--terminal-background) !important; } +// xterm draws DOM scrollbars, so the app's native scrollbar selectors do not apply. +.terminal-instance-container .xterm .xterm-scrollable-element > .xterm-scrollbar { + &:hover { + background-color: var(--terminal-scrollbar-track-hover, transparent); + } + + > .xterm-slider { + box-sizing: border-box; + border: 2px solid transparent; + border-radius: 999px; + background-color: var(--terminal-scrollbar-thumb); + background-clip: padding-box; + + &:hover { + background-color: var(--terminal-scrollbar-thumb-hover, var(--terminal-scrollbar-thumb)); + } + + &.xterm-active { + background-color: var(--terminal-scrollbar-thumb-active, var(--terminal-scrollbar-thumb)); + } + + .platform-win & { + border: none; + border-radius: 0; + } + } +} + +// Match the Windows colors in brackets_scrollbars.less, including the always-dark AI terminals. +.platform-win .terminal-panel-container { + --terminal-scrollbar-thumb: @win-scrollbar-thumb; + --terminal-scrollbar-thumb-hover: @win-scrollbar-thumb-hover; + --terminal-scrollbar-thumb-active: @win-scrollbar-thumb-active; + --terminal-scrollbar-track-hover: @win-scrollbar-track; +} + +.dark.platform-win .terminal-panel-container, +.darkTheme.platform-win .terminal-panel-container, +.platform-win .ai-chat-body-cli { + --terminal-scrollbar-thumb: rgb(49, 49, 49); + --terminal-scrollbar-thumb-hover: rgb(89, 89, 89); + --terminal-scrollbar-thumb-active: rgb(169, 169, 169); + --terminal-scrollbar-track-hover: rgba(15, 15, 15, 0.5); +} + /* Empty state */ .terminal-empty-state { display: flex;