#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Console Utilities"

config CHVT
	bool "chvt"
	default n
	help
	  This program is used to change to another terminal.
	  Example: chvt 4 (change to terminal /dev/tty4)

config CLEAR
	bool "clear"
	default n
	help
	  This program clears the terminal screen.

config DEALLOCVT
	bool "deallocvt"
	default n
	help
	  This program deallocates unused virtual consoles.

config DUMPKMAP
	bool "dumpkmap"
	default n
	help
	  This program dumps the kernel's keyboard translation table to
	  stdout, in binary format. You can then use loadkmap to load it.

config KBD_MODE
	bool "kbd_mode"
	default n
	help
	  This program reports and sets keyboard mode.

config LOADFONT
	bool "loadfont"
	default n
	help
	  This program loads a console font from standard input.

config LOADKMAP
	bool "loadkmap"
	default n
	help
	  This program loads a keyboard translation table from
	  standard input.

config OPENVT
	bool "openvt"
	default n
	help
	  This program is used to start a command on an unused
	  virtual terminal.

config RESET
	bool "reset"
	default n
	help
	  This program is used to reset the terminal screen, if it
	  gets messed up.

config RESIZE
	bool "resize"
	default n
	help
	  This program is used to (re)set the width and height of your current
	  terminal.

config FEATURE_RESIZE_PRINT
	bool "Print environment variables"
	default n
	depends on RESIZE
	help
	  Prints the newly set size (number of columns and rows) of
	  the terminal.
	  E.g.:
	  COLUMNS=80;LINES=44;export COLUMNS LINES;

config SETCONSOLE
	bool "setconsole"
	default n
	help
	  This program redirects the system console to another device,
	  like the current tty while logged in via telnet.

config FEATURE_SETCONSOLE_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on SETCONSOLE && GETOPT_LONG
	help
	  Support long options for the setconsole applet.

config SETFONT
	bool "setfont"
	default n
	help
	  Allows to load console screen map. Useful for i18n.

config SETKEYCODES
	bool "setkeycodes"
	default n
	help
	  This program loads entries into the kernel's scancode-to-keycode
	  map, allowing unusual keyboards to generate usable keycodes.

config SETLOGCONS
	bool "setlogcons"
	default n
	help
	  This program redirects the output console of kernel messages.

config SHOWKEY
	bool "showkey"
	default n
	help
	  Shows keys pressed.

endmenu
