Страница 1 из 1
как восстановить дефолтные характеристики терминала
Добавлено: 08.09.2019 11:48:50
anchar
имеем: дефолтные характеристики терминала (Linux Mint): черный фон и серый шрифт. После запуска программы под fpc (+ модуль crt) с использованием TextColor(Red) и TextBackground (White) и выхода из программы, терминал имеет красный шрифт и белый фон. Что сделать, чтобы восстановить характеристики терминала (черный фон и серый шрифт) перед выходом из программы? Спасибо.
Re: как восстановить дефолтные характеристики терминала
Добавлено: 08.09.2019 18:11:39
Vadim
Re: как восстановить дефолтные характеристики терминала
Добавлено: 08.09.2019 18:26:50
anchar
Вы хотели сказать TextColor(Grey)? Дело в том, что такое решение мне не нравится, т.к. не учитывает характеристики терминала пользователя (ведь это может быть любой другой цвет фона и текста).
Re: как восстановить дефолтные характеристики терминала
Добавлено: 09.09.2019 03:28:38
Vadim
ancharВ таком случае Вы можете запомнить в какой-нибудь переменной предыдущую расцветку терминала:
Код: Выделить всё
Var
OldStyle: Byte;
Begin
OldStyle:=TextAttr;
// Полёт программистской мысли
...
// Закончили работу
TextAttr:=OldStyle;
End;
Добавлено спустя 14 минут 28 секунд:Хотя нет, эта переменная при инициализации не считывает настройки цвета терминала. Видимо придётся подключать ncurses и через него считывать настройки терминала.
Добавлено спустя 21 минуту 10 секунд:ancharИли, если пользоваться внешними средствами, можно так:
Код: Выделить всё
FpExecL('tput', ['reset']);
FpExecL('tput', ['clear']);

Re: как восстановить дефолтные характеристики терминала
Добавлено: 09.09.2019 08:35:48
iskander
Vadim писал(а):Хотя нет, эта переменная при инициализации не считывает настройки цвета терминала.
А если так?
Код: Выделить всё
program test;
{$mode objfpc}
uses
crt;
var
Attr: Byte;
begin
Attr := TextAttr;
WriteLn('TextAttr = ', TextAttr);
TextColor(Red);
TextBackground(White);
WriteLn('TextAttr = ', TextAttr);
TextAttr := Attr;
WriteLn('TextAttr = ', TextAttr);
end.
Re: как восстановить дефолтные характеристики терминала
Добавлено: 09.09.2019 08:56:50
Vadim
iskander
TextAttr работает только внутри собственной программы, цвета терминала, которые были до её запуска, она не берёт.
Вот, к примеру, у меня ностальгический зелёный цвет текста на чёрном фоне, однако TextAttr показывает то, что внутри программы, а не то, что было до него:
Re: как восстановить дефолтные характеристики терминала
Добавлено: 12.09.2019 05:25:10
iskander
Ага, дошло.
Re: как восстановить дефолтные характеристики терминала
Добавлено: 18.09.2019 15:17:36
anchar
решение не очень красивое, но рабочее. найдено здесь:
https://wiki.freepascal.org/Executing_External_Programs#TProcessв соответствующие места программы следует вставить:
Код: Выделить всё
uses
process;
var
reset_process: TProcess;
begin
reset_process := TProcess.Create(nil);
reset_process.Executable := 'reset';
reset_process.Options := reset_process.Options + [poWaitOnExit];
reset_process.Execute;
reset_process.Free
end.