# Kconfig - Shell configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2018 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0
#

menu "Shell Options"

menuconfig SHELL
	bool "Enable shell"
	select LOG_RUNTIME_FILTERING
	select POLL

if SHELL

module = SHELL
module-str = Shell
source "subsys/logging/Kconfig.template.log_config"
source "subsys/shell/Kconfig.backends"

config SHELL_STACK_SIZE
	int "Shell thread stack size"
	default 2048 if MULTITHREADING
	default 0 if !MULTITHREADING
	help
	  Stack size for thread created for each instance.

config SHELL_BACKSPACE_MODE_DELETE
	bool "Default escape code for backspace is DELETE (0x7F)"
	default y
	help
	  Terminals have different escape code settings for backspace button.
	  Some terminals send code: 0x08 (backspace) other 0x7F (delete). When
	  this option is set shell will expect 0x7F for backspace key.

config SHELL_CMD_BUFF_SIZE
	int "Shell command buffer size"
	default 256
	help
	  Maximum command size in bytes. One byte is reserved for the string
	  terminator character.

config SHELL_PRINTF_BUFF_SIZE
	int "Shell print buffer size"
	default 30
	help
	  Maximum text buffer size for fprintf function.
	  It is working like stdio buffering in Linux systems
	  to limit number of peripheral access calls.

config SHELL_ARGC_MAX
	int "Maximum arguments in shell command"
	default 12
	help
	  Maximum number of arguments that can build a command.
	  If command is composed of more than defined, argument SHELL_ARGC_MAX
	  and following are passed as one argument in the string.

config SHELL_WILDCARD
	bool "Enable wildcard support in shell"
	select FNMATCH
	default y
	help
	  Enables using wildcards: * and ? in the shell.

config SHELL_ECHO_STATUS
	bool "Enable echo on shell"
	default y
	help
	  If enabled shell prints back every input byte.

config SHELL_VT100_COLORS
	bool "Enable colors in shell"
	default y
	help
	  If enabled VT100 colors are used in shell (e.g. print errors in red).

config SHELL_METAKEYS
	bool "Enable metakeys"
	default y
	help
	  Enables shell meta keys: Ctrl+a, Ctrl+b, Ctrl+c, Ctrl+d, Ctrl+e,
	  Ctrl+f, Ctrl+k, Ctrl+l, Ctrl+u, Ctrl+w, Alt+b, Alt+f
	  Meta keys will not be active when shell echo is set to off.

config SHELL_HELP
	bool "Enable help message"
	default y
	help
	  Enables formatting help message when requested with '-h' or '--help'.

config SHELL_HELP_ON_WRONG_ARGUMENT_COUNT
	bool "Enable printing help on wrong argument count"
	depends on SHELL_HELP
	default y

config SHELL_HISTORY
	bool "Enable history in shell"
	default y
	help
	  Enable commands history. History can be accessed using up and down
	  arrows.

if SHELL_HISTORY

config SHELL_HISTORY_BUFFER
	int "History buffer in bytes"
	default 1024
	help
	  Number of bytes dedicated for storing executed commands.

endif #SHELL_HISTORY

config SHELL_MAX_LOG_MSG_BUFFERED
	int "Maximal number of  log messages in FIFO"
	default 8
	help
	  When amount of buffered log messages exceeds this threshold oldest
	  messages are discarded.

config SHELL_STATS
	bool "Enable shell statistics"
	default y

config SHELL_CMDS
	bool "Enable built-in commands"
	default y
	help
	  Enable built-in commands like 'clear', 'history', etc.

config SHELL_CMDS_RESIZE
	bool "Enable resize command"
	depends on SHELL_CMDS
	default y
	help
	  By default shell assumes width of a terminal screen set to 80
	  characters. Each time terminal screen width is changed resize command
	  must be called to ensure correct text display on the terminal screen.
	  The resize command can be turned off to save code memory (~0,5k).

config SHELL_LOG_BACKEND
	bool
	default y if LOG
	default n if !LOG

source "subsys/shell/modules/Kconfig"

endif #SHELL
endmenu
