User Tools

Site Tools


other:dialog_terminal_tui

This is an old revision of the document!


Dialog - Terminal Menu Creator

Dialog is a script-driven menu and text interface generation tool. For example, it has file pickers, menus, checklists, confirmations, calendars, progress bars, etc.

The official documentation and downloads are at https://invisible-island.net/dialog/#documentation.

Install

In Debian and most Linux distributions it's as simple as using the package manager to install:

apt install dialog
dialog --version
dialog --help

If you want to build from source, simply download, configure, and make:

wget ftp://ftp.invisible-island.net/dialog/dialog.tar.gz
tar xzf dialog.tar.gz
cd dialog-1.3-20210324 # Or whatever it is
./configure --help | less # Check options
./configure
make
./dialog --version
./dialog --help
make install  # optional

Example usage

Here is an example of a menu with a list of choices:

# Generate a menu
dialog --menu "Open mail" 20 40 10 \
 "Account 1" "~/.muttrc.1" "Account 2" "~/.muttrc.2" \
 2>answer.txt
# answer.txt will contain 'Account 1' or 'Account 2'

Here is another example that shows how to get output a different way. The answer comes from StackOverflow Question 491509 there is an example of how to grab the output. It creates a stream on unused descriptor 3 and then STDERR(2) is redirected to STDOUT(1), then STDOUT is redirected to the newly created stream 3.

# https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable
exec 3>&1    # Create stream for current shell
result=$(dialog --inputbox test 0 0 2>&1 1>&3)
exitcode=$?  # Success exit code = 0
exec 3>&-    # Close the temp stream
echo $result $exitcode

Available options

Below you will find a list of all the options and menus available.

$ dialog --help

cdialog (ComeOn Dialog!) version 1.2-20130523
Copyright 2000-2012,2013 Thomas E. Dickey
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

* Display dialog boxes from shell scripts *

Usage: dialog <options> { --and-widget <options> }
where options are "common" options, followed by "box" options

Special options:
  [--create-rc "file"]
Common options:
  [--ascii-lines] [--aspect <ratio>] [--backtitle <backtitle>] [--beep]
  [--beep-after] [--begin <y> <x>] [--cancel-label <str>] [--clear]
  [--colors] [--column-separator <str>] [--cr-wrap] [--date-format <str>]
  [--default-button <str>] [--default-item <str>] [--defaultno]
  [--exit-label <str>] [--extra-button] [--extra-label <str>]
  [--help-button] [--help-label <str>] [--help-status] [--hfile <str>]
  [--hline <str>] [--ignore] [--input-fd <fd>] [--insecure] [--item-help]
  [--keep-tite] [--keep-window] [--last-key] [--max-input <n>]
  [--no-cancel] [--no-collapse] [--no-cr-wrap] [--no-items] [--no-kill]
  [--no-label <str>] [--no-lines] [--no-mouse] [--no-nl-expand]
  [--no-ok] [--no-shadow] [--no-tags] [--nook] [--ok-label <str>]
  [--output-fd <fd>] [--output-separator <str>] [--print-maxsize]
  [--print-size] [--print-version] [--quoted] [--scrollbar]
  [--separate-output] [--separate-widget <str>] [--shadow]
  [--single-quoted] [--size-err] [--sleep <secs>] [--stderr] [--stdout]
  [--tab-correct] [--tab-len <n>] [--time-format <str>] [--timeout <secs>]
  [--title <title>] [--trace <file>] [--trim] [--version] [--visit-items]
  [--yes-label <str>]
Box options:
  --buildlist    <text> <height> <width> <tag1> <item1> <status1>...
  --calendar     <text> <height> <width> <day> <month> <year>
  --checklist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --dselect      <directory> <height> <width>
  --editbox      <file> <height> <width>
  --form         <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --fselect      <filepath> <height> <width>
  --gauge        <text> <height> <width> [<percent>]
  --infobox      <text> <height> <width>
  --inputbox     <text> <height> <width> [<init>]
  --inputmenu    <text> <height> <width> <menu height> <tag1> <item1>...
  --menu         <text> <height> <width> <menu height> <tag1> <item1>...
  --mixedform    <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1> <itype>...
  --mixedgauge   <text> <height> <width> <percent> <tag1> <item1>...
  --msgbox       <text> <height> <width>
  --passwordbox  <text> <height> <width> [<init>]
  --passwordform <text> <height> <width> <form height> <label1> <l_y1> <l_x1> <item1> <i_y1> <i_x1> <flen1> <ilen1>...
  --pause        <text> <height> <width> <seconds>
  --prgbox       <text> <command> <height> <width>
  --programbox   <text> <height> <width>
  --progressbox  <text> <height> <width>
  --radiolist    <text> <height> <width> <list height> <tag1> <item1> <status1>...
  --rangebox     <text> <height> <width> <min-value> <max-value> <default-value>
  --tailbox      <file> <height> <width>
  --tailboxbg    <file> <height> <width>
  --textbox      <file> <height> <width>
  --timebox      <text> <height> <width> <hour> <minute> <second>
  --treeview     <text> <height> <width> <list-height> <tag1> <item1> <status1> <depth1>...
  --yesno        <text> <height> <width>

Auto-size with height and width = 0. Maximize with height and width = -1.
Global-auto-size if also menu_height/list_height = 0.
other/dialog_terminal_tui.1617676748.txt.gz · Last modified: 2021/04/06 02:39 by nanodano