Re: bsdinstall TUI utility

From: Devin Teske <dteske_at_freebsd.org>
Date: Sat, 28 May 2022 23:02:51 UTC

> On May 28, 2022, at 2:59 PM, Alfonso S. Siciliano <alfix86@gmail.com> wrote:
> 
> Hello,
> 
> 
> So far I replaced and adapted `dialog` with `bsddialog` in
> bsdinstall/scripts.
> <https://wiki.freebsd.org/RoadmapFromDialogToBSDDialog>
> 
> 
> Currently, I am addressing the last 4 scripts: auto, bootconfig, keymap,
> and wlanconfig. These scripts use also the $DIALOG variable and some
> "if" to handle Xdialog(1).
> For example 'auto' uses $DIALOG, $USE_XDIALOG, and `dialog`.
> 

Can we simply add USE_GNU_DIALOG and switch USE_DIALOG to mean bsddialog?


> * $DIALOG: I seem bsdinstall(8) uses only dialog(1) as TUI utility.

bsdinstall(8) uses only dialog(1) in the context of $DIALOG

ASIDE: It also uses dialog(3) and dpv(3)/dpv(1)


> * I seem bsdconfig(8) does not "call" these 4 scripts, so, probably,
>  Xdialog(1) is not used in this context (that is `bsdconfig -X`).
> 

Correct, bsdconfig does use bsdinstall


> Is there any objection to delete $DIALOG/LGPL-dialog/Xdialog to
> provide only the support for bsddialog(1) in bsdinstall(8)?
> 

I object.

I and another developer are adding support for zenity

https://github.com/FrauBSD/pkgcenter/tree/bsdconfig/zenity/depend/bsdconfig <https://github.com/FrauBSD/pkgcenter/tree/bsdconfig/zenity/depend/bsdconfig>

There is also work to resolve the namespace issues in bsdinstall

https://github.com/FrauBSD/pkgcenter/tree/bsdinstall/namespace/depend/bsdconfig <https://github.com/FrauBSD/pkgcenter/tree/bsdinstall/namespace/depend/bsdconfig>

I am in favor of keeping $DIALOG/LGPL-dialog/Xdialog support where it exists until those efforts can be completed.

ASIDE: bsdinstall doesn’t use Xdialog


> I would prefer this solution because I can avoid: to handle some
> dialog/Xdialog/bsddialog command line difference and to hook some
> bsdconfig function built on dialog(1) incompatible with bsddialog(1)
> (for example autosizing, implemented in bsddialog(3) already).
> 

The differences in command line should be handled through conditionals, but can be the default and opt to handle LGPL-dialog through a USE_GNU_DIALOG flag

bsddialog may support auto-sizing, but so does dialog and Xdialog.

However, ...

The sizing code in bsdconfig (used indirectly by bsdinstall) was written because the auto-sizing that does exist and is available in both dialog and Xdialog (as well as Zenity) does not provide a cohesive experience when trying to write a program that is in-reality a series of bespoke dialogs.

The sizing code makes sure that regardless of which utility you are using that the experience is uniform in what is presented to the user.

Attempting to rely solely on the auto-sizing available from these separate utilities (including bsddialog) would change the UI/UX.

The problem was solved by:

1. Making the stored text used for dialogs dictate how it will look
2. Painstakingly determining where each utility failed given the text
3. Determining how to make the utility display the text properly

For example, stored text will contain newlines instead of attempting to rely on line wrapping on a box of given size.

I would have to evaluate bsddialog’s auto-sizing to determine if it is trust-worthy given not only all the stored texts, but all the translations as well (as bsdconfig is i18n compatible). It is actually less work to just allow bsdconfig to likely treat bsddialog as it is dialog and let it perform the size calculations for you.

If bsddialog is top be a drop-in replacement, I’m more than a little surprised that it cannot accept the sizes calculated for dialog being passed to it.


> 
> Please note these considerations are only for bsdinstall, bsdconfig is
> unchanged.
> 

What of dpv? bsdinstall uses dpv(3) to unpack the dists which in-turn relies on dlg_gauge_reallocate(3) from LGPL-dialog?
— 
Devin