Skip to content

Commit 5eda279

Browse files
authored
Merge pull request pterodactyl#2512 from AreYouRlyScared/xtermstuff
Upgrade Xterm to v4.9, Add Search
2 parents 14099c1 + 2685295 commit 5eda279

File tree

3 files changed

+77
-22
lines changed

3 files changed

+77
-22
lines changed

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@
3737
"styled-components-breakpoint": "^3.0.0-preview.20",
3838
"swr": "^0.2.3",
3939
"uuid": "^3.3.2",
40-
"xterm": "^3.14.4",
41-
"xterm-addon-attach": "^0.1.0",
42-
"xterm-addon-fit": "^0.1.0",
40+
"xterm": "^4.9.0",
41+
"xterm-addon-attach": "^0.6.0",
42+
"xterm-addon-fit": "^0.4.0",
43+
"xterm-addon-search": "^0.7.0",
44+
"xterm-addon-search-bar": "^0.2.0",
4345
"yup": "^0.29.1"
4446
},
4547
"devDependencies": {

resources/scripts/components/server/Console.tsx

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import React, { useEffect, useMemo, useRef } from 'react';
22
import { ITerminalOptions, Terminal } from 'xterm';
3-
import * as TerminalFit from 'xterm/lib/addons/fit/fit';
3+
import { FitAddon } from 'xterm-addon-fit';
4+
import { SearchAddon } from 'xterm-addon-search';
5+
import { SearchBarAddon } from 'xterm-addon-search-bar';
46
import SpinnerOverlay from '@/components/elements/SpinnerOverlay';
57
import { ServerContext } from '@/state/server';
68
import styled from 'styled-components/macro';
79
import { usePermissions } from '@/plugins/usePermissions';
810
import tw from 'twin.macro';
9-
import 'xterm/dist/xterm.css';
11+
import 'xterm/css/xterm.css';
1012
import useEventListener from '@/plugins/useEventListener';
1113
import { debounce } from 'debounce';
1214

@@ -29,6 +31,7 @@ const theme = {
2931
brightMagenta: '#C792EA',
3032
brightCyan: '#89DDFF',
3133
brightWhite: '#ffffff',
34+
selection: '#FAF089',
3235
};
3336

3437
const terminalProps: ITerminalOptions = {
@@ -55,6 +58,9 @@ export default () => {
5558
const TERMINAL_PRELUDE = '\u001b[1m\u001b[33mcontainer@pterodactyl~ \u001b[0m';
5659
const ref = useRef<HTMLDivElement>(null);
5760
const terminal = useMemo(() => new Terminal({ ...terminalProps }), []);
61+
const fitAddon = new FitAddon();
62+
const searchAddon = new SearchAddon();
63+
const searchBar = new SearchBarAddon({ searchAddon });
5864
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
5965
const [ canSendCommands ] = usePermissions([ 'control.console' ]);
6066

@@ -82,26 +88,34 @@ export default () => {
8288
useEffect(() => {
8389
if (connected && ref.current && !terminal.element) {
8490
terminal.open(ref.current);
91+
terminal.loadAddon(fitAddon);
92+
terminal.loadAddon(searchAddon);
93+
terminal.loadAddon(searchBar);
94+
fitAddon.fit();
8595

86-
// @see https://github.com/xtermjs/xterm.js/issues/2265
87-
// @see https://github.com/xtermjs/xterm.js/issues/2230
88-
TerminalFit.fit(terminal);
89-
90-
// Add support for copying terminal text.
96+
// Add support for capturing keys
9197
terminal.attachCustomKeyEventHandler((e: KeyboardEvent) => {
92-
// Ctrl + C
93-
if (e.ctrlKey && (e.key === 'c')) {
98+
// Ctrl + C ( Copy )
99+
if (e.ctrlKey && e.key === 'c') {
94100
document.execCommand('copy');
95101
return false;
96102
}
97103

104+
if (e.ctrlKey && e.key === 'f') {
105+
searchBar.show();
106+
return false;
107+
}
108+
109+
if (e.key === 'Escape') {
110+
searchBar.hidden();
111+
}
98112
return true;
99113
});
100114
}
101115
}, [ terminal, connected ]);
102116

103117
const fit = debounce(() => {
104-
TerminalFit.fit(terminal);
118+
fitAddon.fit();
105119
}, 100);
106120

107121
useEventListener('resize', () => fit());

yarn.lock

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,14 @@ babel-plugin-syntax-jsx@^6.18.0:
16631663
version "6.18.0"
16641664
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
16651665

1666+
babel-runtime@^6.26.0:
1667+
version "6.26.0"
1668+
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
1669+
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
1670+
dependencies:
1671+
core-js "^2.4.0"
1672+
regenerator-runtime "^0.11.0"
1673+
16661674
balanced-match@^1.0.0:
16671675
version "1.0.0"
16681676
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -2261,6 +2269,11 @@ core-js-compat@^3.4.7:
22612269
browserslist "^4.8.0"
22622270
semver "^6.3.0"
22632271

2272+
core-js@^2.4.0:
2273+
version "2.6.11"
2274+
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
2275+
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
2276+
22642277
core-util-is@~1.0.0:
22652278
version "1.0.2"
22662279
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -5793,6 +5806,11 @@ regenerate@^1.4.0:
57935806
version "1.4.0"
57945807
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
57955808

5809+
regenerator-runtime@^0.11.0:
5810+
version "0.11.1"
5811+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
5812+
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
5813+
57965814
regenerator-runtime@^0.13.2:
57975815
version "0.13.2"
57985816
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
@@ -5963,6 +5981,11 @@ run-queue@^1.0.0, run-queue@^1.0.3:
59635981
dependencies:
59645982
aproba "^1.1.1"
59655983

5984+
rxjs-compat@^6.5.4:
5985+
version "6.6.3"
5986+
resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.6.3.tgz#141405fcee11f48718d428b99c8f01826f594e5c"
5987+
integrity sha512-y+wUqq7bS2dG+7rH2fNMoxsDiJ32RQzFxZQE/JdtpnmEZmwLQrb1tCiItyHxdXJHXjmHnnzFscn3b6PEmORGKw==
5988+
59665989
safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
59675990
version "5.1.2"
59685991
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -7309,17 +7332,33 @@ xtend@^4.0.2:
73097332
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
73107333
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
73117334

7312-
xterm-addon-attach@^0.1.0:
7313-
version "0.1.0"
7314-
resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.1.0.tgz#e0daa8188e9bb830def9ccad015fc62bc07e3abe"
7335+
xterm-addon-attach@^0.6.0:
7336+
version "0.6.0"
7337+
resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.6.0.tgz#220c23addd62ab88c9914e2d4c06f7407e44680e"
7338+
integrity sha512-Mo8r3HTjI/EZfczVCwRU6jh438B4WLXxdFO86OB7bx0jGhwh2GdF4ifx/rP+OB+Cb2vmLhhVIZ00/7x3YSP3dg==
73157339

7316-
xterm-addon-fit@^0.1.0:
7317-
version "0.1.0"
7318-
resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.1.0.tgz#dd52d8b2ec6ef05faab8285bafd9310063704468"
7340+
xterm-addon-fit@^0.4.0:
7341+
version "0.4.0"
7342+
resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.4.0.tgz#06e0c5d0a6aaacfb009ef565efa1c81e93d90193"
7343+
integrity sha512-p4BESuV/g2L6pZzFHpeNLLnep9mp/DkF3qrPglMiucSFtD8iJxtMufEoEJbN8LZwB4i+8PFpFvVuFrGOSpW05w==
7344+
7345+
xterm-addon-search-bar@^0.2.0:
7346+
version "0.2.0"
7347+
resolved "https://registry.yarnpkg.com/xterm-addon-search-bar/-/xterm-addon-search-bar-0.2.0.tgz#e03c020a5ed22f1e8d503946b26a14ade508bc91"
7348+
integrity sha512-xvXmBA/ShbnzGe5CCy0kqPNNGqjkpuaRgH3Z1iW0V71vCAPRrtJ/v/hMnysZBH7WGUYhlCQr1cJZagW2fBVvSg==
7349+
dependencies:
7350+
babel-runtime "^6.26.0"
7351+
rxjs-compat "^6.5.4"
7352+
7353+
xterm-addon-search@^0.7.0:
7354+
version "0.7.0"
7355+
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.7.0.tgz#c929d3e5cbb335e82bff72f158ea82936d9cd4ef"
7356+
integrity sha512-6060evmJJ+tZcjnx33FXaeEHLpuXEa7l9UzUsYfMlCKbu88AbE+5LJocTKCHYd71cwCwb9pjmv/G1o9Rf9Zbcg==
73197357

7320-
xterm@^3.14.4:
7321-
version "3.14.4"
7322-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-3.14.4.tgz#68a474fd0628e6027e420f6c8b0df136f6281ff8"
7358+
xterm@^4.9.0:
7359+
version "4.9.0"
7360+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0.tgz#7a4c097a433d565339b5533b468bbc60c6c87969"
7361+
integrity sha512-wGfqufmioctKr8VkbRuZbVDfjlXWGZZ1PWHy1yqqpGT3Nm6yaJx8lxDbSEBANtgaiVPTcKSp97sxOy5IlpqYfw==
73237362

73247363
y18n@^4.0.0:
73257364
version "4.0.0"

0 commit comments

Comments
 (0)