From 35f949c4b55e09da7baeaceaad42a227eb4c5633 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 21 Nov 2023 11:35:56 -0500 Subject: [PATCH] Complete the text viewer functionality --- src/common/editor.ts | 36 +++++++++++++++++++++++++++++------- src/common/main.ts | 2 ++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/common/editor.ts b/src/common/editor.ts index 8f89ef3..379a143 100644 --- a/src/common/editor.ts +++ b/src/common/editor.ts @@ -33,17 +33,27 @@ export class Editor { * The scrolling offset for the rendered row * @private */ - #renderX: number; + #renderX: number = 0; /** * The name of the currently open file * @private */ - #filename: string; + #filename: string = ''; + /** + * A message to display at the bottom of the screen + * @private + */ + #statusMessage: string = ''; + /** + * Timeout for status messages + * @private + */ + #statusTimeout: number = 0; constructor(terminalSize: ITerminalSize) { this.#buffer = new Buffer(); this.#screen = terminalSize; - this.#screen.rows -= 1; + this.#screen.rows -= 2; this.#cursor = { x: 0, y: 0, @@ -52,10 +62,7 @@ export class Editor { x: 0, y: 0, }; - this.#renderX = 0; - this.#document = Document.empty(); - this.#filename = ''; } private get currentRow(): Row | null { @@ -195,6 +202,12 @@ export class Editor { // Terminal Output / Drawing // -------------------------------------------------------------------------- + public setStatusMessage(msg: string): void { + // TODO: consider some sort of formatting for passed strings + this.#statusMessage = msg; + this.#statusTimeout = Date.now(); + } + /** * Clear the screen and write out the buffer */ @@ -204,6 +217,7 @@ export class Editor { this.#buffer.append(Ansi.ResetCursor); this.drawRows(); this.drawStatusBar(); + this.drawMessageBar(); this.#buffer.append( Ansi.moveCursor( this.#cursor.y - this.#offset.y, @@ -288,6 +302,14 @@ export class Editor { len++; } } - this.#buffer.append(Ansi.ResetFormatting); + this.#buffer.appendLine(Ansi.ResetFormatting); + } + + private drawMessageBar(): void { + this.#buffer.append(Ansi.ClearLine); + const msgLen = this.#statusMessage.length; + if (msgLen > 0 && (Date.now() - this.#statusTimeout < 5000)) { + this.#buffer.append(this.#statusMessage, this.#screen.cols); + } } } diff --git a/src/common/main.ts b/src/common/main.ts index 6666c93..bf7a3d8 100644 --- a/src/common/main.ts +++ b/src/common/main.ts @@ -26,6 +26,8 @@ export async function main() { // Create the editor itself const editor = new Editor(terminalSize); + editor.setStatusMessage('HELP: Ctrl-Q = quit'); + if (term.argv.length > 0) { const filename = term.argv[0]; if (filename.trim() !== '') {