Инициализация NCurses, не очищая экран

Две вещи: setState является асинхронным, поэтому на следующей строке вы можете получить или не получить последнее значение, поэтому я рекомендую изменить

clickHandler = () => {
    this.setState({active: !this.state.active})
    this.props.getSelection(this.state.active)
  }

на

clickHandler = () => {
   this.setState({active: !this.state.active}, () => {
      this.props.getSelection(this.state.active)
   })
}

Второй Аргументом для setState является функция обратного вызова, которая будет выполнена сразу после завершения setState.

Во-вторых, на getSelection вы каждый раз определяете новый массив, поэтому он не будет иметь значений из предыдущего запуска. Вы должны хранить это где-нибудь.

9
задан Scott 17 March 2009 в 14:39
поделиться

5 ответов

Проклятия хотят полностью управлять экраном и оптимизировать записи на экран, особенно по медленным последовательным линиям. Чтобы сделать это, это должно знать то, что находится на экране и единственном разумном способе сделать, это с большинством терминалов должно начать с пустого экрана и отслеживать то, что Вы пишете в терминал.

Таким образом я подозреваю (n), проклятия являются неправильным инструментом для Вашей оболочки. Вероятно, необходимо спуститься по шагу на уровне абстракции и использовать terminfo и неблокирующиеся чтения от терминала (стандартный вход) вместо этого.

(Это не очень полезно. Извините.)

10
ответ дан 4 December 2019 в 08:16
поделиться

Вы могли просто назвать свою программу от в rlwrap и иметь функциональность без боли...

5
ответ дан 4 December 2019 в 08:16
поделиться

Могло бы быть более просто использовать интерфейс как readline () вместо того, чтобы обратиться к полноценному ncurses.

9
ответ дан 4 December 2019 в 08:16
поделиться

Вы полагали, что простое целесообразное из создания пользовательского terminfo или termcap записи, испытывающей недостаток в последовательности, очищает экран и затем переключающий Вашу установку терминала на то право прежде, чем запустить Вашу программу? Вы могли также просто использовать newterm () и set_term () в ncurses. Это раньше было легче с termcap, так как Вы могли включать другой терминал и переопределить некоторые его возможности.

-1
ответ дан 4 December 2019 в 08:16
поделиться

Вот другая дискуссия об этом. Предоставленные решения:

  1. "'Фильтр ()' функция позволяет Вам использовать проклятия в качестве одной строки".
  2. "Можно записать что-то эквивалентное в C, с помощью setupterm, чтобы получить терминальные данные и tparm, tputs для форматирования и произвести".

Конечно, существует третья опция получить ncurses исходный код, и изменить его так он больше не очищает экран.

3
ответ дан 4 December 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: