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

menu "Editors"

config CONFIG_AWK
	bool "awk"
	default n
	help
	  Awk is used as a pattern scanning and processing language.  This is
	  the BusyBox implementation of that programming language.

config CONFIG_FEATURE_AWK_MATH
	bool "  Enable math functions (requires libm)"
	default y
	depends on CONFIG_AWK
	help
	  Enable math functions of the Awk programming language.
	  NOTE: This will require libm to be present for linking.

config CONFIG_PATCH
	bool "patch"
	default n
	help
	  Apply a unified diff formatted patch.

config CONFIG_SED
	bool "sed"
	default n
	help
	  sed is used to perform text transformations on a file
	  or input from a pipeline.

config CONFIG_VI
	bool "vi"
	default n
	help
	  'vi' is a text editor.  More specifically, it is the One True
	  text editor <grin>.  It does, however, have a rather steep
	  learning curve.  If you are not already comfortable with 'vi'
	  you may wish to use something else.

config CONFIG_FEATURE_VI_COLON
	bool "  Enable \":\" colon commands (no \"ex\" mode)"
	default y
	depends on CONFIG_VI
	help
	  Enable a limited set of colon commands for vi.  This does not
	  provide an "ex" mode.

config CONFIG_FEATURE_VI_YANKMARK
	bool "  Enable yank/put commands and mark cmds"
	default y
	depends on CONFIG_VI
	help
	  This will enable you to use yank and put, as well as mark in
	  busybox vi.

config CONFIG_FEATURE_VI_SEARCH
	bool "  Enable search and replace cmds"
	default y
	depends on CONFIG_VI
	help
	  Select this if you wish to be able to do search and replace in
	  busybox vi.

config CONFIG_FEATURE_VI_USE_SIGNALS
	bool "  Catch signals"
	default y
	depends on CONFIG_VI
	help
	  Selecting this option will make busybox vi signal aware.  This will
	  make busybox vi support SIGWINCH to deal with Window Changes, catch
	  Ctrl-Z and Ctrl-C and alarms.

config CONFIG_FEATURE_VI_DOT_CMD
	bool "  Remember previous cmd and \".\" cmd"
	default y
	depends on CONFIG_VI
	help
	  Make busybox vi remember the last command and be able to repeat it.

config CONFIG_FEATURE_VI_READONLY
	bool "  Enable -R option and \"view\" mode"
	default y
	depends on CONFIG_VI
	help
	  Enable the read-only command line option, which allows the user to
	  open a file in read-only mode.

config CONFIG_FEATURE_VI_SETOPTS
	bool "  Enable set-able options, ai ic showmatch"
	default y
	depends on CONFIG_VI
	help
	  Enable the editor to set some (ai, ic, showmatch) options.

config CONFIG_FEATURE_VI_SET
	bool "  Support for :set"
	default y
	depends on CONFIG_VI
	help
	  Support for ":set".

config CONFIG_FEATURE_VI_WIN_RESIZE
	bool "  Handle window resize"
	default y
	depends on CONFIG_VI
	help
	  Make busybox vi behave nicely with terminals that get resized.

config CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
	bool "  Optimize cursor movement"
	default y
	depends on CONFIG_VI
	help
	  This will make the cursor movement faster, but requires more memory
	  and it makes the applet a tiny bit larger.

endmenu

