Curses : wie das letzte Zeichen im Terminal beschreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Hallo Forum,

mir ist aufgefallen: man kann das letzte Zeichen im Terminal mit curses nicht beschreiben.

Hier ein Beispielcode:

Code: Alles auswählen

import curses

def main(mainwin):
    y, x = mainwin.getmaxyx()
    mainwin.addch(0, 0, 'A')
    mainwin.addch(0, x-1, 'A')
    mainwin.addch(y-1, 0, 'A')
    # mainwin.addch(y-1, x-1, 'A')
    mainwin.addch(y-1, x-2, 'A')
    mainwin.refresh()
    c = mainwin.getch()

if __name__ == "__main__":
    curses.wrapper(main)
Das Programm funktioniert in dieser Form.
Wenn man die auskommentierte Zeile aber wieder aktiviert kommt es leider zum Fehler.

Das tut nichts weiter als die Dimensionen des Terminals zu ermitteln und die die Ecken ein großes 'A' zu schreiben.
Das funktioniert auch wunderbar oben links, oben rechts und unten links.
Wo es nicht funktioniert: unten rechts. Dort bricht das Programm so ab als wenn außerhalb des Terminals geschrieben wurde. Ich denke das liegt daran, dass der Cursor nach Eingabe des Zeichens ja ein Zeichen weiterspringt. Und dann ist er außerhalb des Terminals. Springen in eine neue Zeile ist ja anschließend nicht mehr möglich, da kommt ja nichts mehr.

Ich hab schon überlegt ob man das Terminal vielleicht irgendwie in einen "Überschreibmodus" versetzen kann, also so, dass der cursor auf der beschriebenen Position verweilt und nicht weiter springt.
Leider habe ich noch nicht herausgefunden wie das gehen könnte.

Hat jemand einen Tipp wie man auch in der unteren rechten Ecke eine Zeichen mit curses setzen kann?


Danke und Gruß

Sparrow
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Laut http://docs.python.org/library/curses.html sollte das vermutlich das Flag window.scrollok sein, das du auf False setzen müsstest.
Antworten