Curses-Programm stürzt beim Maximieren ab

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
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich möchte mal `less` in Python mit Hilfe von [mod]curses[/mod] implementieren. `less` bekommt es hin, bei Veränderung der Terminal-Maße (z.B. Vergrößerung des Emulator-Fensters), eine vormals umgebrochene Zeile neu auszurichten. Wenn also genug Platz da ist, wird alles in eine Zeile gesteckt. Mein Programm hingegen stürzt einfach nur ab. Woran kann es liegen bzw was sollte ich ändern?

Der Code ist noch recht dürftig:

Code: Alles auswählen

from contextlib import closing
import curses
import sys
from time import sleep


class ScrollableScreen(object):

    def __init__(self, s=''):
        self.screen = curses.initscr()
        curses.curs_set(0)
        self.screen.immedok(True)
        self.screen.scrollok(True)
        self.add_string(s)

    def add_string(self, s):
        self.screen.addstr(s)

    def close(self):
        curses.endwin()

def main():
    with closing(ScrollableScreen()) as screen:
        screen.add_string(sys.stdin.read())
        sleep(10)

if __name__ == '__main__':
    main()
EDIT: "Abstürzen" heißt, dass sich das Programm ohne Meldung beendet.
EDIT2: Wieso springt die Ausgabe (z.B. von `ls -l`) eigentlich bis zum Ende?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Kurzes Googlen sagt, dass ein SIGWINCH Signal meldet, wenn sich die Terminalgröße ändert. Das könnte man abfangen und darauf reagieren. Siehe http://invisible-island.net/ncurses/ncurses-intro.html. Allerdings hat Google auch dies hier gefunden: http://bugs.python.org/issue3948 und http://bugs.python.org/issue3949, sodass das vielleicht gar nicht unter Python funktioniert.

Stefan
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sieht wirklich nicht so gut aus. Das werd ich wohl ctypes bemühen müssen... Danke aber für die Mühe.
Antworten