Wie benutze ich getch von Flüchen, ohne den Bildschirm zu löschen?

8

Ich lerne in C zu programmieren und möchte in der Lage sein, Zeichen in das Terminal einzugeben, während mein Code läuft, ohne return zu drücken. Mein Programm funktioniert, aber wenn ich initscr() aufruft, wird der Bildschirm gelöscht - auch nach dem Aufruf von filter() . Die Dokumentation für filter schlägt vor, das Clearing zu deaktivieren - dies ist jedoch bei mir nicht der Fall.

%Vor%

Warum löscht der obige Code den Bildschirm immer noch und was könnte getan werden, um ihn zu beheben?

Ich benutze Debian Lenny (stabil) und Gnome-Terminal, wenn das hilft.

    
Chris R 23.01.2011, 03:01
quelle

4 Antworten

2

Benutze newterm() anstelle von initscr() , dann sollte es dir gut gehen. Und vergessen Sie nicht delscreen() , wenn Sie diesem Rat folgen.

    
mike.dld 23.01.2011, 03:20
quelle
4

Erweitern Sie die Antwort von mike.dld, das funktioniert für mich auf MacOS X 10.6.6 (GCC 4.5.2) mit der System Curses-Bibliothek - ohne den Bildschirm zu löschen. Ich fügte die Fähigkeit hinzu, die getippten Zeichen aufzuzeichnen (geloggt in einer Akte "x") und die Fähigkeit, CONTROL-D einzugeben und das Programm zu stoppen, anstatt den Benutzer zu zwingen, zu unterbrechen.

%Vor%     
Jonathan Leffler 23.01.2011 04:42
quelle
1

Sie würden Ihren Bildschirm in einer Fluchanwendung aus einem der folgenden Gründe gelöscht sehen:

  • Ihr Programm ruft initscr auf (wodurch der Bildschirm gelöscht wird) oder newterm ohne zuerst filter oder
  • Die Terminal-Initialisierung löscht den Bildschirm (oder lässt ihn erscheinen, indem er zum alternativen Bildschirm wechselt).

Im letzteren Fall können Sie die alternative Bildschirmfunktion in ncurses unterdrücken, indem Sie die Zeiger enter_ca_mode und exit_ca_mode auf NULL ist in dialog erledigt. Besser noch, wählen Sie eine Terminalbeschreibung, die das tut, was Sie wollen.

Weiterführende Literatur:

Thomas Dickey 24.07.2016 20:14
quelle
0

Grundsätzlich ist es so, dass curses den Bildschirm (oder das Fenster, im Falle eines gefensterten Terminals) übernimmt. Du kannst Flüche nicht wirklich mit stdio mischen, und du kannst Flüche nicht wirklich benutzen, um einfach etwas einzugeben oder auszugeben, ohne den Rest des Bildschirms zu stören. Es gibt teilweise Workarounds, aber Sie werden nie wirklich in der Lage sein, es so zu machen, wie es sich anhört. Entschuldigung.

Ich würde vorschlagen, entweder Ihr Programm neu zu schreiben, um überall Flüche zu verwenden oder Alternativen wie readline zu untersuchen.

    
William McBrine 01.03.2014 23:44
quelle

Tags und Links