Frage

Ich schreibe ein Programm, das auf eine Shell ähnlich ist. Einmal in Betrieb genommen, gibt es eine Eingabeaufforderung und geben Sie in einigen App-spezifischen Befehlen.

Bisher funktioniert das ganz gut. Allerdings mag ich die Unterstützung für Befehlshistorie hinzufügen wie in Bash, so dass der Benutzer die Aufwärts- oder Abwärtspfeil treffen kann und zuvor eingegebenen Befehle sehen.

Ich habe die ncurses-Bibliothek enthalten, und ich habe eine einfache Hallo Welt Test mit getch getan () die Auf- und Abwärtspfeile, um sicherzustellen, richtig angegeben.

Die Sache, die mich stört ist, dass es eine Anforderung zu sein scheint, die ich nenne initscr (), die den Bildschirm, um klar für mich getch () zu verwenden.

OKAY Die Frage ist also:

Kennt jemand einen Weg ncurses getch () Funktion ohne Aufruf initscr () zuerst zu bedienen? Wenn nicht, kann ich es auf den Bildschirm nicht klar? Grundsätzlich bin ich der Suche haben getch () verhalten sich wie getchar (), wenn das Sinn macht.

Vielen Dank im Voraus!

EDIT: Ich denke, das beste Beispiel dafür ist, wie Python im interaktiven Modus läuft

.
War es hilfreich?

Lösung

Flüche wollen vollständig auf den Bildschirm steuern, und schreibt auf den Bildschirm zu optimieren, vor allem bei langsamen seriellen Leitungen. Um dies zu tun, muss er wissen, was auf dem Bildschirm ist, und der einzig vernünftige Weg zu tun, dass mit den meisten Terminals ist von einem leeren Bildschirm zu starten und zu verfolgen, was Sie an das Terminal schreiben.

So vermute ich (n) Flüche ist das falsche Werkzeug für Ihr Shell. Sie müssen wahrscheinlich einen Schritt auf der Abstraktionsebene gehen und verwenden und term non-blocking liest von dem Endgerät (Standardeingabe) statt.

(Dies ist nicht sehr hilfreich. Es tut uns Leid.)

Andere Tipps

Es könnte einfacher sein, eine Schnittstelle zu verwenden, wie Readline- () anstatt zu ausgewachsenem ncurses greifen zu müssen.

könnten Sie rufen Ihr Programm aus whithin rlwrap und haben die Funktion, ohne dass der Schmerz ...

Hier ist eine weitere Diskussion über diese. Die zur Verfügung gestellten Lösungen sind:

  1. „Die‚filter ()‘Funktion können Sie Flüche als einzeilige nutzen.“
  2. "Sie können etwas Gleichwertiges in C schreiben, mit setupterm die bekommen Terminaldaten und tparm, tputs für die Formatierung und Ausgabe. "

Natürlich gibt es die dritte Option, das ncurses-Quellcode zu erhalten und es zu ändern, damit es nicht auf den Bildschirm mehr nicht löschen.

Haben Sie das einfache Hilfsmittel betrachtet eine benutzerdefinierte oder term termcap Eintrag fehlt eine Folge der Schaffung der Bildschirm zu löschen und dann Terminal Einstellung dieses Rechts Schalt bevor Ihr Programm ausgeführt wird? Sie könnten auch nur verwenden newterm () und set_term () in ncurses. Dies wird verwendet, um leichter mit termcap, da Sie einen anderen Terminal umfassen könnte und einige seine Funktionen außer Kraft setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top