panel auto_split patch
Joel Newkirk
mc-devel at newkirk.us
Tue Sep 2 06:04:01 UTC 2008
(NOT Subscribed To List)
On some platforms (such as Freerunner, with 2.8" screen) it is a common
occurrence for the screen orientation to change portrait<->landscape,
and also for size to be too small in one dimension for comfortable
visual layout. (IE, vertical_split is awkward when portrait-mode console
is <50 characters wide) Also, on most platforms it's quite reasonable
to presume that the window dimensions are subject to change, and that
those changes can quite easily involve severe limitation in one dimension.
But if you have selected 'vertical split' for example, and then change
the X*Y proportions of the window sufficiently, things can get too
cramped. So I propose 'auto_split' option - if selected by user, then
split will be automatically horizontal or vertical, depending on whether
height*2>COLS. (a somewhat arbitrary proportion I've found to work well
in my tests so far - essentially, with most fonts, if the window is
square or wider it chooses Vertical, if narrower it chooses Horizontal)
It's a simple patch (against 4.6.1), entailing a few additions and a few
alterations to layout.c, and adding 'extern int auto_split;' to layout.h
and '{ "auto_split", &auto_split },' to layout[] in setup.c. It may not
be correct, but so far it 'works for me'. (it gets quite frustrating
after a while using mc on a handheld, when switching from portrait to
landscape means you need to pull down Options->layout, change
horizontal|vertical split, & save - you don't necessarily change
orientation frequently, but mc could be invoked while in either mode,
and it would be very helpful if it were able to adapt)
The only potential bug I've seen is that numerically-specified panel
sizes get bungled if 'auto split' is selected in the Layout dialog while
'equal split' is not set. (when changing from vertical to horizontal in
the layout dialog with 'equal split' not set, it forces reversion to
50%/50%, however for an 'auto split' scenario it really isn't sensible
to talk about absolute split dimensions - but when it comes down to it,
it doesn't really make much sense to have column/row counts for manual
unequal split to begin with, when window dimensions and fonts are
subject to unpredictable changes)
j
Joel Newkirk
mc-devel at newkirk.us
78a79,81
> /* Set if the panel split horiz vs vert choice is handled
automatically based on terminal dimensions */
> int auto_split=0;
>
123a127
> static int _auto_split;
170a175
> { N_("&Auto split"), &auto_split, 0 },
183a189,196
> if (_auto_split)
> {
> _horizontal_split=0;
> if (height*2<COLS)
> {
> _horizontal_split=1;
> }
> }
217c230
< dlg_move (layout_dlg, 6, 6);
---
> dlg_move (layout_dlg, 7, 6);
219c232
< dlg_move (layout_dlg, 6, 18);
---
> dlg_move (layout_dlg, 7, 18);
295a309
> _auto_split = check_options [9].widget->state & C_BOOL;
370c384
< for (i = 0; i <= 8; i++) {
---
> for (i = 0; i <= 9; i++) {
425,426c439,440
< add_widget (layout_dlg, groupbox_new (4, 2, first_width, 6, title1));
< add_widget (layout_dlg, groupbox_new (4, 8, first_width, 4, title2));
---
> add_widget (layout_dlg, groupbox_new (4, 2, first_width, 7, title1));
> add_widget (layout_dlg, groupbox_new (4, 9, first_width, 4, title2));
467a482,483
>
>
469c485
< button_new (6, 15, B_2RIGHT, NARROW_BUTTON, "&>", b2right_cback);
---
> button_new (7, 15, B_2RIGHT, NARROW_BUTTON, "&>", b2right_cback);
472c488
< button_new (6, 9, B_2LEFT, NARROW_BUTTON, "&<", b2left_cback);
---
> button_new (7, 9, B_2LEFT, NARROW_BUTTON, "&<", b2left_cback);
474c490
< check_options[6].widget = check_new (5, 6, XTRACT (6));
---
> check_options[6].widget = check_new (6, 6, XTRACT (6));
481a498,499
> check_options[9].widget = check_new (5, 6, XTRACT (9));
> add_widget (layout_dlg, check_options[9].widget);
528a547,554
> if (auto_split)
> {
> horizontal_split=0;
> if (height*2>COLS)
> {
> horizontal_split=1;
> }
> }
More information about the mc-devel
mailing list