# DO NOT EDIT. This file is generated from Config.src
#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Editors"

config PATCH
	bool "patch"
	default y
	help
	  Apply a unified diff formatted patch.
config VI
	bool "vi"
	default y
	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_MAX_LEN
	int "Maximum screen width in vi"
	range 256 16384
	default 4096
	depends on VI
	help
	  Contrary to what you may think, this is not eating much.
	  Make it smaller than 4k only if you are very limited on memory.

config FEATURE_VI_8BIT
	bool "Allow vi to display 8-bit chars (otherwise shows dots)"
	default n
	depends on VI
	help
	  If your terminal can display characters with high bit set,
	  you may want to enable this. Note: vi is not Unicode-capable.
	  If your terminal combines several 8-bit bytes into one character
	  (as in Unicode mode), this will not work properly.

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_REGEX_SEARCH
	bool "Enable regex in search and replace"
	default n   # Uses GNU regex, which may be unavailable. FIXME
	depends on FEATURE_VI_SEARCH
	help
	  Use extended regex search.

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_ASK_TERMINAL
	bool "Use 'tell me cursor position' ESC sequence to measure window"
	default y
	depends on VI
	help
	  If terminal size can't be retrieved and $LINES/$COLUMNS are not set,
	  this option makes vi perform a last-ditch effort to find it:
	  position cursor to 999,999 and ask terminal to report real
	  cursor position using "ESC [ 6 n" escape sequence, then read stdin.

	  This is not clean but helps a lot on serial lines and such.

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.

config AWK
	bool "awk"
	default y
	help
	  Awk is used as a pattern scanning and processing language. This is
	  the BusyBox implementation of that programming language.

config FEATURE_AWK_LIBM
	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 CMP
	bool "cmp"
	default y
	help
	  cmp is used to compare two files and returns the result
	  to standard output.

config DIFF
	bool "diff"
	default y
	help
	  diff compares two files or directories and outputs the
	  differences between them in a form that can be given to
	  the patch command.

config FEATURE_DIFF_LONG_OPTIONS
	bool "Enable long options"
	default y
	depends on DIFF && LONG_OPTS
	help
	  Enable use of long options.

config FEATURE_DIFF_DIR
	bool "Enable directory support"
	default y
	depends on DIFF
	help
	  This option enables support for directory and subdirectory
	  comparison.

config ED
	bool "ed"
	default y
	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 SED
	bool "sed"
	default y
	help
	  sed is used to perform text transformations on a file
	  or input from a pipeline.

config FEATURE_ALLOW_EXEC
	bool "Allow vi and awk to execute shell commands"
	default y
	depends on VI || AWK
	help
	  Enables vi and awk features which allows user to execute
	  shell commands (using system() C call).

endmenu
