# -*- shell-script -*- # help.sh - Debugger Help Routines # # Copyright (C) 2002-2008, 2010-2012, 2016 # Rocky Bernstein # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place, Suite 330, Boston, # MA 02111 USA. # A place to put help command text typeset -A _Dbg_command_help export _Dbg_command_help typeset -a _Dbg_command_names_sorted=() # List of debugger commands. # FIXME: for now we are attaching this to _Dbg_help_add which # is whe this is here. After moving somewhere more appropriate, relocate # the definition. typeset -A _Dbg_debugger_commands # Add help text $2 for command $1 function _Dbg_help_add { (($# < 2)) || (($# > 4)) && return 1 typeset -i add_command; add_command=${3:-1} _Dbg_command_help[$1]="$2" (( add_command )) && _Dbg_debugger_commands[$1]="_Dbg_do_$1" if (($# == 4)); then complete -F "$4" "$1" fi return 0 } # Add help text $3 for in subcommand $1 under key $2 function _Dbg_help_add_sub { add_command=${4:-1} (($# != 3)) && (($# != 4)) && return 1 eval "_Dbg_command_help_$1[$2]=\"$3\"" if (( add_command )) ; then eval "_Dbg_debugger_${1}_commands[$2]=\"_Dbg_do_${1}_${2}\"" fi return 0 } _Dbg_help_sort_command_names() { ((${#_Dbg_command_names_sorted} > 0 )) && return 0 typeset -a list list=("${!_Dbg_command_help[@]}") sort_list 0 ${#list[@]}-1 _Dbg_sorted_command_names=("${list[@]}") } _Dbg_help_set() { typeset subcmd if (( $# == 0 )) ; then typeset -a list list=("${!_Dbg_command_help_set[@]}") sort_list 0 ${#list[@]}-1 for subcmd in ${list[@]}; do _Dbg_help_set $subcmd 1 done return 0 fi subcmd="$1" typeset label="$2" if [[ -n "${_Dbg_command_help_set[$subcmd]}" ]] ; then if [[ -z $label ]] ; then _Dbg_msg_rst "${_Dbg_command_help_set[$subcmd]}" return 0 else label=$(builtin printf "set %-12s-- " $subcmd) fi fi case $subcmd in ar | arg | args ) _Dbg_msg \ "${label}Set argument list to give program when restarted." return 0 ;; an | ann | anno | annot | annota | annotat | annotate ) if [[ -z $label ]] ; then typeset post_label=' 0 == normal; 1 == fullname (for use when running under emacs).' fi _Dbg_msg \ "${label}Set annotation level.$post_label" return 0 ;; autoe | autoev | autoeva | autoeval ) _Dbg_help_set_onoff 'autoeval' 'autoeval' \ "Evaluate unrecognized commands" return 0 ;; autol | autoli | autolis | autolist ) typeset onoff="on." [[ -z ${_Dbg_cmdloop_hooks['list']} ]] && onoff='off.' _Dbg_msg \ "${label}Run list command is ${onoff}" return 0 ;; b | ba | bas | base | basen | basena | basenam | basename ) _Dbg_help_set_onoff 'basename' 'basename' \ "Set short filenames (the basename) in debug output" return 0 ;; de|deb|debu|debug ) _Dbg_help_set_onoff 'debug' 'debug' \ "Set debugging the debugger" return 0 ;; di|dif|diff|diffe|differe|differen|different ) typeset onoff=${1:-'on'} (( _Dbg_set_different )) && onoff='on.' _Dbg_msg \ "${label}Set to stop at a different line is" $onoff return 0 ;; do|doll|dolla|dollar|dollar0 ) _Dbg_msg "${label}Set \$0" return 0 ;; e | ed | edi | edit | editi | editin | editing ) _Dbg_msg_nocr \ "${label}Set editing of command lines as they are typed is " if [[ -z $_Dbg_edit ]] ; then _Dbg_msg 'off.' else _Dbg_msg 'on.' fi return 0 ;; high | highl | highlight ) _Dbg_msg_nocr \ "${label}Set syntax highlighting of source listings is " if [[ -z $_Dbg_edit ]] ; then _Dbg_msg 'off.' else _Dbg_msg 'on.' fi return 0 ;; his | hist | history ) _Dbg_msg_nocr \ "${label}Set record command history is " if [[ -z $_Dbg_set_edit ]] ; then _Dbg_msg 'off.' else _Dbg_msg 'on.' fi ;; si | siz | size ) eval "$_seteglob" if [[ -z $2 ]] ; then _Dbg_errmsg "Argument required (integer to set it to.)." elif [[ $2 != $int_pat ]] ; then _Dbg_errmsg "Integer argument expected; got: $2" eval "$_resteglob" return 1 fi eval "$_resteglob" _Dbg_write_journal_eval "_Dbg_history_length=$2" return 0 ;; lin | line | linet | linetr | linetra | linetrac | linetrace ) typeset onoff='off.' (( _Dbg_set_linetrace )) && onoff='on.' _Dbg_msg \ "${label}Set tracing execution of lines before executed is" $onoff if (( _Dbg_set_linetrace )) ; then _Dbg_msg \ "set linetrace delay -- delay before executing a line is" $_Dbg_set_linetrace_delay fi return 0 ;; lis | list | lists | listsi | listsiz | listsize ) _Dbg_msg \ "${label}Set number of source lines $_Dbg_debugger_name will list by default." ;; p | pr | pro | prom | promp | prompt ) _Dbg_msg \ "${label}${_Dbg_debugger_name}'s prompt is:\n" \ " \"$_Dbg_prompt_str\"." return 0 ;; sho|show|showc|showco|showcom|showcomm|showcomma|showcomman|showcommand ) _Dbg_msg \ "${label}Set showing the command to execute is $_Dbg_set_show_command." return 0 ;; sty | style ) [[ -n $label ]] && label='set style -- ' _Dbg_msg_nocr \ "${label}Set pygments highlighting style is " if [[ -z $_Dbg_set_style ]] ; then _Dbg_msg 'off.' else _Dbg_msg "${_Dbg_set_style}" fi ;; t|tr|tra|trac|trace|trace-|tracec|trace-co|trace-com|trace-comm|trace-comma|trace-comman|trace-command|trace-commands ) _Dbg_msg \ "${label}Set showing debugger commands is $_Dbg_set_trace_commands." return 0 ;; tt|tty ) typeset dbg_tty=$_Dbg_tty [[ -n $dbg_tty ]] && dbg_tty=$(tty) _Dbg_msg \ "${label}Debugger output goes to $dbg_tty." return 0 ;; wi|wid|widt|width ) _Dbg_msg \ "${label}Set maximum width of lines is $_Dbg_set_linewidth." return 0 ;; * ) _Dbg_errmsg \ "There is no \"set $subcmd\" command." esac } _Dbg_help_show() { if (( $# == 0 )) ; then typeset -a list list=("${!_Dbg_command_help_show[@]}") sort_list 0 ${#list[@]}-1 typeset subcmd for subcmd in ${list[@]}; do [[ $subcmd != 'version' ]] && _Dbg_help_show $subcmd 1 done return 0 fi typeset subcmd=$1 typeset label="$2" if [[ -n "${_Dbg_command_help_show[$subcmd]}" ]] ; then if [[ -z $label ]] ; then _Dbg_msg_rst "${_Dbg_command_help_show[$subcmd]}" return 0 else label=$(builtin printf "show %-12s-- " $subcmd) fi fi case $subcmd in al | ali | alia | alias | aliase | aliases ) _Dbg_msg \ "${label}Show list of aliases currently in effect." return 0 ;; ar | arg | args ) _Dbg_msg \ "${label}Show argument list to give program on restart." return 0 ;; an | ann | anno | annot | annota | annotat | annotate ) _Dbg_msg \ "${label}Show annotation_level" return 0 ;; autoe | autoev | autoeva | autoeval ) _Dbg_msg \ "${label}Show if we evaluate unrecognized commands." return 0 ;; autol | autoli | autolis | autolist ) _Dbg_msg \ "${label}Run list before command loop?" return 0 ;; b | ba | bas | base | basen | basena | basenam | basename ) _Dbg_msg \ "${label}Show if we are are to show short or long filenames." return 0 ;; com | comm | comma | comman | command | commands ) _Dbg_msg \ "${label}commands [+|n] -- Show the history of commands you typed. You can supply a command number to start with, or a + to start after the previous command number shown. A negative number indicates the number of lines to list." ;; cop | copy| copyi | copyin | copying ) _Dbg_msg \ "${label}Conditions for redistributing copies of debugger." ;; d|de|deb|debu|debug) _Dbg_msg \ "${label}Show if we are set to debug the debugger." return 0 ;; different | force) _Dbg_msg \ "${label}Show if debugger stops at a different line." return 0 ;; dir|dire|direc|direct|directo|director|directori|directorie|directories) _Dbg_msg \ "${label}Show file directories searched for listing source." ;; editing ) _Dbg_msg \ "${label}Show editing of command lines and edit style." ;; highlight ) _Dbg_msg \ "${label}Show if we syntax highlight source listings." return 0 ;; history ) _Dbg_msg \ "${label}Show if we are recording command history." return 0 ;; lin | line | linet | linetr | linetra | linetrac | linetrace ) _Dbg_msg \ "${label}Show whether to trace lines before execution." ;; lis | list | lists | listsi | listsiz | listsize ) _Dbg_msg \ "${label}Show number of source lines debugger will list by default." ;; p | pr | pro | prom | promp | prompt ) _Dbg_msg \ "${label}Show debugger prompt." return 0 ;; sty | style ) _Dbg_msg \ "show style -- Show pygments style in source-code listings." ;; t|tr|tra|trac|trace|trace-|trace-c|trace-co|trace-com|trace-comm|trace-comma|trace-comman|trace-command|trace-commands ) _Dbg_msg \ 'show trace-commands -- Show if we are echoing debugger commands.' return 0 ;; tt | tty ) _Dbg_msg \ "${label}Where debugger output goes to." return 0 ;; wa | war | warr | warra | warran | warrant | warranty ) _Dbg_msg \ "${label}Various kinds of warranty you do not have." return 0 ;; width ) _Dbg_msg \ "${label}maximum width of a line." return 0 ;; * ) _Dbg_msg \ "Undefined show command: \"$subcmd\". Try \"help show\"." esac }