#
# 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 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 SET_CONSOLE && GETOPT_LONG
	help
	  Support long options for the setconsole applet.

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.

endmenu
