Skip to content

Commit 9dc0c3e

Browse files
Upgrade Xterm to v4.9, Add Search
Changes: Added ` xterm-addon-search ` v0.7.0 Added ` xterm-addon-search-bar ` v0.2.0 Updated ` webpack ` v4.43.0 -> v4.44.2 Updated ` xterm ` v3.14.4 -> v4.9.0 Updated ` xterm-addon-fit ` v0.1.0 -> v0.7.0 Updated ` xterm-addon-attach ` v0.1.0 -> v0.4.0 With the added packages above, when a user does Ctrl + F a search box will apear within the console for them to search whats in the console. This was requested in discord to allow the lines in the console to be searchable.
1 parent 110b256 commit 9dc0c3e

File tree

3 files changed

+73
-21
lines changed

3 files changed

+73
-21
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: 20 additions & 9 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 searchAddonBar = new SearchBarAddon({ searchAddon });
5864
const { connected, instance } = ServerContext.useStoreState(state => state.socket);
5965
const [ canSendCommands ] = usePermissions([ 'control.console' ]);
6066

@@ -82,26 +88,31 @@ 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(searchAddonBar);
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
98+
// Ctrl + C ( Copy )
9399
if (e.ctrlKey && (e.key === 'c')) {
94100
document.execCommand('copy');
95101
return false;
96102
}
97103

104+
if (e.ctrlKey && (e.key === 'f')) {
105+
searchAddonBar.show();
106+
return false;
107+
}
108+
98109
return true;
99110
});
100111
}
101112
}, [ terminal, connected ]);
102113

103114
const fit = debounce(() => {
104-
TerminalFit.fit(terminal);
115+
fitAddon.fit();
105116
}, 100);
106117

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

yarn.lock

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

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

2271+
core-js@^2.4.0:
2272+
version "2.6.11"
2273+
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
2274+
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
2275+
22632276
core-util-is@~1.0.0:
22642277
version "1.0.2"
22652278
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -5797,6 +5810,11 @@ regenerate@^1.4.0:
57975810
version "1.4.0"
57985811
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
57995812

5813+
regenerator-runtime@^0.11.0:
5814+
version "0.11.1"
5815+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
5816+
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
5817+
58005818
regenerator-runtime@^0.13.2:
58015819
version "0.13.2"
58025820
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
@@ -5967,6 +5985,11 @@ run-queue@^1.0.0, run-queue@^1.0.3:
59675985
dependencies:
59685986
aproba "^1.1.1"
59695987

5988+
rxjs-compat@^6.5.4:
5989+
version "6.6.3"
5990+
resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.6.3.tgz#141405fcee11f48718d428b99c8f01826f594e5c"
5991+
integrity sha512-y+wUqq7bS2dG+7rH2fNMoxsDiJ32RQzFxZQE/JdtpnmEZmwLQrb1tCiItyHxdXJHXjmHnnzFscn3b6PEmORGKw==
5992+
59705993
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:
59715994
version "5.1.2"
59725995
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -7313,17 +7336,33 @@ xtend@^4.0.2:
73137336
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
73147337
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
73157338

7316-
xterm-addon-attach@^0.1.0:
7317-
version "0.1.0"
7318-
resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.1.0.tgz#e0daa8188e9bb830def9ccad015fc62bc07e3abe"
7339+
xterm-addon-attach@^0.6.0:
7340+
version "0.6.0"
7341+
resolved "https://registry.yarnpkg.com/xterm-addon-attach/-/xterm-addon-attach-0.6.0.tgz#220c23addd62ab88c9914e2d4c06f7407e44680e"
7342+
integrity sha512-Mo8r3HTjI/EZfczVCwRU6jh438B4WLXxdFO86OB7bx0jGhwh2GdF4ifx/rP+OB+Cb2vmLhhVIZ00/7x3YSP3dg==
73197343

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

7324-
xterm@^3.14.4:
7325-
version "3.14.4"
7326-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-3.14.4.tgz#68a474fd0628e6027e420f6c8b0df136f6281ff8"
7362+
xterm@^4.9.0:
7363+
version "4.9.0"
7364+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0.tgz#7a4c097a433d565339b5533b468bbc60c6c87969"
7365+
integrity sha512-wGfqufmioctKr8VkbRuZbVDfjlXWGZZ1PWHy1yqqpGT3Nm6yaJx8lxDbSEBANtgaiVPTcKSp97sxOy5IlpqYfw==
73277366

73287367
y18n@^4.0.0:
73297368
version "4.0.0"

0 commit comments

Comments
 (0)