Skip to main content

F2 Commander is an orthodox file manager for the modern world.

Project description

F2 Commander

F2 Commander is an orthodox file manager for the modern world.

F2 Commander Showcase

More screenshots here

Installation

From PyPI:

pipx install f2-commander

or:

uvx --from f2-commander f2

From source:

uv build
pipx install [--force] dist/f2_commander-0.8.0.tar.gz

This software is designed to work in Linux and macOS. It should also work in WSL (Windows Subsystem for Linux).

Usage

  • Start by running f2 in your terminal emulator
  • Hit ? to see the built-in help
  • Hit q to quit

About

F2 Commander exists to bring the experience of an orthodox file manager into the world of modern computing.

A "file system" can be anything that can seem to contain files and directories, (a local disk, a BLOB storage, a Cloud drive, a compressed file, etc.).

Finally, it is designed to be discoverable: making file systems easy to navigate, and making the F2 Commander itself obvious to use.

F2 Commander is an overgrown personal project, may contain bugs, and is provided "as is", without warranty of any kind.

Features

  • Works in Linux, macOS
  • Windows support (via WSL; should work, but to be extensively tested)
  • An orthodox two-panel interface with a footer menu
  • Vi-like and traditional Fn key bindings
  • Command Palette (Ctrl-P)
  • Rich and flexible file listing (file attributes, ordering options, filtering with glob, hidden files toggle, compute directory size, and more)
  • Incremental search (type to search, fuzzy matching)
  • Recursive file search. Find in (text) files.
  • Integration with native OS applications (open a directory in a file manager, open a file with a default program)
  • File and directory manipulation (copy, move, move to trash, etc.)
  • Multiple file selection
  • View and edit files
  • Configurable bookmarks. Quick "Go to path".
  • Preview panel (text with syntax highlighting, image, and direcotry tree preview)
  • Drop to shell
  • User-level JSON configuration file
  • Extensive "Remote File systems" support. A non-exhaustive list includes: AWS S3, GCP GCS, Azure ADLS, OCI, OSS, DVC, LakeFS, HDFS, Dropbox, Google Drive, FTP/FTPS, SFTP, SMB, WebDAV, and many more. Custom implementations are possible through other fsspec implementations and plugins. **See also the note below.
  • Read and write archives and compressed files. A non-exhaustive list includes: ZIP, TAR, XAR, LHA/LZH, ISO 0660 (optical disc files), cpio, mtree, shar, ar, pax, RAR, MS CAB, 7-Zip, WARC, and more - everything supported by libarchive.
  • Multiple color themes
  • Built-in help
  • Built-in update check

**Remote file systems are in preview. All features are available, but not extensively tested. Connection dialog is rather crude, but is otherwise functional. Connections can be preconfigured in a configuration file.

And, hopefully, a polished up user experience that you'd normally expect from a robust file manager. Feel free to submit any issues to make F2 Commander even better!

Development environment

This project provides a devcontainer, and it is recommended to use for tests. Tests may be unsatble in other OSes due to minor variations in the OS behavior (e.g., how file sizes are computed).

This project uses uv. The configuration is conventional, use as usual:

uv run f2

Static code analysis, type checks and tests can be ran with prek:

uv run prek run [--all-files]

To run tests:

uv run pytest

To run the application with dev tools:

uv run textual console [-v -x SYSTEM -x EVENT -x DEBUG -x INFO]  # this first!
uv run textual run --dev f2.main:main

Above, -x NAME excludes the named type of message from the output.

To run tests in all target Python versions (typically before a release):

./mox

See the mox implementation for a list of Python versions. Match it with currenly supported Python versions, and update pyproject.toml classifiers. mox is short for "my nox"; this project no longer uses nox because installing envs with uv is so fast I don't see the point in nox anymore.

Release process

  1. Update dependencies and target Python versions (target all suppported ones).
  2. Run all tests: ./mox.
  3. Update version in the pyproject.toml
  4. Build: uv build
  5. Test the pacakge: pipx install --force dist/*.whl and run it
  6. Publish: uv publish
  7. Tag in git and push the tags.

About (continued)

"F2" is a loose interpretation of "a File manager with 2 side-by-side panels", and "Commander" is an homage to the old-school orthodox file managers.

"F2 Commander" is a personal project that has grown into a full-fledged file manager and is now open-sourced. Being a personal project means that: a) my intent is to continue the development of the features outlined above, but the development and bug fixing may be irregularly-paced and priorities may shift; b) my intent is to keep F2 Commander stable, but future versions may include backward-incompatible changes where that would seem pragmatic.

Special Thanks

F2 Commander is made with Textual framework, fsspec and other great packages. Many features are made possible or stem directly from these, and I encourage F2 Commander users to support them.

Contributions

Bug reports, feature requests and pull requests are welcome.

If you plan to contribute to the source code, see the "Development environment" above and, please, note that:

  • contributed source code must pass the pre-commit (prek) checks
  • in this repository, contributed source code is only accepted under Mozilla Public License 2.0 and should include according file headers.

License

This application is provided "as is", without warranty of any kind.

Mozilla Public License, v. 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

f2_commander-0.8.1.tar.gz (48.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

f2_commander-0.8.1-py3-none-any.whl (55.0 kB view details)

Uploaded Python 3

File details

Details for the file f2_commander-0.8.1.tar.gz.

File metadata

  • Download URL: f2_commander-0.8.1.tar.gz
  • Upload date:
  • Size: 48.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for f2_commander-0.8.1.tar.gz
Algorithm Hash digest
SHA256 4c2a39bc61ace6f8430f74baa4895471f3f73dfcf9392e8a8e82df15725b964f
MD5 954eacac02cfcec7fedd8d0333e0ba2e
BLAKE2b-256 3eb9a511a070f36dc971d96c23135493a587f90e003f62aa856a8eed4f9f50a4

See more details on using hashes here.

File details

Details for the file f2_commander-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: f2_commander-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 55.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for f2_commander-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 46943eb5e7e5bc5bd6b252ddf093b28472889f47d8e39a72b7be27c67e5a831e
MD5 09487a4f13df711258c2eb578e30cf7e
BLAKE2b-256 816cc55b804922371804aec5b19f94ba3c9f85a5281dbbee2c7d94ca101a1670

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page