@@ -44,27 +44,48 @@ _muttrc()
44
44
}
45
45
46
46
# Recursively build list of sourced config files
47
- # @param $1 List of config files found so far
48
- # @param $2 Config file to process
49
- # @output List of config files
50
- _muttconffiles ()
47
+ # @param $1... Config file to process
48
+ # @var[out] ret List of config files
49
+ # @return 0 if any conffiles are generated, 1 if none is generated.
50
+ _comp_cmd_mutt__get_conffiles ()
51
51
{
52
- local file sofar
53
- local -a newconffiles
54
-
55
- sofar=" $1 "
56
- shift
57
- while [[ ${1-} ]]; do
58
- newconffiles=($( command sed -n ' s|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' " $( eval printf %s $1 ) " ) )
59
- for file in ${newconffiles+" ${newconffiles[@]} " } ; do
60
- __expand_tilde_by_ref file
61
- [[ ! -f $file || $sofar == * \ $file \ * ]] && continue
62
- sofar+=" $file "
63
- sofar=" $( eval _muttconffiles \" $sofar \" $file ) "
64
- done
65
- shift
52
+ local -a conffiles=()
53
+ local -A visited=()
54
+ local file
55
+ for file; do
56
+ _comp_dequote " $file "
57
+ _comp_cmd_mutt__get_conffiles__visit " $ret "
58
+ done
59
+ (( ${# conffiles[@]} )) || return 1
60
+ ret=(" ${conffiles[@]} " )
61
+ }
62
+ # Recursion function for _comp_cmd_mutt__get_conffiles
63
+ # @var[ref] conffiles List of config files found so far
64
+ # @var[ref] visited Dictionary of config files already visited
65
+ _comp_cmd_mutt__get_conffiles__visit ()
66
+ {
67
+ [[ -f $1 && ${visited[$1]-} != yes ]] || return 0
68
+ visited[$1 ]=yes
69
+ conffiles+=(" $1 " )
70
+
71
+ local -a newconffiles=($( command sed -n ' s|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' " $1 " ) )
72
+ (( ${# newconffiles[@]} )) || return 0
73
+
74
+ local file
75
+ for file in " ${newconffiles[@]} " ; do
76
+ __expand_tilde_by_ref file
77
+ _comp_cmd_mutt__get_conffiles__visit " $file "
66
78
done
67
- printf ' %s\n' $sofar
79
+ }
80
+
81
+ # Recursively build list of sourced config files
82
+ # @param $1... Config file to process
83
+ # @output List of config files
84
+ _muttconffiles ()
85
+ {
86
+ local ret
87
+ _comp_cmd_mutt__get_conffiles " $@ " &&
88
+ printf ' %s\n' " ${ret[@]} "
68
89
}
69
90
70
91
# @param $1 (cur) Current word to complete
@@ -76,7 +97,9 @@ _muttaliases()
76
97
muttrc=$( _muttrc)
77
98
[[ ! $muttrc ]] && return
78
99
79
- conffiles=($( eval _muttconffiles $muttrc $muttrc ) )
100
+ local ret
101
+ _comp_cmd_mutt__get_conffiles " $muttrc " || return 0
102
+ conffiles=(" ${ret[@]} " )
80
103
# shellcheck disable=SC2046
81
104
aliases=(" $( command sed -n ' s|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \
82
105
" ${conffiles[@]} " ) " )
0 commit comments