Being a “poweruser” spending a lot of his time developing software, I
heavily use the command-line, like most others do too. You could say
that I spend at least a third of my time in front of some shell (and
my Emacs runs in an external window, mind).
Therefore, I strive for efficiency on the command-line, but recently I
found out how I would get the biggest slowdown when working with the
shell: I’d just need to sit down at a computer that doesn’t have the
GNU Midnight Commander installed.
As you may know, the Midnight Commander—or
mc for short—is a
Unix clone of the Norton Commander, but last time I saw it, Norton
Commander was quite different to Midnight Commander. Still, they
share the basic concept, the two-panel fileview.
In my opinion, a two-panel file manager is the most effective way to
interactively work with files—move around in directories, select,
copy and move files. I know that there are lots of people that use
single-panel file, or even the horrible (despite all the good reasons
there may be for it) spatial view, where each directory gets it’s own
window. I don’t know about you, but to get my stuff done quickly, I
far prefer using the keyboard over the mouse, and that is (almost)
impossible when you have thousands of windows open, and need to “drag”
files from here to there.
While those surely are easy to pickup and consistent with models
whatever user interface developers came up, they are not the way to
go—for me, at last.
Therefore, I have investigated into my use of
mc, and came to the
I need a shell at my fingertips.
mc makes this very easy,
I can simply type my commands into the minibuffer and run them.
Also, by pressing
C-o I can quickly switch to a full-screen shell.
Often, I even forget that I am in
mc (I only notice that when I open
mc in the shell emulation, and
C-o will switch between
both commanders…)! Also, the current filename can be copied
to the minibuffer with a simple
Two panes are good, one large one is even better. In
mc, I can
switch the size of the panel with
M-t, it will get half-screen size
or full-width then. I often work with both panels in full-width,
because I see change time and permissions then, all at once. I
TAB to switch between both of those panels. Seeing
both at once isn’t necessary very often.
Easy selection is essential.
mc makes this very easy, you either
INS (which is inconvenient on the iBook) or
C-t to toggle
marking the current file, and then can conveniently operate on them.
C-x t, they are all inserted into the minibuffer.
+ will mark all files that match a shell glob.
File searches rock. Typing
C-s, I can interactively search
for filenames; this is especially useful for directories with lots
of different files. Just too bad that it only can search for the
beginning, and not for any file matching the search.
Virtual file systems are a joy. Being able to just enter archives or
go to ftp sites by
cding to their URL makes lots of things easier
and faster than having to fire up
tar in some temporary directory
ftp syntax (and no completion, yuck).
Still, I have some gripes with
Give me a bigger shell. Sometimes, a one-line shell minibuffer is just
too small, but a full-screen shell is too big. Why can’t I just
have a 5 line pty?
Change sorting. Usually, I browse sorted by filename, but then,
I need to find all the big files, or all the old files.
make it easier to change the sorting criteria with key strokes, so far,
I need to F9 into the menu, down, Listing mode, Sort Order, Down until
Size, OK. That’s just far too complicated! Emacs
dired gets it a lot
easier, for example, with
s I can toggle between file name and date.
Still no size, though.
Does it need to be a TUI? I know there is(was?) a Gnome Midnight Commander,
but it didn’t work as the one for the shell. Especially
when you work with folders of pictures, thumbnails would be just too
useful. A text user interface is nice, but a graphical user interface,
even if it’s just for displaying files, would be a good alternative too.
Just make sure I don’t need a mouse to use it.
With all these points, I’ve decided to design my own file manager;
however, it is unlikely I’ll get around implementing it in near
future, there is just so much else to do, and
mc doesn’t suck enough
to make me really need it. :-)
My main idea is a four-panel file manager, on the top there are three
columns of file panes: the first always displays the current
working directory, and the other two can be assigned to any
directory. On the bottom of the screen, there is a resizable
terminal emulation (I think
multi-gnome-terminal would be a good
fit, for example), maybe five lines high by default. It is very
important that that shell works good and behaves just like any other
terminal emulator (some keystrokes aside).
Switching from the shell to the file panels must be very easy, the
same is true for switching between the three file panels. Each panel
must be maximizable and minimizable with a single keystroke;
full-window shell, full-window file panel.
The file panels will have different views, say “file list”, “extended
file list” (of most use when maximized), or “thumbnails” (of different
sizes, too). Ideally, the user can program his own views. For
example, you could make a view that internally calls
locate, so you have a “virtual” folder that actually is a search
With a single keystroke, the user can swap, rotate and copy the
file-panels; the usage remembers me a bit of the old HP RPN
calculators that only had a very limited stack. The user can copy,
move and delete files from any panel to any other, all with the
On the bottom of the file list, there could be a (hidable) preview
box, that could show more file details like file times, permissions,
even the beginning of text files, or thumbnails. On the top, there
could be a menu to go to often used directories.
RET on a file, it should use an extremely configurable
mechanism to find out what to do with the file; on
C-RET, it could
provide a menu of common tasks for that kind of file. Integration
with external editors (especially Emacs) would be very useful.
All these things also need to be accessible from the shell, possibly
over some kind of IPC.
I know my idea probably sounds weird, but I think I’d be a very
comfortable way of managing files—comfortable for powerusers, not
necessarily newbies. If you’d like to implement it (or a subset of
it), feel free to contact me, I can provide you a bit more information
NP: Aimee Mann—I Can’t Get My Head Around It