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

menu "Editors"

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 FEATURE_AWK_MATH
	bool "Enable math functions (requires libm)"
	default y
	depends on AWK
	help
	  Enable math functions of the Awk programming language.
	  NOTE: This will require libm to be present for linking.

config ED
	bool "ed"
	default n
	help
	  The original 1970's Unix text editor, from the days of teletypes.
	  Small, simple, evil.  Part of SUSv3.  If you're not already using
	  this, you don't need it.

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

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

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 FEATURE_VI_COLON
	bool "Enable \":\" colon commands (no \"ex\" mode)"
	default y
	depends on VI
	help
	  Enable a limited set of colon commands for vi.  This does not
	  provide an "ex" mode.

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

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

config FEATURE_VI_USE_SIGNALS
	bool "Catch signals"
	default y
	depends on 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 FEATURE_VI_DOT_CMD
	bool "Remember previous cmd and \".\" cmd"
	default y
	depends on VI
	help
	  Make busybox vi remember the last command and be able to repeat it.

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

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

config FEATURE_VI_SET
	bool "Support for :set"
	default y
	depends on VI
	help
	  Support for ":set".

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

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

endmenu

