ENH: adjust completion parser

- restrict to text between "^[Oo]ptions:" and "-help-full" to avoid
  potential issues when more text is introduced in the usage output.
This commit is contained in:
Mark Olesen
2018-12-12 03:07:14 +01:00
parent d29388f1c5
commit a66e9c7468
3 changed files with 10 additions and 5 deletions

View File

@ -147,7 +147,8 @@ HEADER
# -hostRoots Advanced distributed run option # -hostRoots Advanced distributed run option
# -roots Advanced distributed run option # -roots Advanced distributed run option
# #
# Terminate parsing on first appearance of -help-full. # Begin parsing after first appearance of "^[Oo]ptions:"
# Terminate parsing on first appearance of "-help-full"
# - options with '=' (eg, -mode=ugo) are not handled very well at all. # - options with '=' (eg, -mode=ugo) are not handled very well at all.
# - alternatives (eg, -a, -all) are not handled nicely either, # - alternatives (eg, -a, -all) are not handled nicely either,
# for these treat ',' like a space to catch the worst of them. # for these treat ',' like a space to catch the worst of them.
@ -155,7 +156,8 @@ extractOptions()
{ {
local appName="$1" local appName="$1"
local helpText=$($appName -help-full 2>/dev/null | \ local helpText=$($appName -help-full 2>/dev/null | \
sed -ne 's/^ *//; /^$/d; /^[^-]/d; /^--/d; /^-help-man/d;' \ sed -ne '1,/^[Oo]ptions:/d' \
-e 's/^ *//; /^$/d; /^[^-]/d; /^--/d; /^-help-man/d;' \
-e '/^-hostRoots /d; /^-roots /d;' \ -e '/^-hostRoots /d; /^-roots /d;' \
-e 'y/,/ /; s/=.*$/=/;' \ -e 'y/,/ /; s/=.*$/=/;' \
-e '/^-[^ ]* </{ s/^\(-[^ ]* <\).*$/\1/; p; d }' \ -e '/^-[^ ]* </{ s/^\(-[^ ]* <\).*$/\1/; p; d }' \

View File

@ -139,14 +139,16 @@ _of_complete_()
# -opt2 <arg> descrip # -opt2 <arg> descrip
# -help-full # -help-full
# Ignore -help-man (internal option). # Ignore -help-man (internal option).
# Terminate parsing on first appearance of -help-full # Begin parsing after first appearance of "^[Oo]ptions:"
# Terminate parsing on first appearance of "-help-full"
# - options with '=' (eg, -mode=ugo) are not handled very well at all. # - options with '=' (eg, -mode=ugo) are not handled very well at all.
# - alternatives (eg, -a, -all) are not handled nicely either, # - alternatives (eg, -a, -all) are not handled nicely either,
# for these treat ',' like a space to catch the worst of them. # for these treat ',' like a space to catch the worst of them.
if [ -z "$choices" ] if [ -z "$choices" ]
then then
local helpText=$($appName -help-full 2>/dev/null | \ local helpText=$($appName -help-full 2>/dev/null | \
sed -ne 's/^ *//; /^$/d; /^[^-]/d; /^--/d; /^-help-man/d;' \ sed -ne '1,/^[Oo]ptions:/d' \
-e 's/^ *//; /^$/d; /^[^-]/d; /^--/d; /^-help-man/d;' \
-e 'y/,/ /; s/=.*$/=/;' \ -e 'y/,/ /; s/=.*$/=/;' \
-e '/^-[^ ]* </{ s/^\(-[^ ]* <\).*$/\1/; p; d }' \ -e '/^-[^ ]* </{ s/^\(-[^ ]* <\).*$/\1/; p; d }' \
-e 's/^\(-[^ ]*\).*$/\1/; p; /^-help-full/q;' \ -e 's/^\(-[^ ]*\).*$/\1/; p; /^-help-full/q;' \

View File

@ -318,8 +318,9 @@ void Foam::argList::printUsage(bool full) const
Info<< ']'; Info<< ']';
} }
} }
Info<< nl;
Info<< "\noptions:\n"; Info<< "Options:\n";
for (const word& optName : validOptions.sortedToc()) for (const word& optName : validOptions.sortedToc())
{ {