Zeichen links vom Cursor löschen

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

Hallo,

ich suche eine Escape-Sequenz (oder andere Möglichkeit), um das Zeichen links der Cursorposition löschen zu können und mit dem Cursor entsprechend eins nach links zu springen. Also so wie es bei der Löschtaste wäre. Ich weiß, dass es `\b` gibt, um eins nach links zu springen. Aber ich weiß nicht, wie man zusätzlich das Zeichen löscht. :(

Hintergrund ist eine Art Schreibmaschinen-Funktion:

Code: Alles auswählen

from sys import stdout
from time import sleep

def write(s, interval=0.25, stream=stdout):
    for char in s:
        stream.write(char)
        stream.flush()
        sleep(interval)
    stream.write('\n')

Code: Alles auswählen

>>> import typewriter
>>> text = "Hallo, Python-Forum :-)"
>>> typewriter.write(text)
Hallo, Python-Forum :-)
Ich möchte die Zeichen in dieser Art auch wieder löschen können.

Und ich möchte das mögliches ohne Curses lösen.
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Hallo,

wenns garnicht anders geht (was ich allerdings bezweifle :)) könntest du ja auch sowas wie

Code: Alles auswählen

stream.write('\b \b')
benutzen - eins nach links, ein Leerzeichen und wieder eins nach links. ;)

Gruß,

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

Stimmt. So lange es keine bessere Lösugn gibt, lasse ich das auch in der Form eingebaut.

Code: Alles auswählen

from sys import stdout
from time import sleep

def write(s, interval=0.25, stream=stdout, delete_after=False):
    def write_char(char, interval):
        stream.write(char)
        stream.flush()
        sleep(interval)

    for char in s:
        write_char(char, interval)

    if delete_after:
        for char in s:
            write_char('\b \b', interval/2)
    else:
        stream.write('\n')
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Antworten