From 4fdc6c46e41499ad40f99f6a1c9622493f021ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Thu, 17 Feb 2022 09:51:49 +0100 Subject: [PATCH] [ivette] Adds configurable console scrollback. --- ivette/src/frama-c/server.ts | 2 +- ivette/src/ivette/prefs.tsx | 11 +++++++++++ ivette/src/renderer/Controller.tsx | 6 ++++++ ivette/src/renderer/Preferences.tsx | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/ivette/src/frama-c/server.ts b/ivette/src/frama-c/server.ts index 77f76c42162..c4369034000 100644 --- a/ivette/src/frama-c/server.ts +++ b/ivette/src/frama-c/server.ts @@ -133,7 +133,7 @@ let killingTimer: NodeJS.Timeout | undefined; // -------------------------------------------------------------------------- /** The server console buffer. */ -export const buffer = new RichTextBuffer({ maxlines: 200 }); +export const buffer = new RichTextBuffer(); // -------------------------------------------------------------------------- // --- Server Status diff --git a/ivette/src/ivette/prefs.tsx b/ivette/src/ivette/prefs.tsx index 75d501a8378..4a947f3deb1 100644 --- a/ivette/src/ivette/prefs.tsx +++ b/ivette/src/ivette/prefs.tsx @@ -93,3 +93,14 @@ export const EditorCommand = new Settings.GString('Editor.Command', 'emacs +%n:%c %s'); // -------------------------------------------------------------------------- +// --- Console Scrollback configuration +// -------------------------------------------------------------------------- + +export const ConsoleScrollback = + new Settings.GNumber('Console.Scrollback', 2000); + +export interface ConsoleScrollbackProps { + scrollback: Settings.GlobalSettings<number>; +} + +// -------------------------------------------------------------------------- diff --git a/ivette/src/renderer/Controller.tsx b/ivette/src/renderer/Controller.tsx index 5dde04e965f..b1a72c19ebb 100644 --- a/ivette/src/renderer/Controller.tsx +++ b/ivette/src/renderer/Controller.tsx @@ -30,6 +30,7 @@ import React from 'react'; import * as Dome from 'dome'; import * as Json from 'dome/data/json'; import * as Settings from 'dome/data/settings'; +import * as Preferences from 'ivette/prefs'; import * as Toolbars from 'dome/frame/toolbars'; import { IconButton } from 'dome/controls/buttons'; @@ -211,6 +212,11 @@ const RenderConsole = () => { return () => { editor.off('change', callback); }; }); + const [maxLines] = Settings.useGlobalSettings(Preferences.ConsoleScrollback); + React.useEffect(() => { + Server.buffer.setMaxlines(maxLines); + }); + const doReload = () => { const cfg = Server.getConfig(); const hst = insertConfig(history, cfg); diff --git a/ivette/src/renderer/Preferences.tsx b/ivette/src/renderer/Preferences.tsx index 1a2ee3750af..47ec4a74e23 100644 --- a/ivette/src/renderer/Preferences.tsx +++ b/ivette/src/renderer/Preferences.tsx @@ -99,6 +99,17 @@ function EditorFields() { ); } +// -------------------------------------------------------------------------- +// --- Console Scrollback Forms +// -------------------------------------------------------------------------- +function ConsoleScrollbackFields(props: IvettePrefs.ConsoleScrollbackProps) { + const scrollback = Forms.useDefined(Forms.useValid( + Settings.useGlobalSettings(props.scrollback), + )); + const title = 'Maximum number of lines in the console window'; + return (<Forms.NumberField state={scrollback} label="Lines" title={title} />); +} + // -------------------------------------------------------------------------- // --- Export Components // -------------------------------------------------------------------------- @@ -112,6 +123,9 @@ export default function Preferences() { <Forms.Section label="Editors" unfold> <EditorFields /> </Forms.Section> + <Forms.Section label="Console Scrollback" unfold> + <ConsoleScrollbackFields scrollback={IvettePrefs.ConsoleScrollback} /> + </Forms.Section> </Forms.Page> ); } -- GitLab