Re: Temporarily change completion options

2008-03-19 Thread Mika Fischer
* Chet Ramey <[EMAIL PROTECTED]> [2008-03-18 00:22]:
>> I'd like to know if it is possible to change the options of the
>> programable completion within the completion function.
>
> Not currently.  I'm thinking about a new builtin that would accept the
> same set of -o options as complete/compgen (and probably +o to turn
> them off, as with the `set' builtin).

Yes, something like this would be very useful for the programable
completion.

But in the meantime can you describe what exactly these options do?

My understanding is this:
nospace: No not append a space after a completion even if it's the only
one.
filenames: Quote shell meta-characters and append a / if the sole
completion is a directory
dirnames: Has no effect if the compspec generates no matches?

So probably at least filenames could be emulated by the completion
function, right?

Regards,
 Mika




getopts confuses lower and upper case options

2008-03-19 Thread [EMAIL PROTECTED]
Configuration Information [Automatically generated, do not change]:
Machine: mips
OS: irix6.5
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='mips' 
-DCONF_OSTYPE='irix6.5' -DCONF_MACHTYPE='mips-sgi-irix6.5' -DCONF_VENDOR='sgi' 
-DLOCALEDIR='/opt/local/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H  
 -I.  -I. -I./include -I./lib -I./lib/intl 
-I/usr/people/panjkova/projects/bash/build/lib/intl  -mabi=64 -mips4 -O2
uname output: IRIX64 pot 6.5 07010238 IP27
Machine Type: mips-sgi-irix6.5

Bash Version: 3.2
Patch Level: 0
Release Status: release

Description:

scripterror (source below) is a function that 
  puts the argument of option m in variable 'message'
  puts the argument of option M in variable `testText'

but as you can see, if i supply both options, the argument for -M has gone into 
the argument for -m instead:

# -bash 37 > scripterror -m messagetext -M testtext
testItem=
message=testtext
Warning: in -bash: testtext

Also, if I supply only option -M, its argument again gets treated as if it is 
the argument of -m:

# -bash 38 > scripterror -M testtext
testItem=
message=testtext
Warning: in -bash: testtext


Note however that if I only list one of -m or -M in the getopts list, they are 
handled with case sensitivity. (I.e., 
-m can't be used for -M)

Repeat-By:
==

load the function scripterror below, then issue  the test commands above to 
demonstrate the problem.
Look at the value of the variables message and testItem.

scripterror() { 
#--#
# Subversion keywords:
# $LastChangedDate: 2008-03-19 14:29:18 +1000 (Wed, 19 Mar 2008) $
# $LastChangedRevision$
# $LastChangedBy: panjkova $
# $HeadURL: 
svn://starship/CINRS/aussiegrass/users/panjkova/bin/bash_functions/scripterror $
#--#
local verbosityRestoreCmd=$(localVerbositySave)
set +x ; set +v
local ThisFun=scripterror
trap "eval $verbosityRestoreCmd" RETURN
trap "echo Trapped an unforeseen error in scripterror with args " ERR
usage="Usage: scripterror -m message -l location -s severity -e 
returnstatus -A emailTo \n
   \t -m error message\n
   \t -l string describing error location (e.g. script name, section, 
etc.)\n
   \t -s severity : fatal - exit, warning - keep processing script\n
   \t -A email address : if given, then message sent to that address as 
well\n
   \t -e return status from last command, usually $? "

#defaults#
local message="Unspecified error"
local location="$0"
local severity="Warning: "
local emailTo=""
local badoption=""
local returnstatus=""

## Save the getops variables before sweeping the CLAs. ##
local opt
local saveOPTARG=${OPTARG:-""}
local saveOPTIND=${OPTIND:-1}
OPTIND=1


while getopts ":e:m:l:s:A:M:" opt ; do
case $opt in
e ) returnstatus=$OPTARG ;;
m ) message=$OPTARG ;;
l ) location=$OPTARG ;;
s ) severity=$OPTARG ;;
M ) testItem=$OPTARG ;;
A ) emailTo=$OPTARG ;;
\: ) echo "Argument missing from -$OPTARG option in function 
scripterror" ;;
\? ) eval badoption=\$$((OPTIND - 1)) ;;
esac 
done
shift $((OPTIND - 1 )) #--# Pushes the processed option/args out, leaving 
only unprocessed CLAs. #--#

## Restore the getopts arguments. ##
OPTARG=$saveOPTARG
OPTIND=$saveOPTIND

echo testItem=$testItem
echo message=$message

#--subsequent args are ignored--#

## Assemble the full message. ##
local fullMessage="$severity in $location: $message"

if [ ! -z "$returnstatus" ] ; then
fullMessage=$fullMessage":  Return status from last command was: 
$returnstatus"
fi

if [ ! -z "$badoption" ] ; then
fullMessage=$fullMessage": Bad option to scripterror ($badoption) 
ignored."
echo -e $usage >&2
fi

## Output to stderr, and mail. ##
echo $fullMessage >&2

if [ ! -z "$emailTo" ] ; then
echo $fullMessage | mailx -s "$fullMessage" $emailTo
fi

if [ "$severity" = "FATAL" -o "$severity" = "fatal" ] ; then
echo "Exiting!" >&2
exit $returnstatus 
else
return 0
fi
}




The information in this email together with any attachments is
intended only for the person or entity to which it is addressed
and may contain confidential and/or privileged material.
Any form of review, disclosure, modification, distribution
and/or publication of this email message is prohibited, unless
as a necessary part of Departmental business.
If you have received this message in error, you are asked to
inform the sender as quickly as possible and delete this message
and any copies of this message from you