From 075e98c4cfef0290cdb96565bf59a204dcaabea4 Mon Sep 17 00:00:00 2001 From: sawka Date: Thu, 2 Mar 2023 00:41:16 -0800 Subject: [PATCH] add getCmd to linecontainer --- src/linecomps.tsx | 30 ++++++++++++++++++------------ src/model.ts | 11 ++++++++++- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/linecomps.tsx b/src/linecomps.tsx index e40980d5..793c7c44 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -125,7 +125,7 @@ class LineAvatar extends React.Component<{line : LineType, cmd : Cmd}, {}> { @mobxReact.observer -class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, width : number, staticRender : boolean, visible : OV, onHeightChange : HeightChangeCallbackType, topBorder : boolean, renderMode : RenderModeType, overrideCollapsed : OV}, {}> { +class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, width : number, staticRender : boolean, visible : OV, onHeightChange : HeightChangeCallbackType, topBorder : boolean, renderMode : RenderModeType, overrideCollapsed : OV, noSelect? : boolean}, {}> { lineRef : React.RefObject = React.createRef(); cmdTextRef : React.RefObject = React.createRef(); rtnStateDiff : mobx.IObservableValue = mobx.observable.box(null, {name: "linecmd-rtn-state-diff"}); @@ -139,7 +139,7 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, } checkStateDiffLoad() : void { - let {line, staticRender, visible} = this.props; + let {sw, line, staticRender, visible} = this.props; if (staticRender || this.isCollapsed()) { return; } @@ -150,7 +150,7 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, } return; } - let cmd = GlobalModel.getCmd(line); + let cmd = sw.getCmd(line); if (cmd == null || !cmd.getRtnState() || this.rtnStateDiffFetched) { return; } @@ -310,7 +310,10 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, @boundMethod handleClick() { - let {line} = this.props; + let {line, noSelect} = this.props; + if (noSelect) { + return; + } let sel = window.getSelection(); if (this.lineRef.current != null) { let selText = sel.toString(); @@ -375,7 +378,7 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, renderSimple() { let {sw, line, width, topBorder, renderMode} = this.props; - let cmd = GlobalModel.getCmd(line); + let cmd = sw.getCmd(line); let isCollapsed = this.isCollapsed(); let mainDivCn = cn( "line", @@ -432,7 +435,7 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, return this.renderSimple(); } let formattedTime = getLineDateTimeStr(line.ts); - let cmd = model.getCmd(line); + let cmd = sw.getCmd(line); if (cmd == null) { return (
@@ -517,7 +520,7 @@ class LineCmd extends React.Component<{sw : LineContainerModel, line : LineType, } @mobxReact.observer -class Line extends React.Component<{sw : LineContainerModel, line : LineType, width : number, staticRender : boolean, visible : OV, onHeightChange : HeightChangeCallbackType, overrideCollapsed : OV, topBorder : boolean, renderMode : RenderModeType}, {}> { +class Line extends React.Component<{sw : LineContainerModel, line : LineType, width : number, staticRender : boolean, visible : OV, onHeightChange : HeightChangeCallbackType, overrideCollapsed : OV, topBorder : boolean, renderMode : RenderModeType, noSelect? : boolean}, {}> { render() { let line = this.props.line; if (line.archived) { @@ -571,10 +574,13 @@ class Prompt extends React.Component<{rptr : RemotePtrType, festate : FeStateTyp } @mobxReact.observer -class LineText extends React.Component<{sw : LineContainerModel, line : LineType, renderMode : RenderModeType, topBorder : boolean}, {}> { +class LineText extends React.Component<{sw : LineContainerModel, line : LineType, renderMode : RenderModeType, topBorder : boolean, noSelect? : boolean}, {}> { @boundMethod clickHandler() { - let {line} = this.props; + let {line, noSelect} = this.props; + if (noSelect) { + return; + } GlobalCommandRunner.swSelectLine(String(line.linenum)); } @@ -675,7 +681,7 @@ class ImageRenderer extends React.Component<{sw : LineContainerModel, line : Lin loadImage() : void { let {sw, line} = this.props; let model = GlobalModel; - let cmd = model.getCmd(line); + let cmd = sw.getCmd(line); if (cmd == null) { return; } @@ -782,7 +788,7 @@ class TerminalRenderer extends React.Component<{sw : LineContainerModel, line : loadTerminal() : void { let {sw, line} = this.props; let model = GlobalModel; - let cmd = model.getCmd(line); + let cmd = sw.getCmd(line); if (cmd == null) { return; } @@ -827,7 +833,7 @@ class TerminalRenderer extends React.Component<{sw : LineContainerModel, line : let swFocusType = sw.getFocusType(); return isPhysicalFocused && (swFocusType == "cmd" || swFocusType == "cmd-fg") }, {name: "computed-isFocused"}).get(); - let cmd = GlobalModel.getCmd(line); // will not be null + let cmd = sw.getCmd(line); // will not be null let usedRows = sw.getUsedRows(line, cmd, width); let termHeight = termHeightFromRows(usedRows, GlobalModel.termFontSize.get()); let termLoaded = this.termLoaded.get(); diff --git a/src/model.ts b/src/model.ts index a5bb216a..d7c27f5f 100644 --- a/src/model.ts +++ b/src/model.ts @@ -37,6 +37,7 @@ type LineContainerModel = { getRenderer : (cmdId : string) => RendererModel, getFocusType : () => "input" | "cmd" | "cmd-fg", getSelectedLine : () => number, + getCmd : (line : LineType) => Cmd, } @@ -365,6 +366,10 @@ class ScreenWindow { this.termLineNumFocus = mobx.observable.box(0, {name: "termLineNumFocus"}); } + getCmd(line : LineType) : Cmd { + return GlobalModel.getCmd(line); + } + getAnchorStr() : string { if (this.anchorLine == null || this.anchorLine == 0) { return "0"; @@ -725,7 +730,7 @@ class Window { dispose() { } - getCmd(cmdId : string) { + getCmd(cmdId : string) : Cmd { return this.cmds[cmdId]; } @@ -1638,6 +1643,10 @@ class SpecialHistoryViewLineContainer { constructor(hitem : HistoryItem) { this.historyItem = hitem; } + + getCmd(line : LineType) : Cmd { + return null; + } loadTerminalRenderer(elem : Element, line : LineType, cmd : Cmd, width : number) : void { this.unloadRenderer(null);