← XeFM crftwr/xefm on GitHub · craftware

XeFM Project Structure

Overview

XeFM is organized so that the file-manager application, its tests, and its documentation stay cleanly separated. The rendering/UI toolkit is not vendored in this repo — XeFM depends on the external PuiKit framework.

Directory Structure

xefm/
├── xefm/                   # The `xefm` package — everything the app ships
│   ├── app.py              # The application: XeFMApp + top-level UI (runs on PuiKit)
│   ├── __main__.py         # `python -m xefm` entry point
│   ├── tools/              # End-user external programs (shipped as package data)
│   └── *.py                # Business logic, imported as `xefm.<module>`
├── test/                   # Unit / integration tests (test_*.py), run with pytest
├── doc/                    # End-user docs (*_FEATURE.md, guides)
│   └── dev/                # Developer docs (*_IMPLEMENTATION.md, *_SYSTEM.md, plans)
├── tools/                  # Internal dev/build utilities (*.py, *.sh)
├── macos_app/              # macOS .app packaging (see MACOS_APP_BUILD_SYSTEM.md)
├── windows_app/            # Windows packaging (see WINDOWS_APP_BUILD_SYSTEM.md)
├── temp/                   # Throwaway work-in-progress files
├── pyproject.toml          # Packaging metadata (flat layout, `xefm` console script)
├── Makefile                # Build automation (run, test, venv, install-puikit, macos-app, ...)
├── requirements.txt        # Python dependencies
└── README.md               # Project overview and user guide

PuiKit itself lives in its own repository (../puikit) and is installed editable into .venv/ via make install-puikit (PUIKIT_DIR ?= ../puikit). It is not part of this tree.

Application (xefm/)

The application entry point and the top-level UI (the XeFMApp shell, the dual FilePane layout, menus, and the main loop) live in xefm/app.py. It imports PuiKit (from puikit import ...) and its sibling modules (from xefm.config import ...). Those siblings, grouped by concern:

Configuration & appearance

Path & storage system

Panes & file listing

File operations, tasks & progress

File monitoring

Dialogs & bars

Viewers

Logging

Backend, state & misc

Tests (test/)

Unit and integration tests, discovered by pytest as test_*.py. Run them with src (and the repo root, for the few tests that import xefm) on the path; PuiKit is resolved through its editable install:

python -m pytest test/                       # all
python -m pytest test/test_xefm_path.py -v    # one file

make test runs the suite; make test-quick runs a fast subset. Interactive demos are not here — PuiKit ships its own demos in ../puikit/demo/, which should not be launched non-interactively (they block).

Documentation (doc/)

Entry Points

Build System (Makefile targets)

Dependencies

Runtime

Development

Configuration