/Filer

A clean rewrite of the Filer file manager for helloSystem, inspired by John Siracusa's descriptions of "Spatial Orientation"

Primary LanguageC++BSD 2-Clause "Simplified" LicenseBSD-2-Clause

Filer Build Status Ubuntu Build Status

A clean rewrite of the Filer for helloSystem (but not limited to it), inspired by John Siracusa's descriptions of "Spatial Orientation" and the Spatial Classic Finder (Video).

To try it out, run the latest experimental helloSystem ISO build and press the "V" key for verbose boot (this will cause this new, work-in-progress Filer to be loaded).

  • No GLib dependency
  • No libfm dependency
  • Minimal dependencies other than Qt
  • No inherited code
  • Uses launch "database"
  • Runs on FreeBSD (developed for helloSystem) and on Linux (occasionally tested on Lubutnu)

Features

Other file managers Filer DONE
Do not natively support .app bundles, .AppDir and .AppImage formats Natively supports .app bundles, .AppDir and .AppImage formats DONE
Do not show the correct icons for Windows applications Shows the correct icons for Windows applications DONE using icoextract (must be installed)
Use XDG standards that have prevented *nix desktops from working well for all too long Engineered from first principles to be a great desktop file manager WIP
Assume applications are at fixed locations, e.g., in /usr/bin Assumes applications can be anywhere including external disks and file shares, and can be freely moved around WIP based on launch "database"
Show icons for files based on their MIME type Show icons for files based on the application that opens them DONE based on launch "database"
Do not allow individual files of the same MIME type to be opened with different applications Allows individual files of the same MIME type to be opened with different applications (using the can-open extended attribute) DONE by launch
Do not persist window location and size for each window Persists window location and size for each window DONE
Do not persist the view type for each window Persists the view type for each window DONE
Do not persist icon coordinates in windows Persists icon coordinates in windows WIP using coordinates extended attribute
Do not persist the size of each icon Persists the size of each icon For consideration
Cannot use copy and pasted icons for documents and folders Can use copy and pasted icons for documents and folders DONE using user-icon extended attribute holding a base64 encoded PNG
Open files with whatever application if there is more than one that can handle a file Asks the user which application to use if there is more than one that can handle a file DONE by launch
Do not know which application created a file Knows which application created a file and by default opens it with that application TODO; how? Using DTrace or similar?
Do not allow drag-and-drop of files onto applications Allows drag-and-drop of files onto applications DONE
No animation when applications, documents, or folders are opened Animation when applications, documents, or folders are opened DONE (using QTimeLine Property Animation)
Opened applications, documents, and folders are not shown as open Opened applications, documents, and folders are shown as open DONE for folders, TODO for the other types
Use technical jargon like "executables", "files", "directories", "properties", "wallpaper" Uses familiar desktop terminology like "applications", "documents", "folders", "info", "desktop picture" DONE
Do not show volumes (disks) on the desktop Shows volumes (disks) on the desktop DONE
Cannot eject disks by dragging them to the Trash Ejects disks by dragging them to the Trash DONE
Use controls designed for mobile devices like image Only uses controls designed for the desktop (e.g., real checkboxes like image DONE
When you double click an application and it fails to run, nothing happens because the error goes to /dev/stderr, which is invisible When you double click an application and it fails to run, the error is shown in a dialog on the screen DONE via launch
Are not optimized for managing and launching applications Is optimized for managing and launching applications DONE
Cannot rename disks Can rename disks DONE via renamedisk helper command line tool
Do not have spring-loaded folders Has spring-loaded folders DONE
Use Gtk-centric dependencies like Glib, Gdk, Gio, polkit Does not use Gtk-centric dependencies DONE
Refuse to copy/move/delete items which the user doesn't have access to Asks user for root password to copy/move/delete items which the user doesn't have access to DONE for copy/move, TODO for delete
Use weird locations like computer:// and network:// that are nowhere in the filesystem Uses proper paths in the filesystem for everything DONE

My conclusion is that most "desktop environments" are made by people who don't actually love the desktop. Or else, those basic things would work.

Developer documentation (Doxygen)

https://probonopd.github.io/Filer/annotated.html

Q&A

Q: Can this run on Linux?

A: It does build and it can run, but in order to give the full experience, you might want to consider using helloSystem, which comes with additional tools and careful preconfiguration to make Filer work as intended.

References