Skip to content

Commit 029c6d3

Browse files
committed
Go back to canvas renderer for xterm
The default changed from canvas to DOM in the last update. The canvas renderer resolves line spacing issues and has better performance, as well as bringing us back to the previous status quo.
1 parent bc739bd commit 029c6d3

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed

site/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@
3232
"dependencies": {
3333
"@emoji-mart/data": "1.0.5",
3434
"@emoji-mart/react": "1.0.1",
35-
"@fastly/performance-observer-polyfill": "2.0.0",
3635
"@emotion/react": "11.10.8",
3736
"@emotion/styled": "11.11.0",
37+
"@fastly/performance-observer-polyfill": "2.0.0",
3838
"@fontsource/ibm-plex-mono": "4.5.10",
3939
"@fontsource/inter": "5.0.2",
4040
"@monaco-editor/react": "4.5.0",
@@ -94,6 +94,7 @@
9494
"vite": "4.3.9",
9595
"xstate": "4.37.2",
9696
"xterm": "5.1.0",
97+
"xterm-addon-canvas": "0.4.0",
9798
"xterm-addon-fit": "0.7.0",
9899
"xterm-addon-web-links": "0.8.0",
99100
"yup": "0.32.11"

site/src/AppRouter.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ export const AppRouter: FC = () => {
317317
{/* Terminal and CLI auth pages don't have the dashboard layout */}
318318
<Route
319319
path="/:username/:workspace/terminal"
320-
element={<TerminalPage />}
320+
element={<TerminalPage renderer="canvas" />}
321321
/>
322322
<Route path="cli-auth" element={<CliAuthenticationPage />} />
323323
</Route>

site/src/pages/TerminalPage/TerminalPage.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Object.defineProperty(window, "TextEncoder", {
3838
const renderTerminal = async (
3939
route = `/${MockUser.username}/${MockWorkspace.name}/terminal`,
4040
) => {
41-
const utils = renderWithAuth(<TerminalPage />, {
41+
const utils = renderWithAuth(<TerminalPage renderer="dom" />, {
4242
route,
4343
path: "/:username/:workspace/terminal",
4444
})

site/src/pages/TerminalPage/TerminalPage.tsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { useNavigate, useParams, useSearchParams } from "react-router-dom"
88
import { colors } from "theme/colors"
99
import { v4 as uuidv4 } from "uuid"
1010
import * as XTerm from "xterm"
11+
import { CanvasAddon } from "xterm-addon-canvas"
1112
import { FitAddon } from "xterm-addon-fit"
1213
import { WebLinksAddon } from "xterm-addon-web-links"
1314
import "xterm/css/xterm.css"
@@ -69,7 +70,11 @@ const useTerminalWarning = ({
6970
}
7071
}
7172

72-
const TerminalPage: FC = () => {
73+
type TerminalPageProps = React.PropsWithChildren<{
74+
renderer: "canvas" | "dom"
75+
}>
76+
77+
const TerminalPage: FC<TerminalPageProps> = ({ renderer }) => {
7378
const navigate = useNavigate()
7479
const styles = useStyles()
7580
const { proxy } = useProxy()
@@ -194,6 +199,10 @@ const TerminalPage: FC = () => {
194199
background: colors.gray[16],
195200
},
196201
})
202+
// DOM is the default renderer.
203+
if (renderer === "canvas") {
204+
terminal.loadAddon(new CanvasAddon())
205+
}
197206
const fitAddon = new FitAddon()
198207
setFitAddon(fitAddon)
199208
terminal.loadAddon(fitAddon)
@@ -230,7 +239,7 @@ const TerminalPage: FC = () => {
230239
window.removeEventListener("resize", listener)
231240
terminal.dispose()
232241
}
233-
}, [sendEvent, xtermRef, handleWebLink])
242+
}, [renderer, sendEvent, xtermRef, handleWebLink])
234243

235244
// Triggers the initial terminal connection using
236245
// the reconnection token and workspace name found

site/yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -12043,6 +12043,11 @@ xtend@^4.0.0, xtend@~4.0.1:
1204312043
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
1204412044
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
1204512045

12046+
xterm-addon-canvas@0.4.0:
12047+
version "0.4.0"
12048+
resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0.tgz#a6ee6a56deb0c495fcef29afe6d94b7119a0f334"
12049+
integrity sha512-iTC8CdjX9+hGX7jiEuiDMXzHsY/FKJdVnbjep5xjRXNu7RKOk15xuecIkJ7HZORqMVPpr4DGS3jyd9XUoBuxqw==
12050+
1204612051
xterm-addon-fit@0.7.0:
1204712052
version "0.7.0"
1204812053
resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.7.0.tgz#b8ade6d96e63b47443862088f6670b49fb752c6a"

0 commit comments

Comments
 (0)