как восстановить дефолтные характеристики терминала

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

как восстановить дефолтные характеристики терминала

Сообщение anchar » 08.09.2019 12:48:50

имеем: дефолтные характеристики терминала (Linux Mint): черный фон и серый шрифт. После запуска программы под fpc (+ модуль crt) с использованием TextColor(Red) и TextBackground (White) и выхода из программы, терминал имеет красный шрифт и белый фон. Что сделать, чтобы восстановить характеристики терминала (черный фон и серый шрифт) перед выходом из программы? Спасибо.
anchar
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.09.2019 12:45:22

Re: как восстановить дефолтные характеристики терминала

Сообщение Vadim » 08.09.2019 19:11:39

Код: Выделить всё
TextColor(White);
TextBackground(Black);

?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как восстановить дефолтные характеристики терминала

Сообщение anchar » 08.09.2019 19:26:50

Вы хотели сказать TextColor(Grey)? Дело в том, что такое решение мне не нравится, т.к. не учитывает характеристики терминала пользователя (ведь это может быть любой другой цвет фона и текста).
anchar
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.09.2019 12:45:22

Re: как восстановить дефолтные характеристики терминала

Сообщение Vadim » 09.09.2019 03:53:00

anchar
В таком случае Вы можете запомнить в какой-нибудь переменной предыдущую расцветку терминала:
Код: Выделить всё
Var
  OldStyle: Byte;
Begin
  OldStyle:=TextAttr;
// Полёт программистской мысли
  ...
// Закончили работу
  TextAttr:=OldStyle;
End;


Добавлено спустя 14 минут 28 секунд:
Хотя нет, эта переменная при инициализации не считывает настройки цвета терминала. Видимо придётся подключать ncurses и через него считывать настройки терминала.

Добавлено спустя 21 минуту 10 секунд:
anchar
Или, если пользоваться внешними средствами, можно так:
Код: Выделить всё
FpExecL('tput', ['reset']);
FpExecL('tput', ['clear']);

:-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как восстановить дефолтные характеристики терминала

Сообщение iskander » 09.09.2019 09:35:48

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. 
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: как восстановить дефолтные характеристики терминала

Сообщение Vadim » 09.09.2019 09:56:50

iskander
TextAttr работает только внутри собственной программы, цвета терминала, которые были до её запуска, она не берёт.
Вот, к примеру, у меня ностальгический зелёный цвет текста на чёрном фоне, однако TextAttr показывает то, что внутри программы, а не то, что было до него:
Вложения
01.png
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: как восстановить дефолтные характеристики терминала

Сообщение iskander » 12.09.2019 06:25:10

Ага, дошло.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: как восстановить дефолтные характеристики терминала

Сообщение anchar » 18.09.2019 16:17:36

решение не очень красивое, но рабочее. найдено здесь: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.
anchar
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.09.2019 12:45:22


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru