XeFM shows two directories side by side, which makes copying, moving, and comparing between them far quicker than in a single-pane manager. One pane is active (highlighted, with the cursor); the other is inactive. Press Tab to switch which is active.
Each pane keeps its own current directory, cursor position, selection, sort mode, filter, and history — they are fully independent.
| Key | Action |
|---|---|
| Tab | Switch active pane |
| O | Sync current pane’s directory to the other pane |
| Shift-O | Sync other pane’s directory to the current pane |
| C | Copy selected files to the other pane’s directory |
| M | Move selected files to the other pane’s directory |
| W | Compare files/directories between panes |
| [ | Move the pane boundary left (left pane smaller) |
| ] | Move the pane boundary right (left pane larger) |
Copy/move always target the other pane, so the usual workflow is: point each pane at a directory, select in one, and act.
These patterns are what the two panes are really for:
archive://...) and
copy files out to the regular filesystem in the other pane.s3://...) in
the other, to copy between local and cloud storage.Adjust the vertical boundary with [ (left pane smaller) and ] (left pane
larger). The ratio is saved and restored on restart. Set the startup default in
~/.xefm/config.py:
DEFAULT_LEFT_PANE_RATIO = 0.5 # 50/50 (default); 0.6 = wider left, 0.4 = wider right
XeFM remembers each pane’s current directory, cursor position, the pane ratio,
and which pane was active between sessions, stored in ~/.xefm/state.json.
Set the starting directory for each pane when launching XeFM:
# Left pane only
python3 -m xefm --left /path/to/directory
# Right pane only
python3 -m xefm --right /path/to/directory
# Both panes
python3 -m xefm --left ~/documents --right ~/downloads