You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Go to file
mananapr aa4ec8c3dc
Added user scripts for archiving files and extracting archives
5 years ago
scripts Improved w3mimg scripts 5 years ago
user_scripts Added user scripts for archiving files and extracting archives 5 years ago
.gitignore Started using Make instead of CMake 5 years ago
LICENSE Initial commit 5 years ago
Makefile Added unicode support, set cfiles to open in current directory 5 years ago
README.md Fixed popen issues, added binary previews, added option to view previews 5 years ago
cf.c Added user scripts for archiving files and extracting archives 5 years ago
cf.png Updated screenshot 5 years ago
config.h Improved w3mimg scripts 5 years ago

README.md

cfiles

cfiles is a work in progress 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.

screenshot

Dependencies

  • ncurses
  • cpand mv for copying and moving
  • fzf for searching
  • w3mimgdisplay or Überzug for image previews
  • mediainfo for viewing media info and file sizes
  • atool for archive previews

Compiling and Installation

To compile, run

make

and then run,

sudo make install

to install.

Arch Linux users can use the AUR package.

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
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
' View/Goto bookmarks
m Add bookmark
p Run external script
r Reload
q Quit

Directories Used

cfiles uses $XDG_CACHE_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_CACHE_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_CACHE_HOME/cfiles/scripts directory. Make sure the scripts are executable before moving them to the scripts directory.

If $XDG_CACHE_HOME is not set, then $HOME/.cache 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.

  1. Ü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
    1. Better previews when compared to w3mimgdisplay
  • Cons
    1. Can't generate previews for mp3 album arts
    2. Slower scrolling speed when compared to w3mimgdisplay

I personally use Überzug because I don't scroll too fast in my image directories. If I am looking for a specific file I just use fzf to directly go to it.

  1. w3mimgdisplay

To use w3mimgdisplay for image previews, set DISPLAYIMG and CLEARIMG in config.h to the paths of displayimg and clearimg scripts respectively.

  • Pros
    1. Faster scrolling
    2. Can generate previews of album arts for mp3 files
  • Cons
    1. Previews are very inconsistent and may disappear on resizing the terminal or changing workspaces
    2. 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.

Todo

  • Improve Upwards Scrolling
  • Show sorted directories before files
  • Fix the G keybinding
  • Add basic operations like deleting, copying etc.
  • Add rename functionality
  • Add option to show selection list
  • Show current progress or status of copying files
  • Add functionality to open files
  • Add image previews using w3mimgdisplay
  • Preserve aspect ratio in image previews
  • Add fuzzy file search using fzf
  • Find a way to redraw windows after displaying image previews or running fzf
  • Find a way to remove cursor after running fzf
  • Select the file directly from fzf
  • Supress output from xdg-open
  • Find a way to remember selection position of parent directory
  • Add open in terminal functionality
  • Add file previews
  • Improve file previews
  • Add config file for easy user customizability
  • Add more options in config file
  • Fix random segfaults
  • Show more info in the statusbar
  • Add color support
  • Add bookmarks
  • Add ability to run external scripts
  • Remove hardcoded paths
  • Use dynamic allocation wherever static arrays are used
  • Update README section about Image previews and add about Uberzug
  • Replace system() by safer functions
  • Refactor Code