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

menu "Console Utilities"

INSERT

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

config FGCONSOLE
	bool "fgconsole"
	default y
	select PLATFORM_LINUX
	help
	  This program prints active (foreground) console number.

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

config DEALLOCVT
	bool "deallocvt"
	default y
	select PLATFORM_LINUX
	help
	  This program deallocates unused virtual consoles.

config DUMPKMAP
	bool "dumpkmap"
	default y
	select PLATFORM_LINUX
	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 y
	select PLATFORM_LINUX
	help
	  This program reports and sets keyboard mode.

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

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

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

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

config RESIZE
	bool "resize"
	default y
	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 y
	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 y
	select PLATFORM_LINUX
	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 y
	depends on SETCONSOLE && LONG_OPTS
	help
	  Support long options for the setconsole applet.

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

config FEATURE_SETFONT_TEXTUAL_MAP
	bool "Support reading textual screen maps"
	default y
	depends on SETFONT
	help
	  Support reading textual screen maps.

config DEFAULT_SETFONT_DIR
	string "Default directory for console-tools files"
	default ""
	depends on SETFONT
	help
	  Directory to use if setfont's params are simple filenames
	  (not /path/to/file or ./file). Default is "" (no default directory).

config SETKEYCODES
	bool "setkeycodes"
	default y
	select PLATFORM_LINUX
	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 y
	select PLATFORM_LINUX
	help
	  This program redirects the output console of kernel messages.

config SHOWKEY
	bool "showkey"
	default y
	select PLATFORM_LINUX
	help
	  Shows keys pressed.

comment "Common options for loadfont and setfont"
	depends on LOADFONT || SETFONT

config FEATURE_LOADFONT_PSF2
	bool "Support for PSF2 console fonts"
	default y
	depends on LOADFONT || SETFONT
	help
	  Support PSF2 console fonts.

config FEATURE_LOADFONT_RAW
	bool "Support for old (raw) console fonts"
	default y
	depends on LOADFONT || SETFONT
	help
	  Support old (raw) console fonts.

endmenu
