diff --git a/src/main.tsx b/src/main.tsx index 42f19af9..a96d1580 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -11,7 +11,7 @@ import cn from "classnames"; import {TermWrap} from "./term"; import type {SessionDataType, LineType, CmdDataType, RemoteType, RemoteStateType, RemoteInstanceType, RemotePtrType, HistoryItem, HistoryQueryOpts, RemoteEditType} from "./types"; import localizedFormat from 'dayjs/plugin/localizedFormat'; -import {GlobalModel, GlobalCommandRunner, Session, Cmd, Window, Screen, ScreenWindow, riToRPtr, widthToCols, termWidthFromCols, termHeightFromRows} from "./model"; +import {GlobalModel, GlobalCommandRunner, Session, Cmd, Window, Screen, ScreenWindow, riToRPtr, widthToCols, termWidthFromCols, termHeightFromRows, termRowsFromHeight} from "./model"; import {isModKeyPress} from "./util"; dayjs.extend(localizedFormat) @@ -567,11 +567,11 @@ class TextAreaInput extends React.Component<{}, {}> { if (e.code == "Tab") { e.preventDefault(); if (lastTab) { - GlobalModel.submitCommand("compgen", null, [curLine], {"comppos": String(curLine.length), "compshow": "1", "nohist": "1"}, true); + GlobalModel.submitCommand("_compgen", null, [curLine], {"comppos": String(curLine.length), "compshow": "1", "nohist": "1"}, true); return; } else { - GlobalModel.submitCommand("compgen", null, [curLine], {"comppos": String(curLine.length), "nohist": "1"}, true); + GlobalModel.submitCommand("_compgen", null, [curLine], {"comppos": String(curLine.length), "nohist": "1"}, true); return; } } @@ -2297,6 +2297,7 @@ class SessionView extends React.Component<{}, {}> {
+
); diff --git a/src/model.ts b/src/model.ts index 395ea6f7..9b222b71 100644 --- a/src/model.ts +++ b/src/model.ts @@ -36,6 +36,14 @@ function termHeightFromRows(rows : number) : number { return Math.ceil(DefaultCellHeight*rows); } +function termRowsFromHeight(height : number) : number { + let rows = Math.floor((height - 80)/DefaultCellHeight); + if (rows <= 0) { + rows = 1; + } + return rows; +} + function cmdStatusIsRunning(status : string) : boolean { return status == "running" || status == "detached"; } @@ -279,6 +287,7 @@ class ScreenWindow { name : OV; layout : OV; lastCols : number; + lastRows : number; selectedLine : OV; focusType : OV<"input"|"cmd"|"cmd-fg">; anchorLine : number = null; @@ -462,6 +471,16 @@ class ScreenWindow { GlobalCommandRunner.resizeWindow(this.windowId, cols); } + rowsCallback(rows : number) : void { + if (!this.isActive() || rows == 0) { + return; + } + if (rows == this.lastCols) { + return; + } + this.lastRows = rows; + } + getTermWrap(cmdId : string) : TermWrap { return this.terms[cmdId]; } @@ -1617,6 +1636,7 @@ class Model { let sw = screen.getActiveSW(); if (sw != null) { rtn.termopts.cols = sw.lastCols; + rtn.winsize = {rows: sw.lastRows, cols: sw.lastCols}; } } } @@ -2316,6 +2336,6 @@ if ((window as any).GlobalModel == null) { GlobalModel = (window as any).GlobalModel; GlobalCommandRunner = (window as any).GlobalCommandRunner; -export {Model, Session, Window, GlobalModel, GlobalCommandRunner, Cmd, Screen, ScreenWindow, riToRPtr, widthToCols, termWidthFromCols, termHeightFromRows}; +export {Model, Session, Window, GlobalModel, GlobalCommandRunner, Cmd, Screen, ScreenWindow, riToRPtr, widthToCols, termWidthFromCols, termHeightFromRows, termRowsFromHeight}; diff --git a/src/sh2.less b/src/sh2.less index 51923809..35830291 100644 --- a/src/sh2.less +++ b/src/sh2.less @@ -56,6 +56,7 @@ html, body, #main { display: flex; flex-direction: column; min-width: 300px; + position: relative; } .screen-view { @@ -495,7 +496,7 @@ html, body, #main { right: 0; background-color: @term-red; color: white; - z-index: 10; + z-index: 110; padding: 4px; .mono-font(10px); } @@ -526,7 +527,7 @@ html, body, #main { height: calc(100% - 20px); top: 10px; left: 0; - z-index: 10; + z-index: 8; &.selected { display: block; @@ -549,6 +550,7 @@ html, body, #main { width: 38px; background-color: #555; display: flex; + flex-shrink: 0; align-items: center; justify-content: center; font-weight: bold; @@ -643,6 +645,7 @@ html, body, #main { color: #ddd; margin-left: 8px; margin-top: 4px; + white-space: nowrap; .mono-font(14px); } @@ -747,15 +750,18 @@ body .xterm .xterm-viewport { .cmd-input { border-radius: 0; - border-top: 2px solid #ccc; + border-top: 4px solid #ccc; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; border-bottom-right-radius: 10px; max-height: max(300px, 40%); display: flex; flex-direction: column; - position: relative; - padding: 20px 20px 20px 20px; + position: absolute; + bottom: 0; + width: 100%; + padding: 20px 25px 20px 20px; + z-index: 100; &.has-info { padding-top: 5px; @@ -799,8 +805,9 @@ body .xterm .xterm-viewport { } .cmd-input-context { - color: #fff; .mono-font(); + color: #fff; + white-space: nowrap; } .cmd-input-field { @@ -860,7 +867,7 @@ body .xterm .xterm-viewport { .history-title { position: absolute; - z-index: 2; + z-index: 102; top: 5px; left: 20px; background-color: black; diff --git a/src/types.ts b/src/types.ts index b7ccd320..aec5bd19 100644 --- a/src/types.ts +++ b/src/types.ts @@ -171,6 +171,7 @@ type UIContextType = { windowid : string, remote : RemotePtrType, termopts : UIContextTermOptsType, + winsize : TermWinSize, }; type FeCmdPacketType = {