Hi,
From: Christian Perrier
Subject: Re: Bug#361829: Also happens for Swedish
Date: Wed, 6 Dec 2006 19:40:42 +0100
> Quoting Kobayashi Noritada ([EMAIL PROTECTED]):
> > Hi Daniel and Christian,
> >
> > > Vill du fortsätta? [J/n/?] j
> > > Ogiltigt svar. Ange ett giltigt kommando eller "?" för hjälp.
> >
> > This bug may be annoying for all of those who use aptitude with
> > languages which have localized Y/N input, as known from many
> > duplicated bug reports. Since aptitude is used by many unskilled
> > users, it would be better if we can ship unaffected versions in etch
> > either by completely fixing this bug or by temporarily changing values
> > of yes_key and no_key to y and n in po files for all languages. If
> > this bug is easy to fix, the former approach would be better;
> > otherwise the latter would be proper.
>
>
> Not perfect solution but, unless someone comes up to investigate why
> the lcoalized keys aren't working, that is maybe better.
So, I've investigated why, and found the reason.
yes_key and no_key is only used to set keybindings for the visual
interface (at vscreen_init() in src/vscreen/vscreen.cc), not for the
commandline interface. Prompt for the commandline interface is
described in src/cmdline/cmdline_prompt.cc, which has a following
function:
bool cmdline_do_prompt(bool as_upgrade,
pkgset &to_install,
pkgset &to_hold,
pkgset &to_remove,
pkgset &to_purge,
bool showvers,
bool showdeps,
bool showsize,
bool always_prompt,
int verbose,
bool assume_yes,
bool force_no_change)
{
(...snip...)
bool valid_response=false;
while(!valid_response)
{
valid_response=true;
fflush(stdout);
string response=prompt_string(_("Do you want to continue? [Y/n/?]
"));
string::size_type loc=0;
while(loc<response.size() && isspace(response[loc]))
++loc;
if(loc==response.size())
{
response='y';
loc=0;
}
switch(toupper(response[loc]))
{
case 'Y':
rval=true;
cont=true;
break;
case 'N':
rval=false;
cont=true;
break;
case 'D':
showdeps=!showdeps;
if(showdeps)
printf(_("\nDependency information will be shown.\n\n"));
else
printf(_("\nDependency information will not be
shown.\n\n"));
break;
(...snip...)
default:
printf(_("Invalid response. Please enter a valid command or
'?' for help.\n"));
valid_response=false;
break;
}
}
(...snip...)
}
This code obviously explayins the bug. :-)
I'll try to create a patch tomorrow.
(I have a little question about what happens if some languages set
such as 'd' as yes_key, but (although it is not checked) it seems
there are no languages setting characters except for 'y' and 'j' as
yes_key and characters except for 'n' as no_key, so there are no
problems now...)
Regards,
-nori