Complete the text viewer functionality
This commit is contained in:
parent
c9b37c205c
commit
35f949c4b5
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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() !== '') {
|
||||
|
Loading…
Reference in New Issue
Block a user