Buntes Terminal, mit ncurses (FAQ)

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

Buntes Terminal, mit ncurses (FAQ)

Beitrag von Mathias »

Ich habe ein wenig mit ncurses rumgespielt, da will ich euch nicht vorenthalten, wie einige Linux-Terminals mächtig sind.
Ausser den vielen Farben, ist sogar unterstreichen und Fett möglich. Erinnert irgendwie an MGA/Hercules.
Blinken ist auch möglich, sieht man auf dem Bild nicht.

Getestet mit GNOME-Terminal.
Von XTerm und auch von der direkten Konsole (Ctrl+Alt+F1)wird es nicht unterstützt.

Code: Alles auswählen

uses ncurses;
var
  i: integer;
begin
  initscr;
  start_color;

  for i := 0 to 255 do begin
    init_pair(i, i, 159 - i);
    color_set(i, nil);
    mvaddstr(i div 60, i mod 60, 'X');
  end;

  attrset(A_UNDERLINE);
  color_set(1, nil);
  mvaddstr(5, 5, 'Hello World');
  attrset(A_BOLD);
  mvaddstr(6, 5, 'Hello World');
  attrset(A_BOLD + A_UNDERLINE);
  mvaddstr(7, 5, 'Hello World');
  attrset(A_BLINK);
  mvaddstr(8, 5, 'Blink');
  attrset(A_DIM);
  mvaddstr(9, 5, 'Dim');
  refresh;
  getch;
end.  
Dateianhänge
Bildschirmfoto vom 2020-08-19 14-51-47.png
Bildschirmfoto vom 2020-08-19 14-51-47.png (49.41 KiB) 562 mal betrachtet
Zuletzt geändert von Mathias am Mi 19. Aug 2020, 15:06, insgesamt 1-mal geändert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Ich934
Lazarusforum e. V.
Beiträge: 140
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Buntes Terminl, mit ncurses (FAQ)

Beitrag von Ich934 »

Blinken ist auch möglich, sieht man auf dem Bild nicht.
Also das find ich jetzt schon etwas schwach... :lol:

Danke. Das hab ich heute gesucht nachdem das mit dem Terminal die Tage ja aktuell war und ich ein entsprechendes Projekt hier habe...
Tipp für PostgreSQL: www.pg-forum.de

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

Re: Buntes Terminl, mit ncurses (FAQ)

Beitrag von Mathias »

Ich934 hat geschrieben:
Mi 19. Aug 2020, 15:05
Blinken ist auch möglich, sieht man auf dem Bild nicht.
Also das find ich jetzt schon etwas schwach... :lol:
Da hinken die Modernen GUIs leider hinterher. :cry:
Unter DOS konnte man in einem Bild Pixel blinken lassen. Da dies von der Hardware unterstützt wurde.
EGA und VGA konnten dies, bei CGA ging es meines Wissens nicht, ausser im Textmodus.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1491
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Warf »

Gibt sogar noch einige optionen mehr, die allerdings von einigen terminals nicht dargestellt werden, ein beispiel dafür: https://github.com/Warfley/LazTermUtils ... dsTest.lpr

Windows 10 terminal (was mittlerweile escape sequences kann) z.b. kann nur bold, underlined, inverted und Farbig (aber auch mit 24 bit truecolor), und kein blinking:
windows.png
windows.png (39.16 KiB) 509 mal betrachtet
KDE Konsole kann noch dazu striked (durchgestrichen) slow blink und italic und xTerm kann noch dim.

Overlined, framed, fractured, double underlined und circled sind zwar in einigen Standards definiert, und sind auch in der wikipedia liste gelandet (woher ich meine infos genommen hab für meine lib), aber ich war bisher nicht in der lage ein TTY zu finden das die auch kann.

Die meisten sind zu großen Teilen kompatibel mit xTerm. Das MacOS Terminal kann übrigens nur 8bit farben und keine 24 bit Farben (aber iTerm auf macOS ist eh viel besser, doch wenn man mac apps schreibt sollte man sich darauf beschränken)

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

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Mathias »

Im Grunde sind diess alles spielerreien, oder wisst ihr eine sinvolle Anwendung dafür ?

Interessant ist es trotzdem,.

Dazumal unter DOS wären dies sehe interessante Feature gewesen.
TP IDE mit Fettschrift und in einem VESA Textmodus.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 2800
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Socke »

Mathias hat geschrieben:
Do 20. Aug 2020, 08:31
Im Grunde sind diess alles spielerreien, oder wisst ihr eine sinvolle Anwendung dafür ?
Textbasierte GUIs sind schon eine ganz nette Abwechslung, wenn man seine Server per SSH erreicht und dort kein X11-Forwarding nutzen kann/möchte. Klar kann man unter Linux (fast) alles auch per Konfigurationsdateien machen, aber wer weiß schon, wo die alle liegen.

Seit mir bei einem Kunden die grafische Oberfläche fehlte, bin ih dazu übergegangen die In-Memory-Datenbank eines großen deutschen Softwareherstellers ausschließlich per Terminal zu installieren. Der Installer nutzt zwar nicht so fancy Darstellungen, es würde dem aber nicht schaden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Mathias »

Textbasierte GUIs sind schon eine ganz nette Abwechslung, wenn man seine Server per SSH erreicht und dort kein X11-Forwarding nutzen kann/möchte.
Bei einem Rasberry sicher auch noch sinnvoll.
Windows 10 terminal (was mittlerweile escape sequences kann) z.b. kann nur bold, underlined, inverted und Farbig (aber auch mit 24 bit truecolor), und kein blinking:
Ich dachte die "escape sequences" gingen schon immer, mit einer art ANSY.SYS ?
Hätte nie gedacht, das man bei eine M$ Konsole Bold und Unterline darstellen kann. :shock:

Wie werden mit folgendem Comando die sonder Darstellungen in den Buffer geschrieben ?

Code: Alles auswählen

  WriteConsoleOutputA(wHnd, @consoleBuffer, characterBufferSize, characterPosition, consoleWriteArea);
Zu Linux zurück.
Sobald man mit "initscr;" in den ncurses Modus schaltet, arbeitet das Terminal ganz anders. Das sieht man, da nicht mal "Writeln" eine Ausgabe produziert.

Wen man Writeln nutzen will, gibt es eine Unit "nCrt", die ist in der Handhabung dann ähnlich wie "Crt".
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Winni
Beiträge: 405
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Winni »

Mathias hat geschrieben:
Do 20. Aug 2020, 16:50
Ich dachte die "escape sequences" gingen schon immer, mit einer art ANSY.SYS ?
Hätte nie gedacht, das man bei eine M$ Konsole Bold und Unterline darstellen kann. :shock:
Hi!

Okay, Opa redet wieder vom Krieg, aber:

Dann besorgt Euch mal die Turbo Pascal Sources von MS-DOS-"Klötzchen-Spielen" aus den 80ern ohne die unit Graph.
16 Farben, 80x25 chars, IBM8 Zeichensatz mit Rahmen, grauen, schwarzen und halben Klötzen.
Das nervige Attribut "blink".

Völlig ausreichend für Tetris und Artverwandtes.

Und dabei dudelte irgenwelch unerträgliches Zeugs produziert mittels Sound (Frequenz)

Winni

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

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Mathias »

Wer verwendete schon AE, da schreibte man direkt ins VRAM.
Bei einem Drucker sah es anders aus.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1491
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Warf »

Mathias hat geschrieben:
Do 20. Aug 2020, 08:31
Im Grunde sind diess alles spielerreien, oder wisst ihr eine sinvolle Anwendung dafür ?
Ich persönlich mag ein TUI lieber als ein GUI (wo es angebracht ist, ein grafik editor als TUI is nicht das wahre).

Grund dafür: identisches aussehen und verhalten unter windows, linux und mac, benutzbar über SSH und wenn man wieder der DE unter linux abstürzt (man muss cinamon einfach mögen, sonst würden einem die ständigen abstürze noch den letzten nerv rauben).

Und ein ganz wichtiger punkt: Terminal editoren wie vim. grad wenn man einfach nur dateien schnell bearbeiten will, z.b. config files, ist man mit vim mit dem editieren meist schon fertig bevor die meisten GUI editoren überhaupt geladen sind
Ich dachte die "escape sequences" gingen schon immer, mit einer art ANSY.SYS ?
Hätte nie gedacht, das man bei eine M$ Konsole Bold und Unterline darstellen kann. :shock:
Es gibt für windows 10 jetzt sogar (im windows store) die "Terminal" anwendung, die eine art vernünftiger terminal emulator ist, mit richtig modernen features wie tabs und hotkeys.

ANSI.SYS ist halt ein kompatibilitätslayer, gibt was das angeht auch andere ähnliche programme die sowas können, aber mittlerweile kann windows den ganzen kram nativ, man muss nur eine option über SetConsoleMode setzen und dann verhält sich die windows konsole wie xterm.

Bei meiner lib ist der komplette kompatibilitätscode nur so 200 zeilen rum (also windows + linux code): https://github.com/Warfley/LazTermUtils ... bility.pas

Gibt zwar noch ein paar sachen bei denen man auf Low-Level API calls zurückgreifen muss (z.b. fenstergröße ermitteln), aber ansonsten kann man mittlerweile ne ganze menge schweinerein mit dem kram machen.
Zu Linux zurück.
Sobald man mit "initscr;" in den ncurses Modus schaltet, arbeitet das Terminal ganz anders. Das sieht man, da nicht mal "Writeln" eine Ausgabe produziert.

Wen man Writeln nutzen will, gibt es eine Unit "nCrt", die ist in der Handhabung dann ähnlich wie "Crt".
Ja ab dem punkt übernimmt ncurses halt die filedeskriptoren.

Man kann auch andere lustige spielereien mit sowas machen, so kann man unter Linux z.b. die aktuell offenen terminal sessions über pseudo files in /dev ansteuern. Meine lib unterstützt das benutzen dieser Terminal pseudo files, und so hab ich ein programm geschrieben mit dem ich einen restart für meinen server machen kann, der dann allen offenen terminals (ssh sessions) einen countdown in die konsole printed.

Um das ganze besser zu machen hab ich schon überlegt einzubauen um die aktuelle cursor position zu holen (um das dann wo hin zu schreiben und danach den cursor wieder zu reseten), leider ist das nicht so stabil möglich, weshalb es aktuell einfach an der aktuellen cursor position das hinschreibt und danach den cursor wieder resetted wo er vorher war.

Damit kann man einige späße treiben

PS: auch genial: https://github.com/keroserene/rickrollrc/

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

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Mathias »

Es gab doch mal ein Video, welches man auf der Konsole eines 8088er abspielen konnte.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Winni
Beiträge: 405
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.06, fpc 3.04
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Buntes Terminal, mit ncurses (FAQ)

Beitrag von Winni »

Mathias hat geschrieben:
Do 20. Aug 2020, 22:37
Es gab doch mal ein Video, welches man auf der Konsole eines 8088er abspielen konnte.
You need XDC!!!!!

Damit wurde für jeden Frame DOS-exe Code erzeugt! Welch Wahnsinn!

Hier: https://x86dc.wordpress.com/

Und ab in den Keller und ne alte 8088-Gurke hochholen ....

Winni

Antworten