|
|
@ -1,8 +1,17 @@ |
|
|
|
import React, {useState, useEffect, forwardRef} from 'react' // eslint-disable-line
|
|
|
|
import React, {useState, useEffect, forwardRef} from 'react' // eslint-disable-line
|
|
|
|
import {ElectronPlugin} from '@remixproject/engine-electron' |
|
|
|
import {ElectronPlugin} from '@remixproject/engine-electron' |
|
|
|
import {Xterm} from './xterm-wrap' |
|
|
|
import {Xterm} from './xterm-wrap' |
|
|
|
import { FitAddon } from './xterm-fit-addOn'; |
|
|
|
import {FitAddon} from './xterm-fit-addOn' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const config = { |
|
|
|
|
|
|
|
fontSize: 12, |
|
|
|
|
|
|
|
fontFamily: |
|
|
|
|
|
|
|
'Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace', |
|
|
|
|
|
|
|
fontWeight: 'normal', |
|
|
|
|
|
|
|
fontWeightBold: 'bold', |
|
|
|
|
|
|
|
lineHeight: 1, |
|
|
|
|
|
|
|
letterSpacing: 0, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const fitAddon = new FitAddon() |
|
|
|
const fitAddon = new FitAddon() |
|
|
|
|
|
|
|
|
|
|
@ -10,6 +19,7 @@ export interface RemixUiXtermProps { |
|
|
|
plugin: ElectronPlugin |
|
|
|
plugin: ElectronPlugin |
|
|
|
pid: number |
|
|
|
pid: number |
|
|
|
send: (data: string, pid: number) => void |
|
|
|
send: (data: string, pid: number) => void |
|
|
|
|
|
|
|
resize: (event: { cols: number; rows: number }, pid: number) => void |
|
|
|
timeStamp: number |
|
|
|
timeStamp: number |
|
|
|
setTerminalRef: (pid: number, ref: any) => void |
|
|
|
setTerminalRef: (pid: number, ref: any) => void |
|
|
|
theme: { |
|
|
|
theme: { |
|
|
@ -19,10 +29,9 @@ export interface RemixUiXtermProps { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const RemixUiXterm = (props: RemixUiXtermProps) => { |
|
|
|
const RemixUiXterm = (props: RemixUiXtermProps) => { |
|
|
|
const { plugin, pid, send, timeStamp } = props |
|
|
|
const {plugin, pid, send, timeStamp, theme, resize} = props |
|
|
|
const xtermRef = React.useRef(null) |
|
|
|
const xtermRef = React.useRef(null) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
useEffect(() => { |
|
|
|
props.setTerminalRef(pid, xtermRef.current) |
|
|
|
props.setTerminalRef(pid, xtermRef.current) |
|
|
|
}, [xtermRef.current]) |
|
|
|
}, [xtermRef.current]) |
|
|
@ -31,18 +40,29 @@ const RemixUiXterm = (props: RemixUiXtermProps) => { |
|
|
|
send(event.key, pid) |
|
|
|
send(event.key, pid) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
const onResize = (event: { cols: number; rows: number }) => { |
|
|
|
|
|
|
|
resize(event, pid) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
<Xterm |
|
|
|
<Xterm |
|
|
|
addons={[fitAddon]} |
|
|
|
addons={[fitAddon]} |
|
|
|
options={{ theme: { background: props.theme.backgroundColor, foreground: props.theme.textColor } }} |
|
|
|
options={{ |
|
|
|
|
|
|
|
theme: { |
|
|
|
|
|
|
|
background: theme.backgroundColor, |
|
|
|
|
|
|
|
foreground: theme.textColor, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
fontFamily: config.fontFamily, |
|
|
|
|
|
|
|
fontSize: config.fontSize, |
|
|
|
|
|
|
|
letterSpacing: config.letterSpacing, |
|
|
|
|
|
|
|
lineHeight: config.lineHeight, |
|
|
|
|
|
|
|
}} |
|
|
|
|
|
|
|
onResize={onResize} |
|
|
|
onRender={() => fitAddon.fit()} |
|
|
|
onRender={() => fitAddon.fit()} |
|
|
|
ref={xtermRef} |
|
|
|
ref={xtermRef} |
|
|
|
onKey={onKey}></Xterm> |
|
|
|
onKey={onKey} |
|
|
|
|
|
|
|
></Xterm> |
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
export default RemixUiXterm |
|
|
|
export default RemixUiXterm |