#
# 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 formated 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_FEATURE_SED_EMBEDED_NEWLINE
	bool " Embeded newline (EXPERIMENTAL)"
	default n
	depends on CONFIG_SED
	help
	  This is a hack to allow matching of '\n' in regular expressions.
	  It works by translating '\n' to "\n" and back.
	  It may introduce unexpected results if you use "\n" in your text.

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

