diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2010-06-22 11:42:38 -0700 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2010-06-22 11:42:38 -0700 |
commit | 366735512c2cb9773deba1173ee187ceabe9ceb9 (patch) | |
tree | e3d828932cbd70e1f6a836cc558764a7e47c3f35 /etc | |
parent | 6974744f9edf09358d92f5973f78340cd0d6732d (diff) | |
download | vyatta-cfg-366735512c2cb9773deba1173ee187ceabe9ceb9.tar.gz vyatta-cfg-366735512c2cb9773deba1173ee187ceabe9ceb9.zip |
add val_help mechanism
Diffstat (limited to 'etc')
-rwxr-xr-x | etc/bash_completion.d/20vyatta-cfg | 72 |
1 files changed, 62 insertions, 10 deletions
diff --git a/etc/bash_completion.d/20vyatta-cfg b/etc/bash_completion.d/20vyatta-cfg index 7a6ea5c..849a63b 100755 --- a/etc/bash_completion.d/20vyatta-cfg +++ b/etc/bash_completion.d/20vyatta-cfg @@ -650,6 +650,8 @@ declare vyatta_cfg_tag=0 declare vyatta_cfg_multi=0 declare -a vyatta_cfg_allowed=() declare vyatta_cfg_comp_help="" +declare -a vyatta_cfg_val_type=() +declare -a vyatta_cfg_val_help=() vyatta_parse_tmpl () { # $1: tmpl @@ -660,6 +662,8 @@ vyatta_parse_tmpl () vyatta_cfg_multi=0 vyatta_cfg_allowed=() vyatta_cfg_comp_help='' + vyatta_cfg_val_type=() + vyatta_cfg_val_help=() if [ ! -r $1 ]; then return fi @@ -685,6 +689,16 @@ vyatta_parse_tmpl () fi fi vyatta_cfg_comp_help=$(vyatta_parse_tmpl_comp_fields $1 "comp_help") + eval `grep '^val_help:' $1 | sed 's/^val_help:[ ]*//; + s/[ ]*;[ ]*/;/' \ + | while read line; do + if [[ "$line" == *";"* ]]; then + echo "vyatta_cfg_val_type+=( \"${line%%;*}\" )" + echo "vyatta_cfg_val_help+=( \"${line##*;}\" )" + else + echo "vyatta_cfg_val_help+=( \"$line\" )" + fi + done` if (( ${#vyatta_cfg_allowed[@]} == 0 )); then astr=$(eval "$acmd") @@ -805,6 +819,43 @@ is_setting_new_leaf () return 0 } +get_value_format_string () +{ + local vtype=$1 + case "$vtype" in + txt) + echo -n '<text>' + ;; + u32) + echo -n '<0-4294967295>' + ;; + u32:*) + echo -n "<${vtype##u32:}>" + ;; + ipv4) + echo -n '<x.x.x.x>' + ;; + ipv6) + echo -n '<h:h:h:h:h:h:h:h>' + ;; + ipv4net) + echo -n '<x.x.x.x/x>' + ;; + ipv6net) + echo -n '<h:h:h:h:h:h:h:h/x>' + ;; + bool) + echo -n '<boolean>' + ;; + macaddr) + echo -n '<h:h:h:h:h:h>' + ;; + *) + echo -n "$vtype" + ;; + esac +} + # this fills in $vyatta_help_text get_node_value_help () { @@ -822,20 +873,21 @@ get_node_value_help () else vyatta_parse_tmpl "$1/node.def" fi - if [ $is_set == 1 -a ! -z "$vyatta_cfg_type" ]; then - # add a <type> value - local val="<$vyatta_cfg_type>" - vals=( $val "${vals[@]}" ) + if (( ${#vyatta_cfg_val_type[@]} == 0 )); then + # didn't get val_type, use type (with support for multi-typed nodes) + vyatta_cfg_val_type=( ${vyatta_cfg_type//,/ } ) fi - if [ ${#vals[@]} == 0 ]; then - vyatta_help_text="" - return + if (( ${#vyatta_cfg_val_help[@]} == 0 )); then + # didn't get val_help, use help + vyatta_cfg_val_help=( "$vyatta_cfg_help" ) fi + declare -a hitems=() declare -a hstrs=() - for val in "${vals[@]}"; do - hitems[${#hitems[@]}]=$val - hstrs[${#hstrs[@]}]=$vyatta_cfg_help + for ((i = 0; i < ${#vyatta_cfg_val_type[@]}; i++)); do + local t=$(get_value_format_string "${vyatta_cfg_val_type[i]}") + hitems+=( "$t" ) + hstrs+=( "${vyatta_cfg_val_help[i]}" ) done generate_help_text hitems hstrs } |