#
# 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
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_YANKMARK
	bool "  Enable yank/put commands and mark cmds"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_SEARCH
	bool "  Enable search and replace cmds"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_USE_SIGNALS
	bool "  Catch signals"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_DOT_CMD
	bool "  Remember previous cmd and \".\" cmd"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

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
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_SET
	bool "  Support for :set"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_WIN_RESIZE
	bool "  Handle window resize"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_VI_OPTIMIZE_CURSOR
	bool "  Optimize cursor movement"
	default y
	depends on CONFIG_VI
	help
	  Please submit a patch to add help text for this item.

endmenu

