Fwd: MC Tabs

Cosmin Popescu cosminpopescu at members.fsf.org
Wed Oct 16 06:31:41 UTC 2013


---------- Forwarded message ----------
From: Cosmin Popescu <cosminpopescu at members.fsf.org>
Date: Tue, Oct 15, 2013 at 8:37 PM
Subject: Re: MC Tabs
To: Egmont Koblinger <egmont at gmail.com>


Dear Egmont,

I will answer your observations one by one:

your patch desperately
lacks the "move this tab to the other panel" (or something similar)
option with menu entries and convenient shortcuts, or maybe ^U could
just swap two tabs but not two whole panels.  Or, tabs should not be
per-panel but common to the two, in each panel you could easily jump
to any of the tabs.

----------------------------------------------------------------------

I can certainly add another option for the ^U shortcut (to move all tabs or
only the current tab). I can also add a menu entry to move the current tab
on the other panel. On the other hand, I prefer to have the tabs
separately. If anyhow, somebody wishes to have them common for both panels
I can develop something like this (as an option) to be included in mc. But
for me, I don't think it's necessary.

==========================


Most of the Ctrl+Alt+letter combos are taken by my window manager, so
I'm back to entering Meta by pressing Escape.  Still, Esc followed by
C-Left or C-Right or C-g don't work for me, I'm not sure why.

------------------------------------------------------------------------

Since I wasn't sure that I know all the shortcuts of MC, I preferred not to
put any default shortcuts and expose my menu options to a keymap file. So
normally you should be able to assign any shortcut that your terminal
permits to any function that I've implemented.

===========================

The current UI trend (apart from a couple of legacy apps that had tab
support before it became widely used) is to place tabs on the top,
rather than the bottom.

--------------------------------------------------------------------------

I copied the krusader, which has by default the tabs on the bottom. But,
just like for krusader, I was thinking to add the possibility in the tabs
options to choose where the tab bar should be implemented. I choose to
begin with printing them down because it was easier to implement just by
following the existing code.

===========================


The "create tab" and such menu options operate on the currently active
panel, rather than on the Left/Right panel according to whose menu
entry is selected.  (E.g. Left panel is active, invoke Right->Create,
a new tab should be created on the right panel.)

---------------------------------------------------------------------------

I don't know why I was under the impression that the other options work the
same way. I've checked again now and you are right. I will correct this and
send you again another patch.

============================


Tabs should be selectable by a single mouse click (also scrolling
should be doable by mouse if too many tabs are open to fit).

-----------------------------------------------------------------------------

The truth is that I don't use the mouse with mc. This is why the tabs are
not responsive to the mouse. But again, if you would like to include it in
the official code repository I can also make it responsive to the mouse.

============================


Having non-ascii characters (don't forget about CJK either) cause
artifacts with highlighing the active tab (the end of the tab bar gets
the highlighed background too).

----------------------------------------------------------------------------

I think the issue there is that I used the strlen function. I will have a
look. I only checked with normal UTF-8 characters.

============================


One more thing: please use unified diffs, they are much more reable
and more portable to newer mc versions.

-----------------------------------------------------------------------------

The next patch I will send I will use unified diffs.


On Tue, Oct 15, 2013 at 8:37 PM, Egmont Koblinger <egmont at gmail.com> wrote:

> Hi Cosmin,
>
> This is a very interesting idea.  Please let me give feedback after 5
> minutes of using it :) Please note that I'm not an official mc
> developer, just an occasional contributor.
>
> I always wondered why mc has hardcodedly only 2 panels, not allowing
> more.  E.g. the screen could be divided in 2x2 parts and copy/move
> operations could have a direction (horizontal, vertical or diagonal).
> Your new feature approaches a similar goal.
>
> To accomplish the above mentioed goal, i.e. to be able to have 3
> panels and quickly copy between *any* two, your patch desperately
> lacks the "move this tab to the other panel" (or something similar)
> option with menu entries and convenient shortcuts, or maybe ^U could
> just swap two tabs but not two whole panels.  Or, tabs should not be
> per-panel but common to the two, in each panel you could easily jump
> to any of the tabs.
>
> Basic tab operations (next/prev/new/close) should also be something
> that has convenient short hotkeys by default, and those hotkeys are
> mentioned in the F9 dropdown.
>
> The current UI trend (apart from a couple of legacy apps that had tab
> support before it became widely used) is to place tabs on the top,
> rather than the bottom.
>
> The "create tab" and such menu options operate on the currently active
> panel, rather than on the Left/Right panel according to whose menu
> entry is selected.  (E.g. Left panel is active, invoke Right->Create,
> a new tab should be created on the right panel.)
>
> Tabs should be selectable by a single mouse click (also scrolling
> should be doable by mouse if too many tabs are open to fit).
>
> Having non-ascii characters (don't forget about CJK either) cause
> artifacts with highlighing the active tab (the end of the tab bar gets
> the highlighed background too).
>
> Sure there are a couple of more issues, but I kind of like your idea
> and would welcome such a feature.  Nice work for a start!
>
> One more thing: please use unified diffs, they are much more reable
> and more portable to newer mc versions.
>
>
> egmont
>
> On Mon, Oct 14, 2013 at 8:20 PM, Cosmin Popescu
> <cosminpopescu at members.fsf.org> wrote:
> > Dear mc developers,
> >
> > Please find attached my contribution to mc: tabs like Total Commander
> has.
> >
> > I am a regular midnight commander user. I use it for all my file
> exploring
> > needs on several systems. I use it under Arch Linux and Ubuntu at home,
> > under Red Hat on various servers that I administer and under Cygwin on
> > Windows 7 at work.
> >
> > One of the things that was missing were the tabs and I hated all the
> time,
> > when I needed to copy some files from a location to several locations to
> > have to change the folder so many times.
> >
> > You will find an archive containing several patches that will add tabs
> to MC
> > and a keymap file to map some shortcuts for the tabs. Another message
> will
> > follow with some screen shots.
> >
> > Inside the archive there is an executable file called apply-patch that
> will
> > apply all the pathes on the required files. To install the patch, just
> > un-archive the patch.tar.gz inside the root folder of mc-4.8.10 archive,
> cd
> > to patch and run ./apply-patch.
> >
> > I've implemented the following:
> >
> > * Create tab (creates a new tab)
> > * Close tab (closes an existing tab, if the tab is not the only one)
> > * Rename tab (changes the title of the current tab)
> > * Next tab (changes the current tab)
> > * Previous tab (changes the current tab)
> > * Go to tab (displays a list of tabs from which the user can select one
> to
> > switch to)
> > * Tabs options (some tabs options)
> > * Tabs sessions (the current opened tabs can be saved into sessions that
> can
> > be later restored).
> >
> > In the tabs options there is an option to restore the last tabs session.
> > Please note that if this is checked, the current opened folder in the
> > current panel will not be the folder from which mc is launched, but the
> > folder that was last current when mc was closed.
> >
> > From a technical point of view, the tabs are a simple list of structures
> > containing a name (which can be NULL in which case the name of the
> current
> > tab is the name of the current folder) and a path (a vfs_path_t
> structure)
> > containing the current path of the tab. Whenever a tab is created, a new
> tab
> > structure is added in the list. When a tab is changing the mc will do a
> > simple cd by calling the do_cd function. I think that the implementation
> is
> > pretty much straight forward.
> >
> > The only thing a little bit complex might be the display_info function.
> That
> > function will determine if all the tabs can be displayed, if not will
> > calculate which can be displayed starting from the current tab to the
> left
> > and then to the right if there is still space.
> >
> > All my code is added between #ifdef WITH_TABS and #endif directives. The
> > WITH_TABS can be set at configure time. By default the tabs will be
> compiled
> > in, but can be deactivated by configure with "--disable-tabs" option.
> >
> > I also added a small implementation for "string_file_ext" function. I
> needed
> > it for my day to day work. It is added between the #ifdef WITH_EXT and
> > #endif directives. The WITH_EXT is defined in the src/filemanager/panel.c
> > file. If you don't want to use it, you can undefine the WITH_EXT.
> >
> > Also, please note that in the src/filemanager/filegui.c you have a small
> bug
> > at the line 288. The closing bracket of the function is inside the #ifdef
> > directive, while the opening one is outside. The program will of course
> fail
> > to compile under cygwin, so I've corrected it.
> >
> > In the src/filemanager/mountlist.c, on the line 245 you are using the
> > _GL_UNUSED macro. This will also fail to compile on my version of cygwin.
> > Although I know that probably I have to add a dev package to have the
> macro
> > defined, I don't think that it should be the case to do that just to
> avoid a
> > warning (to add a dependency). I would do that with something like #ifdef
> > _CYGWIN_ directive, but since this might be because of my installation of
> > cygwin, I didn't modify it in the patch that I've sent you.
> >
> > The patch is applied against the mc-4.8.10 downloaded from here:
> > http://ftp.midnight-commander.org/mc-4.8.10.tar.xz
> >
> > I've compiled the mc-4.8.10 with tabs on the following platforms:
> >
> > * Arch Linux
> > * Red Hat 5
> > * Ubuntu
> > * Cygwin (win 7)
> >
> > Please let me know if you would like to include the tabs in your main
> source
> > repository. If not, do you have something against me posting the patch on
> > sourceforce and github?
> >
> > Thank you very much for maintaining MC.
> >
> > Regards,
> > Cosmin Popescu.
> >
> > _______________________________________________
> > mc-devel mailing list
> > https://mail.gnome.org/mailman/listinfo/mc-devel
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.midnight-commander.org/pipermail/mc-devel/attachments/20131016/1b70db8e/attachment.html>


More information about the mc-devel mailing list