File Manager

This document is just a work in progress for ideas I am tossing up inside my head.

I just want to manage my files, find things easier and generally be more productive :(

Things I use my file manager for:

  • Search and discovery of files
  • Launching an application to handle a specific file or files.
  • Organising files
  • Previewing files
  • Editing files

Things that seem to fit under these categories which currently I cannot do:

  • Find files with robust search functionality
  • Create file lists like playlists, either manually or generatively
  • Robust preview of files
  • Iteratively, or concurrently action files
  • View/Edit meta data of files
  • Bookmarks/favourites/savestates that isnt an afterthought
  • Comprehensive integration
  • Bulk rename
  • Duplicate finder
  • Synchronise files between folders
  • Archive browsing

Things that my file managers do that I think is stupid:

  • tabs, thats the window managers job
  • have very specific custom settings for things that have a general desktop setting, and that are not a custom override.
So I'm brainstorming up things that I would change in hopes that I might find common design elements.

File managers are typically split into a viewing pane and a navigation pane, such that a tree or bookmarks would be in the navigation pane and the lists of files are in the viewing pane. But I sort of don't see why that convention exists except out of tradition. the commander type file managers only have two viewing panes side by side, osx finder had an expanding filter column setup.

I want my file manager to be more generic. I want the internal application splits to be more like blenders, like a tile based window manager.

Viewing Panes that exist already:

  • Icon
  • Thumbnail
  • Details
  • List
  • Icon overlay for VCS and cloud backup systems

But that you might add as plugins

  • desktop entries
  • video preview
  • music preview
  • 2d zoom view like, or spacesniffer
  • 3d view like fsv2 (file system visualiser as seen in jurassic park)
  • text editor
  • spreadsheet editor
  • tree view
  • word cloud
  • manual list(playlist)
  • generated list(search)
  • column filter
  • google doc editor
  • webview
  • avahi(network services) tree view
  • properties preview/edit
  • avahi/zeroconf browser
  • etc.
each viewing area context are linked with all viewing area contexts, a new window would have a separate viewing context.

settings for a folder could be optionally stored inside the folder in a
hidden text file so that other applications might take advantage of settings.

Cool things about other software:


  • Each view pane has its own toolbar that can be hidden or flipped to the top/bottom
  • Recurse depth to show files/folders layers deep

Things to think about:

what actions mean what, splitting the view, multiple views, consistency, crash resistance, minimal dependencies, toolkits, structure and arrangement of plugins, interface building, freedesktop integration, production milestones.

Staged Production:

I'm a noob, so this is just brainstorming.
  • window
  • filelist as view plugin
  • navigate files
  • drag and drop between windows
  • list view, then icon view
  • freedesktop mime type icon integration
  • meta data extension plugins for my common filetypes ie music and movies
  • work on more views
Since blender typically has the basics of the features I want to start with, I should try to hack it apart at least once before I turn to QT or something similar.

unorganised thoughts

New Things i will have to learn:

  • Dynamic Linking of modules ie plugins
  • qt toolkit
  • system calls
  • the most efficient way to get the directory structure
  • asynchronous programming
  • smb network programming
  • apple network
  • zeroconf
  • windows system calls for drag and drop
  • fuse filesystem, or udev things for auto mounting and unmounting of drives
  • how to interface with ffmpeg, and other media tools for playing/editing files
  • The Freedesktop specification

Could I possibly emulate blenders non overlapping area system to qt