Skip to content

DanDanCool/jfm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jfm

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣤⣤⣤⣶⣦⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡿⠛⠉⠙⠛⠛⠛⠛⠻⢿⣿⣷⣤⡀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠋⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠈⢻⣿⣿⡄⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣸⣿⡏⠀⠀⠀⣠⣶⣾⣿⣿⣿⠿⠿⠿⢿⣿⣿⣿⣄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣿⣿⠁⠀⠀⢰⣿⣿⣯⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣷⡄⠀ ⠀⠀⣀⣤⣴⣶⣶⣿⡟⠀⠀⠀⢸⣿⣿⣿⣆ ⠀⠀⠀⠀ ⠀⠀⣿⣷⠀ ⠀⢰⣿⡟⠋⠉⣹⣿⡇⠀⠀⠀⠘⣿⣿⣿⣿⣷⣦⣤⣤⣤⣶⣶⣶⣶⣿⣿⣿⠀ ⠀⢸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀ ⠀⣸⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠉⠻⠿⣿⣿⣿⣿⡿⠿⠿⠛⢻⣿⡇⠀⠀ ⠀⣿⣿⠁⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣧⠀⠀ ⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀ ⠀⣿⣿⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⠀⠀ ⠀⢿⣿⡆⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⠀⠀ ⠀⠸⣿⣧⡀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠃⠀⠀ ⠀⠀⠛⢿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⣰⣿⣿⣷⣶⣶⣶⣶⠶⠀⢠⣿⣿⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⣽⣿⡏⠁⠀⠀⢸⣿⡇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⣿⣿⡇⠀⢹⣿⡆⠀⠀⠀⣸⣿⠇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⢿⣿⣦⣄⣀⣠⣴⣿⣿⠁⠀⠈⠻⣿⣿⣿⣿⡿⠏⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠈⠛⠻⠿⠿⠿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

WHY

Experience with dolphin and spacefm. Dolphin is part of KDE, lots of dependencies so you can't really use it standalone. GUI based file managers usually have similar issues, relying on various toolkits such as qt or gtk, etc. TUI based file managers are far more powerful simply because they are written with the keyboard in mind. Examples: ranger, nnn Ranger inputs are vim based, however can be a bit slow at times, I've also run into some buggy behaviour. Previewing is nice. nnn is also vim based and is really fast, also provides previewing and extensibility via shell scripts Although extensible, I don't like nnn's method of customization (set environment variables). Additionally, a lot of the extensibility provided by shell scripts still rely on external programs (viu, nsxiv, bat)

CRITERIA

  • fast
    • user should not experience any freezes/slowdowns
    • some operations should be async (deleting, copying, moving, etc.)
  • small
    • users should not have to face long compile times (>2 mins)
    • important for configuration: use a suckless style config.h
  • basic operations (obviously)
  • zero dependencies
    • users should not have to install third-party programs
    • dependency managment sucks on c/c++, ncurses is staticly linked
  • easy to use
    • yeah, vim is easy to use
    • interface should be powerful
  • straightforward
    • I hate programs with terrible documentation
  • easy to fork/extend
    • I don't want to maintain this forever

TOOLS

  • C
    • I'm more familiar with C++
    • wanted to use it here because 1. project is a throwaway + 2. I don't use it often
  • ncurses
    • for the ui
    • good to get familiar with it since I want to make more tui stuff

TODO

  • fix bugs
  • user interface
    • icons via nerdfonts
    • moving files + prompts
  • vim-like state machine input handling
    • input handling kind of sucks
  • previewing
    • simple, but must be fast
    • ranger + nnn previews for images are slow and freezes the terminal, not a great experience
  • split windows
    • setup for this already kind of done
  • cross platform
    • currently uses linux specific system calls
    • a lot of code should be put in platform-agnostic wrappers
  • rewrite in c++ (maybe)
    • I found c to be interesting and unique, but it's far too cumbersome
    • lot of the code is just string operations, cumbersome to write and prone to memory leaks
    • lots of macros are used, c++ templates are far easier to debug and better to write
    • maybe just write more helper functions instead
  • user configuration
    • dwm-style config.h
    • simple + fast

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published