Terminal wie mehr als 15 Farben verwenden?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Frage steht ja schon oben drin gibs einen weg mehr als 15 farben im Terminal darzustellen?

Hab zwar schon versucht

Textcolor($FFFFFF) statt zb white zu verwenden der kompiler nimmt es auch an nur es kommt jede Farbe raus auser die die ich einstelle aber auch immer nur eine der 15 normalen farben hat jeman einen rat

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Hat den niemand eine idee wie ds gehn könnte

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von MacWomble »

Nach meinem Kenntnisstand kann die Konsole nur 16 Farben in jeweils zwei Helligkeitsstufen - also 32 Farben.

https://wiki.ubuntuusers.de/dircolors
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Aber wenn man sich z.b. dieses screen mal ansieht

http://weechat.org/about/screenshots/we ... eavor.png/

läuft in der konsole hat aber ne menge farben mehr ist halt nur nicht in pascal geschrieben so weit ich weis

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Mathias »

Ich nehme mal an, du willst eine Konsolen-Anwendung mit der uses Crt schreiben.
Mit folgendem Code siehst du alle Kombinationen, die möglich sind.
Normalerweise 16 Textfarben und 8 Hintergrundfarben.


Code: Alles auswählen

program Project1;
uses
  Crt;
var
  i: Integer;
begin
  for i := 0 to 255 do begin
    TextAttr := i;
    Write('X');
  end;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Danke Mathias

Wenn es einen anderen weg als crt gibt würde ich diesen verwenden mir fehlen halt ein paar farben es ist nicht zwingend notwendig aber es wäre schöner noch andere farben zur auswahl zu haben

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Mathias »

... crt gibt würde ich diesen verwenden mir fehlen halt ein paar farben

Wieso nimmst du nicht den Grafikmodus ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

wollte mal schauen was man alles mit der konsole so layout und styletechnisch alles hinbekommen kann als machbarkeitsstudie quasi und weil konsole only auch irg style hat wo grafik nicht unbedingt notwendig ist

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Mathias »

wollte mal schauen was man alles mit der konsole so layout und styletechnisch alles hinbekommen kann als machbarkeitsstudie quasi

Vielleicht interessiert es dir, wie man alle 256 ASCII-Zeichen ausgeben kann (Nur Windows-Konsole).
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Ich nutze ein linux system deswegen würde mir windows(cmd) ausgabe nichts bringen trotzdem danke

Dragon
Beiträge: 162
Registriert: Mi 31. Jul 2013, 15:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Dragon »

Hab heute per zufall was gefunden

https://github.com/tangentstorm/xpl

Da ist ein beispiel programm mit drin und es funktionert es gibt 256 versch farben im CLI aus.

Habs getestet unter Linux klappt es wies unter anderen OS aussieht weiß ich net
denke aber es geht net weils xterm heißt das beispiel.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von af0815 »

ANSI Escape Codes senden, je nach Terminal. Siehe auch https://en.m.wikipedia.org/wiki/ANSI_escape_code#Colors
Da sieht man auch in der Übersicht wo der Hund begraben liegt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

BeniBela
Beiträge: 309
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von BeniBela »

Vielleicht interessiert es jemanden, dass ich heute zufällig dies geschrieben habe:

Code: Alles auswählen

 
uses {$ifdef unix}termio{$endif};
type
     TMyConsoleColors = (ccNormal, ccRedBold, ccGreenBold, ccBlueBold, ccPurpleBold, ccYellowBold, ccCyanBold,
                                   ccRed, ccGreen, ccBlue, ccPurple, ccYellow
      );
var
    lastConsoleColor: TMyConsoleColors = ccNormal;
    isStderrTTY: boolean = false;
    isStdoutTTY: boolean = false;
 
procedure setTerminalColor(err: boolean; color: TMyConsoleColors);
{$ifdef unix}
const colorCodes: array[TMyConsoleColors] of string = (
   #27'[0m', #27'[1;31m', #27'[1;32m', #27'[1;34m', #27'[1;35m', #27'[1;33m', #27'[1;36m',
             #27'[0;31m', #27'[0;32m', #27'[0;34m', #27'[0;35m', #27'[0;33m'
   );
var
  f: TextFile;
{$endif}
{$ifdef windows}
const colorCodes: array[TMyConsoleColors] of integer = (
   FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE,
     FOREGROUND_RED or FOREGROUND_INTENSITY, FOREGROUND_GREEN or FOREGROUND_INTENSITY, FOREGROUND_BLUE or FOREGROUND_INTENSITY, FOREGROUND_RED or FOREGROUND_BLUE or FOREGROUND_INTENSITY, FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_INTENSITY, FOREGROUND_BLUE or FOREGROUND_GREEN or FOREGROUND_INTENSITY,
     FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE, FOREGROUND_RED or FOREGROUND_BLUE, FOREGROUND_RED or FOREGROUND_GREEN
   );
var handle: Integer;
{$endif}
begin
  if err and not isStderrTTY then exit;
  if not err and not isStdoutTTY then exit;
  if color <> lastConsoleColor then begin
    if err then Flush(stderr) else flush(StdOut);
    {$ifdef unix}
    if err then f := stderr else f := stdout;
    write(f, colorCodes[color]);
    {$endif}
    {$ifdef windows}
    if err then handle := StdErrorHandle else handle := StdOutputHandle;
    SetConsoleTextAttribute(handle, colorCodes[color]);
    {$endif}
    lastConsoleColor := color;
  end;
end;
 
      {$ifdef unix}
      isStdoutTTY := IsATTY(stdout) <> 0;
      isStderrTTY := IsATTY(StdErr) <> 0;
      {$endif}
      {$ifdef windows}
      isStdoutTTY := getfiletype(StdOutputHandle) = FILE_TYPE_CHAR;
      isStderrTTY := getfiletype(StdErrorHandle) = FILE_TYPE_CHAR;
      {$endif}
 
 


auch wenn es nicht zum Titel passt (nicht mal 16 Farben)

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Terminal wie mehr als 15 Farben verwenden?

Beitrag von Achtzig »

Bin gerade dabei, etwas Farbe ins Terminal zu bringen und dabei auch über dieses Thema hier gestolpert.

Wie man mehr als 16 Farben verwenden kann, findet man dort:
http://misc.flogisoft.com/bash/tip_colors_and_formatting#colors1

Wird zwar nicht von allen Terminals unterstützt, aber zumindest von denen, die ich nutze :)

Code: Alles auswählen

WriteLn(#27'[38;5;82mHello '#27'[38;5;198mWorld'#27'[0m');

Antworten