all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Gabriel Goller <g.goller@proxmox.com>
To: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>,
	"Proxmox Backup Server development discussion"
	<pbs-devel@lists.proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox v3] router: cli: added `ask_for_confirmation` helper
Date: Wed, 27 Sep 2023 16:45:37 +0200	[thread overview]
Message-ID: <9059a6a9-8bb1-bd72-1eb5-c9e939a0e6ef@proxmox.com> (raw)
In-Reply-To: <1695810472.h674oam6kl.astroid@yuna.none>


On 9/27/23 12:48, Fabian Grünbichler wrote:
> On September 27, 2023 12:13 pm, Wolfgang Bumiller wrote:
>> On Fri, Sep 08, 2023 at 01:44:09PM +0200, Gabriel Goller wrote:
>>> Added `ask_for_confirmation` helper that outputs a prompt and
>>> lets the user confirm or deny it. Also added localization using
>>> `libc::nl_langinfo()` to match/show a `yes` or `no` in the correct
>>> language.
>>> Implemented to close #4763.
>>>
>>> Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
>>> ---
>>>
>>> update v3:
>>>   - added localization using `libc::nl_langinfo`
>>>
>>> note: skipped to version 3, so that the whole patch series has
>>>        the same version number.
>>>
>> [..]
>>> +    use std::ffi::CStr;
>>> +    let yes_expr = unsafe { CStr::from_ptr(libc::nl_langinfo(libc::YESEXPR)) }
>>> +        .to_str()
>>> +        .unwrap_or("^[yY]$");
>>> +    let no_expr = unsafe { CStr::from_ptr(libc::nl_langinfo(libc::NOEXPR)) }
>>> +        .to_str()
>>> +        .unwrap_or("^[nN]$");
>>> +
>>> +    let n = no_expr.chars().find(|c| c.is_uppercase()).unwrap_or('N');
>>> +    let y = yes_expr.chars().find(|c| c.is_uppercase()).unwrap_or('Y');
>>> +    print!("{query} [{y}/{n}]: ");
>> Usually, the uppercase letter is used for the default for when typing
>> nothing, while the other one is lowercase.
>>
>> Now I was also wondering what we should do if no upper/lowercase letter
>> exists, but then again, it seems yY and nN are pretty much always
>> included. I checked at least de_DE, ja_JP and zh_CN next to en_US, and
>> I'm fairly certain we can rely on that, since I'm assuming this is
>> exactly what `rpmatch(3)` does, which explicitly states that `y` and `n`
>> work regardless of locale.
> there definitely are locales that either don't include 'y' and/or 'n',
> or do so in a misleading manner.
>
> one example:
>
> $ LC_MESSAGES=sw_KE.UTF-8 locale yesexpr
> ^[+1nNyY]
>
> $ LC_MESSAGES=sw_KE.UTF-8 locale noexpr
> ^[-0hHlL]
>
> this is also the case for nl_langinfo, at least if the code in question
> actually calls setlocale/uselocale at some point, which we don't do I
> think?
oh, yeah right, we never called it. I can add this lines before using 
`nl_langinfo`:
```
unsafe { libc::setlocale(libc::LC_ALL, empty_cstring.as_ptr()) };
```
this uses the environment locale on the system [0].
> in any case, I am not sure whether localizing just the prompt answers
> makes much sense, if we don't localize log messages/CLI output/.. in
> general?

Hmm, it *could* be useful for inputs though, especially those that
need to be matched. Think of keyboards in different languages.

[0]: 
https://www.gnu.org/software/libc/manual/html_node/Setting-the-Locale.html





  reply	other threads:[~2023-09-27 14:45 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-08 11:44 [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group Gabriel Goller
2023-09-08 11:44 ` [pbs-devel] [PATCH proxmox v3] router: cli: added `ask_for_confirmation` helper Gabriel Goller
2023-09-27 10:13   ` Wolfgang Bumiller
2023-09-27 10:48     ` Fabian Grünbichler
2023-09-27 14:45       ` Gabriel Goller [this message]
2023-12-07 12:51 ` [pbs-devel] [PATCH proxmox-backup v3] close #4763: client: added command to forget backup group Gabriel Goller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9059a6a9-8bb1-bd72-1eb5-c9e939a0e6ef@proxmox.com \
    --to=g.goller@proxmox.com \
    --cc=f.gruenbichler@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal