2017-06-19 2 views
0

Ich habe ein Hauptfenster win:Wie Refresh zu zwingen, in Flüche Ruby

win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0) 

Dann manchmal brauche ich ein Nachrichtenfenster zu erstellen, welche die wichtigste abdeckt. Nachdem ich das Nachrichtenfenster zu schließen, aktualisierte ich win:

win.refresh 

Aber wenn ich etwas im Hauptfenster mit so etwas wie ändern:

win.addstr("asd") 

refresh hat das Fenster nicht neu gezeichnet werden.

Gibt es eine Möglichkeit, das Neuzeichnen des Fensters zu erzwingen?

+0

haben Sie '# doupdate' versucht? Ich habe keine Erfahrung mit 'Curses', die nur durch die Dokumente schauen. – engineersmnky

+0

@engineersmnky Nein, '# doupdate' zeichnet das Fenster nicht neu. – user136379

Antwort

0

Kommt drauf an.

Das ist mit touchwin (oder was auch immer eine Ruby-Bindung für die C-Funktion verwenden kann) getan.

In ruby 2.0.0 die Standard Flüche für Ruby Bindung fehlte touchwin und touchline. Seltsamerweise enthielt es Bindungen für mehrere der Ncurses-Erweiterungen (resizeterm, die Mausschnittstelle, Standardfarben), aber fehlen viele der Standardfunktionen (siehe X/Open Curses als Referenz).

In 2.4.1 ist curses kein Ruby-Standardmodul, aber die site for the module hat touchwin.

0

Es gibt eine Methode Curses::Window#touch, die das Fenster als geändert markiert und vom nächsten refresh neu gezeichnet wird. Es gibt auch Methode Curses::Window#redraw, die das Fenster einfach neu zeichnen.

zusätzliches Problem ist getch Methode, die in meinem Programm wenig ist unberechenbar, wenn ich Curses.getch verwenden - manchmal verursacht es, dass das Fenster wird nicht neu geladen, manchmal ist es ganzer Bildschirm verursacht getch auf Fensterobjekt verschwinden ... Mit löst das Problem z.B win.getch

Verwandte Themen