parent
062fa73116
commit
0e6b38482d
@ -1,48 +1,68 @@ |
|||||||
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() |
||||||
|
|
||||||
export interface RemixUiXtermProps { |
export interface RemixUiXtermProps { |
||||||
plugin: ElectronPlugin |
plugin: ElectronPlugin |
||||||
pid: number |
pid: number |
||||||
send: (data: string, pid: number) => void |
send: (data: string, pid: number) => void |
||||||
timeStamp: number |
resize: (event: { cols: number; rows: number }, pid: number) => void |
||||||
setTerminalRef: (pid: number, ref: any) => void |
timeStamp: number |
||||||
theme: { |
setTerminalRef: (pid: number, ref: any) => void |
||||||
backgroundColor: string |
theme: { |
||||||
textColor: string |
backgroundColor: string |
||||||
} |
textColor: string |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
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]) |
||||||
|
|
||||||
const onKey = (event: { key: string; domEvent: KeyboardEvent }) => { |
const onKey = (event: {key: string; domEvent: KeyboardEvent}) => { |
||||||
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 |
||||||
|
Loading…
Reference in new issue