Seite 5 von 5

Verfasst: Sonntag 11. Oktober 2009, 14:08
von HWK
@lunar: Schöne Lösung. Wenn man redisplay weglässt, funktioniert es damit auch in der Windows-Konsole.

Code: Alles auswählen

import pyreadline as readline

class readline_insert(object):
    def __init__(self, value):
        self.value = value

    def __enter__(self):
        self.old_hook = readline.set_pre_input_hook(self.input_hook)

    def __exit__(self, exc_type, exc_value, traceback):
        readline.set_pre_input_hook(self.old_hook)

    def input_hook(self):
        readline.insert_text(self.value)

with readline_insert('Hallo'):
	print raw_input('Test > ')
Braucht man redisplay denn überhaupt unter Linux?
MfG
HWK

Verfasst: Sonntag 11. Oktober 2009, 21:13
von lunar
Hier funktionierts nicht ohne.

Verfasst: Sonntag 11. Oktober 2009, 23:21
von problembär
Wirklich schöne Lösung, lunar!

Hatte sonst noch die Quellen von readline runtergeladen und versucht, "readline.redisplay()" in Python zu emulieren. Hatte gedacht, das könnte doch eigentlich nicht so schwer sein. Es waren dort aber schon in der Grundfunktion ca. 600 Zeilen C-Code :shock: ...

Gruß

Verfasst: Montag 12. Oktober 2009, 06:22
von snafu
Wenn ich mich mal nörgelnderweise an Details aufhalten darf: Ein Name wie `readline_default_value()` wäre IMHO klarer. Bei "insert" könnte man denken, der String würde wie bei Listen *vor* dem eigentlichen Text eingesetzt werden. Mit "default_value" wäre auch die Intention etwas besser beschrieben. Man möchte halt einen Standardwert vorgeben, den der Benutzer ändern kann und eigentlich nicht irgendwas in einen Text - oder besser: in ein "readline" (was auch immer das ist) - einsetzen. Meine Meinung.

Verfasst: Montag 12. Oktober 2009, 16:12
von lunar
@snafu: Es steht Dir frei, den Namen zu verändern.