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

config CONFIG_FEATURE_AWK_MATH
	bool "  Enable math functions (requires libm)"
	default y
	depends on CONFIG_AWK
	help
	  Please submit a patch to add help text for this item.

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

config CONFIG_SED
	bool "sed"
	default n
	help
	  Please submit a patch to add help text for this item.

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

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

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

