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.
mcmakes this very easy, I can simply type my commands into the minibuffer and run them. Also, by pressing
C-oI can quickly switch to a full-screen shell. Often, I even forget that I am in
mc(I only notice that when I open a second
mcin the shell emulation, and
C-owill 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 then use
TABto switch between both of those panels. Seeing both at once isn’t necessary very often.
Easy selection is essential.
mcmakes this very easy, you either press
INS(which is inconvenient on the iBook) or
C-tto toggle marking the current file, and then can conveniently operate on them. By pressing
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
tarin some temporary directory or remember
ftpsyntax (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.
mcshould 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
diredgets it a lot easier, for example, with
sI 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 keyboard.
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 then.
NP: Aimee Mann—I Can’t Get My Head Around It