экранируйте буфер и диалоговое окно

Вы пытались использовать atsc начальные настраивающие данные?

$ head -n 20 /usr/share/dvb/atsc/us-ATSC-center-frequencies-8VSB
# US ATSC center frequencies, use if in doubt

A  57028615 8VSB
A  63028615 8VSB 
A  69028615 8VSB
A  79028615 8VSB
A  85028615 8VSB
A 177028615 8VSB
A 183028615 8VSB
A 189028615 8VSB
A 195028615 8VSB
A 201028615 8VSB
A 207028615 8VSB
A 213028615 8VSB
A 473028615 8VSB
A 479028615 8VSB
A 485028615 8VSB
A 491028615 8VSB
A 497028615 8VSB
A 503028615 8VSB

Как это ведет себя с помощью vlc для настройки?

vlc atsc://frequency=689028615 :dvb-adapter=0
2
14.03.2013, 22:16
2 ответа

Это - проблема с dialog реализация из http://invisible-island.net/dialog/dialog.html.

На запуске это делает a smcup + rmcup отдельно, я верю потому что ncurses стандартная программа инициализации делает smcup и dialog хочет отменить это. Таким образом, если Вы делаете Ваш smcup заранее, это не будет иметь никакого эффекта, потому что rmcup отменит его.

Работа вокруг должна добавить --keep-tite опция, которая говорит этому не делать это, таким образом, dialog сделает smcup на запуске и rmcup на выходе как другой ncurses приложения, если терминал поддерживает его.

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

Что Вы могли сделать, хотя или использование другой терминал, который имеет альтернативный экран как шпаклевка или Unix от Cygwin на X-сервере Cygwin. Или выполненный X терминалов на удаленном сервере для соединения с и дисплей на X-сервере. Или выполненный на терминальном основанный эмулятор терминала в Вашем терминале, который поддерживает альтернативный экран как GNU screen.

4
27.01.2020, 21:57
  • 1
    tput smcup | od -tc 0000000 033 [ ? 1 0 4 9 h 0000010 и это не переключается для чередования экрана, и значение $TERM xterm.Sorry я не понял о который реализация dialog и - сохраните-tite не помог. Я использую его как это dialog --keep-tite --yesno "Do you want to continue?" 0 0 –  g4ur4v 14.03.2013, 12:33
  • 2
    uname-a дает Linux indlin534 2.6.18-238.12.1.el5 #1 SMP Sat May 7 20:18:50 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux и кошка/etc/issue дает Red Hat Enterprise Linux Server release 5.6 (Tikanga) –  g4ur4v 14.03.2013, 12:39
  • 3
    Каков терминал? Это не похоже на xterm. Это работает в xterm или других терминалах? Вы используете screen или tmux в том терминале? –  Stéphane Chazelas 14.03.2013, 13:26
  • 4
    я использую mobaxterm программное обеспечение для соединения с сервером (соединение SSH). –  g4ur4v 14.03.2013, 14:29
  • 5
    , я попробовал putty без удачи. Я не думаю, что Вы правы, когда Вы говорите, что проблема с терминалом. Я протестировал tput smcup и rmcup без диалогового окна, и это хорошо работает согласно моему пониманию, что проблема вот с диалоговой реализацией. Если мой терминал не имеет альтернативного экрана, как могут я для использования vi и другие такие команды, которые требуют подобной реализации? –  g4ur4v 14.03.2013, 21:08

Проблема сложнее, чем предполагается. Начните со сценария:

tput smcup
clear
dialog --yesno "Do you want to continue?" 0 0
rc=$?
clear
tput rmcup
if [ "${rc}" == "0" ]; then
  echo Yes
else
  echo No
fi

Существует только один альтернативный экран (и вы не можете обращаться с ним как со стеком). tput smcup (технически "запустить режим адресации курсора") часто используется в xterm и его аналогах для переключения на альтернативный экран. На самом деле в xterm для этой цели реализована не одна управляющая последовательность (см. Почему экран не очищается при запуске vi?), и некоторые из них не распознаются аналогами. В одном из комментариев говорится, что MobaXterm является настоящим терминалом в данном случае. Этот терминал основан на (использует код из) PuTTY, который, как оказалось, обрабатывает код 1049 в terminfo MobaXterm.

Итак...

  • сценарий переключается на альтернативный экран
  • он очищает его (снова: xterm очищает альтернативный экран на предыдущем шаге)
  • он запускает диалог, все еще используя альтернативный экран.
  • при выходе из диалога посылается последовательность rmcup, переключающая обратно на обычный экран, содержимое которого будет таким же, как и до начала сценария
  • затем экран очищается. Обычно это приводит к перемещению курсора в верхнюю левую часть экрана и последующему очищению, но (см. ниже)
  • наконец, используется tput rmcup. Это просит эмулятор терминала переключиться обратно с альтернативного экрана.

Поскольку терминал уже находится в нормальном режиме, последняя строка может быть интерпретирована одним из (по крайней мере) двух способов:

  • она может быть проигнорирована
  • может быть выполнена часть операций, выполненных при переходе из альтернативного режима в нормальный.

В данном случае, похоже, что последнее: часть выполняется. PuTTY (и, при быстрой проверке, xterm) восстанавливают позицию курсора с первого использования tput smcup, потому что подсказка находится в середине экрана (а не вверху, где ее оставила бы clear). ОП заметил пробел, потому что в этом окне уже было выполнено несколько команд до запуска скрипта - курсор вернулся в исходное положение, но команды исчезли из-за clear перед tput rmcup.

1
27.01.2020, 21:57

Теги

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