Curses.getstr очищает Windows при первом вызове

#ruby #curses

#ruby #проклятия

Вопрос:

Первый Curses.getstr вызов очищает другое окно. При последующих вызовах этого не происходит.

 require "curses"

Curses.init_screen

window = Curses::Window.new(10, 10, 5, 0)
window.scrollok true

Thread.new do
    loop do
        window.addstr rand(1000000).to_s
        window.refresh
        sleep 0.1
    end
end

Curses.setpos 20, 0
sleep 1
# now several lines of numbers suddenly disappear
loop{ Curses.getstr }
  

Как я могу бороться с этим поведением?

Ответ №1:

То, что вы видите, является неявным refresh() для окна stdscr — потому getstr() что это действительно wgetstr(stdscr) так. Ваши варианты включают:

  1. Обновление stdscr вручную перед рисованием чего-либо
  2. Использование вашего нового окна для ввода, а не stdscr, и / или
  3. Использование stdscr для вывода.

По крайней мере, это ответ, который я бы дал для родного C curses — я не уверен, как это переводится на Ruby.