diff --git a/ivette/src/frama-c/server.ts b/ivette/src/frama-c/server.ts index 77f76c421624c153e945803fe491164bd03e3d9c..c43690340005c66589b631d1e2db19b383207a5a 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 75d501a8378c761683f88103d3790ad41b3a51f4..4a947f3deb179f3bb53e706154fe71d3774ca6dd 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 5dde04e965faa98d5ec971575096eb8c58603725..b1a72c19ebb353790e911c237aa478b834b6687e 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 1a2ee3750afae6c72dd903444c552a9070c70bbb..47ec4a74e2386cd36fbbe70660b97d3db90ccc4b 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> ); }