Linux диалог Команда - отличный инструмент для создания диалоговых окон в окнах терминала (например, в сценарии bash).
Однако есть недостаток диалог то есть окно всегда располагается в центре экрана.
В частности, я хотел бы использовать функцию хвостового отсека, например
dialog --tailboxbg MYFILE 20 20
... который отображает хвост файла в текстовом диалоговом окне (как и встроенная команда tail).
Однако я бы хотел разместить получившееся окно в разных местах экрана. например только в верхней или нижней половине. диалог не предоставляет такой функциональности.
Есть ли способ переместить окна, предоставленные диалог или кто-нибудь может порекомендовать альтернативный инструмент, который на это способен?
Диалог можно разместить где угодно, используя диалогс --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.