cfiles
cfiles
is a terminal file manager with vim like keybindings, written in C using the ncurses
library. It aims to provide an interface like ranger while being lightweight, fast and
minimal.
Dependencies
ncursesw
cp
andmv
for copying and movingfzf
for searchingw3mimgdisplay
orÃœberzug
for image previewsmediainfo
for viewing media info and file sizesatool
for archive previewspoppler
(specificallypdftoppm
) for pdf previews
Compiling and Installation
Arch Linux
Arch Linux users can use the AUR package.
macOS
macOS users can use brew or macports
Others
To compile, run
make
and then run,
sudo make install
to install.
Keybindings
Key | Function |
---|---|
h j k l | Navigation keys |
G | Go to end |
g | Go to top |
H | Go to top of current view |
M | Go to middle of current view |
L | Go to bottom of current view |
pgup | Scroll Up One Page |
pgdn | Scroll Down One Page |
f | Search using fzf |
F | Search using fzf in the present directory |
S | Open Shell in present directory |
space | Add/Remove to/from selection list |
tab | View selection list |
e | Edit selection list |
u | Empty selection list |
y | Copy files from selection list |
v | Move files from selection list |
a | Rename Files in selection list |
dd | Move files from selection list to trash |
dD | Remove selected files |
i | View mediainfo and general info |
I | View preview |
. | Toggle hidden files |
b | Toggle borders |
' | View/Goto bookmarks |
m | Add bookmark |
E | Edit bookmarks |
p | Run external script |
r | Reload |
q | Quit |
Directories Used
cfiles
uses $XDG_CONFIG_HOME/cfiles
directory to store the clipboard file. This is used so that the clipboard
can be shared between multiple instances of cfiles
. That's why I won't be adding tabs in cfiles
because multiple
instances can be openend and managed by any terminal multiplexer or your window manager.
Note that this also means the selection list will persist even if all instances are closed.
cfiles
also uses $HOME/.local/share/Trash/files
as the Trash Directory, so make sure this directory exists before you try to delete a file.
For storing bookmarks, cfiles
uses $XDG_CONFIG_HOME/cfiles/bookmarks
file. Bookmarks are stored in the form <key>:<path>
. You can either edit this file directly
or press m
in cfiles
to add new bookmarks.
cfiles
looks for external scripts in the $XDG_CONFIG_HOME/cfiles/scripts
directory. Make sure the scripts are executable before moving them to the scripts directory.
If $XDG_CONFIG_HOME
is not set, then $HOME/.config
is used.
Opening Files
You can set FILE_OPENER
in config.h
to specify your file opening program. It is set to use xdg-open
by default but you can change it to anything like thunar
. macOS users need to set it to open
.
Image Previews
You can either go with w3mimgdisplay
or Ãœberzug
(link) for image previews.
Each method has it's own pros and cons.
- Ãœberzug
To use Ãœberzug
for image previews, set DISPLAYIMG
and CLEARIMG
in config.h
to the paths of displayimg_uberzug
and clearimg_uberzug
scripts respectively.
- Pros
- Better previews when compared to
w3mimgdisplay
- Better previews when compared to
- Cons
- Can't generate previews for mp3 album arts
- Non functional scrolling with arrow keys
I recommend Ãœberzug
because the previews scale well with change in terminal size and don't disappear on changing workspaces.
- w3mimgdisplay
To use w3mimgdisplay
for image previews, set DISPLAYIMG
and CLEARIMG
in config.h
to the paths of displayimg
and clearimg
scripts respectively.
- Pros
- Faster scrolling
- Can generate previews of album arts for mp3 files
- Cons
- Previews are very inconsistent and may disappear on resizing the terminal or changing workspaces
- You may have to redraw the UI while scrolling by pressing
KEY_RELOAD
(defaults to R)
You may have to modify the scripts a little, about which you can read here.
Why C?
I wanted to improve my C and learn ncurses so I decided this would be an ideal project.
Apart from this, I have always wanted an alternative to ranger that is faster while still having a similar UI.