#
# 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

