[RFE][PATCH] Display free space on device in panels

Jindrich Novy jnovy at redhat.com
Wed May 31 13:56:33 UTC 2006


Hi Pavel,

On Tue, 2006-05-30 at 14:56 +0300, Pavel Tsekov wrote: 
> On Mon, 29 May 2006, Jindrich Novy wrote:
> 
> > On Fri, 2006-05-19 at 14:29 -0400, Pavel Roskin wrote:
> >> Can we avoid any highlighting?  I think Far Manager does it right:
> >> http://red-bean.com/proski/mc/far.png
> >
> > Attaching the patch without highlighting. The main changes are that I
> > moved the show_free_space() into main.c since screen.c lacks a header
> > file and a call is needed from cmd.c to minimize frequency of gathering
> > filesys info. The free space widget isn't displayed at all when browsing
> > a non-local fs. Filesystem statistics are updated immediately when mc
> > requests a reread (ctrl-r is pressed).
> >
> > Please review, some further mistakes are possible.
> 
> Now, after I reviewed the patch for a second time I am pretty convinced 
> that the free space info should be displayed in the mini status area
> and not on its upper frame i.e. as it is in FAR manager (what Pavel 
> Rosking suggested). 

Yes, otherwise it would be too little space for cwd, especially for
80x25 terminals.

> MC tries to optimize the screen drawing by updating only certain parts
> of the screen (the directory contents, the mini status) when not otherwise 
> necessary. Simply put MC doesn't update the whole screen when you go down 
> one file in the panel, when you change a directory, etc. With the current 
> patch you actually break that optimization by inserting a call to
> mini_info_separator() in show_dir() which is called each time you move
> through the file list for example.

Ok, the only speed related optimization I see is to not to draw the free
space widget every time the show_free_space() is called, but only in
case when old_cwd and panel_cwd differs. The trick to force redraw when
user presses ctrl-r by setting old_cwd to NULL will work then anyway.

> Your patch may be modified to so that it will work properly i.e. it wont
> break the optimization but it becomes ugly (codewise). It may be modified
> to be not so ugly by sacrificing the optimization a bit i.e. put
> a call to mini_info_separator () in panel_update_contents(). It also
> can be made to fit into the current scheme by making the free space info
> part of the mini status area.

Did you do some profiling that it slows mc down significantly? I haven't
seen a noticable delay, especially after show_free_space() doesn't draw
the widget each time it's called.

> Now, there are some other small issues with the patch as-is:
> 
> --- mc-4.6.1a/src/main.c.showfree	2006-05-29 12:41:36.000000000 +0200
> +++ mc-4.6.1a/src/main.c	2006-05-29 13:04:50.000000000 +0200
> @@ -402,6 +409,8 @@
>       int reload_other = !(force_update & UP_ONLY_CURRENT);
>       WPanel *panel;
> 
> +    show_free_space(current_panel);
> +
>       update_one_panel (get_current_index (), force_update, current_file);
>       if (reload_other)
>   	update_one_panel (get_other_index (), force_update, UP_KEEPSEL);
> 
> This part is not necessary. And it will draw the free_space_info() even
> if there is no mini status (though you won't see it).

show_free_space() checks whether free_space != 0 otherwise it won't draw
anything.

> @@ -467,6 +476,37 @@
>       }
>   }
> 
> +void
> +show_free_space(WPanel *panel)
> +{
> +    struct stat st;
> 
> This is not necessary as well as the code which fills it.

Yes, I'll remove it.

Jindrich




More information about the mc-devel mailing list