Какая программа с открытым исходным кодом похожа на команду Linux "dialog"?

Команда linux dialog - отличный инструмент для создания диалоговых окон в окнах терминала (например, в скрипте bash).

Однако у диалога есть недостаток, который заключается в том, что окно всегда располагается в центре экрана.

В частности, я хотел бы использовать функцию хвостовой части, например,

dialog --tailboxbg MYFILE 20 20

... который отображает хвост файла внутри текстового диалога (так же, как встроенная команда tail).

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

Есть ли способ переместить окна, предоставляемые диалогом, или кто-то может порекомендовать альтернативный инструмент, способный на это?

2 ответа

Решение

Можно расположить диалог где угодно, используя диалоги--begin переключатель ( http://linux.die.net/man/1/dialog). Однако для создания диалогов динамического размера, которые работают независимо от размера окна вашего терминала, вам необходимо получить доступ к размерам окна терминала, используя tput, Затем вы можете сделать следующее в вашем скрипте bash:

x=$(tput cols)
y=$(tput lines)
bx=10 # some offset
by=10 # how far down the window should be displayed
padbottom=2
# centered on width                                                     
dwidth=$(($x - $((bx * 2))))
# leave some padding at the bottom
dheight=$(($y - $((by + $padbottom))))
dialog --begin $by $bx --tailbox MY_FILE $dheight $dwidth

Результат: горизонтально центрированное диалоговое окно в нижней половине окна терминала.

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

Есть только так много, что вы можете сделать с Bash.

Однако для программ TUI вы можете делать практически все, что вам нужно, с помощью ncurses. https://www.gnu.org/software/ncurses/ncurses.html

Существуют оболочки над функциями C, предоставляемыми curses; если вы уже знакомы с программированием curses в C.

Другие вопросы по тегам