mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-21 16:38:23 +01:00
switch from 'main' to 'term' for main terminal blockfile
This commit is contained in:
parent
c4a0e85d32
commit
f464223aab
@ -13,6 +13,9 @@ import { Terminal } from "@xterm/xterm";
|
|||||||
import { debounce } from "throttle-debounce";
|
import { debounce } from "throttle-debounce";
|
||||||
import { FitAddon } from "./fitaddon";
|
import { FitAddon } from "./fitaddon";
|
||||||
|
|
||||||
|
const TermFileName = "term";
|
||||||
|
const TermCacheFileName = "cache:term:full";
|
||||||
|
|
||||||
// detect webgl support
|
// detect webgl support
|
||||||
function detectWebGLSupport(): boolean {
|
function detectWebGLSupport(): boolean {
|
||||||
try {
|
try {
|
||||||
@ -105,7 +108,7 @@ export class TermWrap {
|
|||||||
async initTerminal() {
|
async initTerminal() {
|
||||||
this.connectElem.addEventListener("keydown", this.keydownHandler, true);
|
this.connectElem.addEventListener("keydown", this.keydownHandler, true);
|
||||||
this.terminal.onData(this.handleTermData.bind(this));
|
this.terminal.onData(this.handleTermData.bind(this));
|
||||||
this.mainFileSubject = getFileSubject(this.blockId, "main");
|
this.mainFileSubject = getFileSubject(this.blockId, TermFileName);
|
||||||
this.mainFileSubject.subscribe(this.handleNewFileSubjectData.bind(this));
|
this.mainFileSubject.subscribe(this.handleNewFileSubjectData.bind(this));
|
||||||
try {
|
try {
|
||||||
await this.loadInitialTerminalData();
|
await this.loadInitialTerminalData();
|
||||||
@ -169,7 +172,7 @@ export class TermWrap {
|
|||||||
|
|
||||||
async loadInitialTerminalData(): Promise<void> {
|
async loadInitialTerminalData(): Promise<void> {
|
||||||
let startTs = Date.now();
|
let startTs = Date.now();
|
||||||
const { data: cacheData, fileInfo: cacheFile } = await fetchWaveFile(this.blockId, "cache:term:full");
|
const { data: cacheData, fileInfo: cacheFile } = await fetchWaveFile(this.blockId, TermCacheFileName);
|
||||||
let ptyOffset = 0;
|
let ptyOffset = 0;
|
||||||
if (cacheFile != null) {
|
if (cacheFile != null) {
|
||||||
ptyOffset = cacheFile.meta["ptyoffset"] ?? 0;
|
ptyOffset = cacheFile.meta["ptyoffset"] ?? 0;
|
||||||
@ -177,7 +180,7 @@ export class TermWrap {
|
|||||||
this.doTerminalWrite(cacheData, ptyOffset);
|
this.doTerminalWrite(cacheData, ptyOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const { data: mainData, fileInfo: mainFile } = await fetchWaveFile(this.blockId, "main", ptyOffset);
|
const { data: mainData, fileInfo: mainFile } = await fetchWaveFile(this.blockId, TermFileName, ptyOffset);
|
||||||
console.log(
|
console.log(
|
||||||
`terminal loaded cachefile:${cacheData?.byteLength ?? 0} main:${mainData?.byteLength ?? 0} bytes, ${Date.now() - startTs}ms`
|
`terminal loaded cachefile:${cacheData?.byteLength ?? 0} main:${mainData?.byteLength ?? 0} bytes, ${Date.now() - startTs}ms`
|
||||||
);
|
);
|
||||||
|
@ -36,7 +36,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
BlockFile_Main = "main" // used for main pty output
|
BlockFile_Term = "term" // used for main pty output
|
||||||
BlockFile_Html = "html" // used for alt html layout
|
BlockFile_Html = "html" // used for alt html layout
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -188,9 +188,9 @@ func (bc *BlockController) resetTerminalState() {
|
|||||||
shouldTruncate = blockData.Meta.GetBool(wstore.MetaKey_CmdClearOnRestart, false)
|
shouldTruncate = blockData.Meta.GetBool(wstore.MetaKey_CmdClearOnRestart, false)
|
||||||
}
|
}
|
||||||
if shouldTruncate {
|
if shouldTruncate {
|
||||||
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Main)
|
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Term)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error truncating main blockfile: %v\n", err)
|
log.Printf("error truncating term blockfile: %v\n", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ func (bc *BlockController) resetTerminalState() {
|
|||||||
buf.WriteString("\x1b[?25h") // show cursor
|
buf.WriteString("\x1b[?25h") // show cursor
|
||||||
buf.WriteString("\x1b[?1000l") // disable mouse tracking
|
buf.WriteString("\x1b[?1000l") // disable mouse tracking
|
||||||
buf.WriteString("\r\n\r\n(restored terminal state)\r\n\r\n")
|
buf.WriteString("\r\n\r\n(restored terminal state)\r\n\r\n")
|
||||||
err := filestore.WFS.AppendData(ctx, bc.BlockId, "main", buf.Bytes())
|
err := filestore.WFS.AppendData(ctx, bc.BlockId, BlockFile_Term, buf.Bytes())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error appending to blockfile (terminal reset): %v\n", err)
|
log.Printf("error appending to blockfile (terminal reset): %v\n", err)
|
||||||
}
|
}
|
||||||
@ -223,7 +223,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
|
|||||||
// create a circular blockfile for the output
|
// create a circular blockfile for the output
|
||||||
ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
|
ctx, cancelFn := context.WithTimeout(context.Background(), 2*time.Second)
|
||||||
defer cancelFn()
|
defer cancelFn()
|
||||||
err := filestore.WFS.MakeFile(ctx, bc.BlockId, "main", nil, filestore.FileOptsType{MaxSize: DefaultTermMaxFileSize, Circular: true})
|
err := filestore.WFS.MakeFile(ctx, bc.BlockId, BlockFile_Term, nil, filestore.FileOptsType{MaxSize: DefaultTermMaxFileSize, Circular: true})
|
||||||
if err != nil && err != fs.ErrExist {
|
if err != nil && err != fs.ErrExist {
|
||||||
err = fs.ErrExist
|
err = fs.ErrExist
|
||||||
return fmt.Errorf("error creating blockfile: %w", err)
|
return fmt.Errorf("error creating blockfile: %w", err)
|
||||||
@ -346,7 +346,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
|
|||||||
for {
|
for {
|
||||||
nr, err := ptyBuffer.Read(buf)
|
nr, err := ptyBuffer.Read(buf)
|
||||||
if nr > 0 {
|
if nr > 0 {
|
||||||
err := HandleAppendBlockFile(bc.BlockId, BlockFile_Main, buf[:nr])
|
err := HandleAppendBlockFile(bc.BlockId, BlockFile_Term, buf[:nr])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error appending to blockfile: %v\n", err)
|
log.Printf("error appending to blockfile: %v\n", err)
|
||||||
}
|
}
|
||||||
@ -398,7 +398,7 @@ func (bc *BlockController) DoRunShellCommand(rc *RunShellOpts, blockMeta waveobj
|
|||||||
shellProc.SetWaitErrorAndSignalDone(waitErr)
|
shellProc.SetWaitErrorAndSignalDone(waitErr)
|
||||||
exitCode := shellexec.ExitCodeFromWaitErr(waitErr)
|
exitCode := shellexec.ExitCodeFromWaitErr(waitErr)
|
||||||
termMsg := fmt.Sprintf("\r\nprocess finished with exit code = %d\r\n\r\n", exitCode)
|
termMsg := fmt.Sprintf("\r\nprocess finished with exit code = %d\r\n\r\n", exitCode)
|
||||||
HandleAppendBlockFile(bc.BlockId, BlockFile_Main, []byte(termMsg))
|
HandleAppendBlockFile(bc.BlockId, BlockFile_Term, []byte(termMsg))
|
||||||
}()
|
}()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -437,9 +437,9 @@ func (bc *BlockController) run(bdata *wstore.Block, blockMeta map[string]any) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if getBoolFromMeta(blockMeta, wstore.MetaKey_CmdClearOnStart, false) {
|
if getBoolFromMeta(blockMeta, wstore.MetaKey_CmdClearOnStart, false) {
|
||||||
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Main)
|
err := HandleTruncateBlockFile(bc.BlockId, BlockFile_Term)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error truncating main blockfile: %v\n", err)
|
log.Printf("error truncating term blockfile: %v\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
runOnStart := getBoolFromMeta(blockMeta, wstore.MetaKey_CmdRunOnStart, true)
|
runOnStart := getBoolFromMeta(blockMeta, wstore.MetaKey_CmdRunOnStart, true)
|
||||||
|
@ -11,10 +11,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Mode_Normal = "normal"
|
Mode_Normal = "normal"
|
||||||
Mode_Esc = "esc"
|
Mode_Esc = "esc"
|
||||||
Mode_WaveEsc = "waveesc"
|
Mode_WaveEsc = "waveesc"
|
||||||
BlockFile_Main = "main" // Assuming this is defined elsewhere
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const MaxBufferedDataSize = 256 * 1024
|
const MaxBufferedDataSize = 256 * 1024
|
||||||
|
Loading…
Reference in New Issue
Block a user