Releases: thisisgm/flea
Release list
0.1.3
Seven pull requests, both open issues, and the first community packaging.
Added
- The path bar.
:orCtrl+Lopens the strip above the listing as a line you type into, on the current directory with the whole line selected./is absolute,~is home, anything else is relative to where the pane is, and afile://URI pasted from another application is read as the path it names. Tab completes against the directories one level down, growing the line as far as the names agree, so Tab, Tab, Tab walks a tree. Thanks @schotime. - Directory tabs.
topens one at the current folder,wcloses it,1to9switch. The strip appears only at two tabs, nine is the cap, and the last tab cannot close. One listing stays live: a hidden tab is a snapshot, not a second view. Thanks @smillunchick. - A right-click menu on the column titles, with Mode, Size, Date Modified and Kind each hideable and the choice outliving the window. Width still wins, so a column the pane is too narrow to carry stays dropped. Copy path joins Open in the listing menu. Thanks @joewinke.
Ctrl+Shift+PlusandCtrl+Shift+Minusstep the interface scale,Ctrl+Shift+0puts it back to the desktop's own size. Flea multiplies the size Omarchy resolved rather than replacing it, so a box is unchanged until you ask. Fixes #9, reported by @mFellipe.
Fixed
- Hardened the paths that process untrusted input. A file named
--use-compress-program=<cmd>inside a compressed directory was read by bsdtar as an option and ran<cmd>; option parsing is now terminated before the member names. The archive, convert and probe children ran unsandboxed whenbwraporprlimitwas missing, and now refuse the job instead. A Dropbox share URL was interpolated into a shell command, and now goes towl-copyas an argument. A copy source opens withO_NOFOLLOW, closing a same-uid race. Thanks @prognost1c. - Typing a name no longer trashes a file. The type-ahead only ever fired for a printable key
keys.tomldid not bind, so it worked for the letters nothing else had claimed and taught a habit that reachedd: typing "Vid" selected, jumped, then trashed the row. An unbound letter now names the filter, and trash takesddwhereDeletestill takes one press. Fixes #7, reported by @twharmon. - The rail scrolls, and its cursor is reachable. Its rows had no viewport at all, so a rail taller than its own height could not show its bottom rows by any means. Thanks @joewinke.
gandGwork in the rail. The keymap sheet advertised them as first and last row, and the rail answered neither.- The path bar's Tab no longer deletes what you typed. A case-insensitive completion returned the common prefix of its matches, which can be shorter than the leaf:
reagainstREADMEandReadMe.bakhanded backR, silently. - A tab opened from search results remembers the directory you were in rather than the scope the search walked, and lands on it. A refused tenth tab no longer cancels a running search first, closing a background tab no longer closes the current tab's preview, and no tab switch that re-lists carries a selection, because indices name different rows once the listing is re-read.
- Lifted
muted,symlinkandexecutableto WCAG AA against the ground they are drawn on, kept error lines and undo hints until the next message or Escape, named the icon-only chrome for screen readers, grew icon-only hit boxes to 24 px, and stopped Mode and Kind sending a sort the backend refuses. Thanks @smillunchick. - Dropped the drop shadow under floating menus and dialogs. Thanks @smillunchick.
Packaging
Flea is on the AUR, packaged by @taxin-404: flea for the releases and flea-git for main. omarchy update upgrades AUR packages on every run, so omarchy pkg aur add flea is now the install and there is finally something that tells you a new version exists.
Measured
Re-run against the field on both fixtures, three runs per entrant, cold cache, with main
benched on the same box the same day as a control.
Flea keeps every column it held. Settled listing is first of seven on the 100,000 file fixture
(1,217 ms, 4.34x over dolphin) and first of six on the media fixture (2,631 ms, 1.21x over
nemo, at equal work of 36 thumbnails). CPU is first of seven on both (1.01 s and 1.49 s).
Memory is first of seven on the scale fixture at 110.5 MiB.
This release costs about 5.5 MiB of resident memory, and that is measured rather than
estimated: main read 105.0 MiB on the scale fixture and 113.1 MiB on the media fixture the
same day, against 110.5 and 118.9 here. The cost is flat across both fixtures, so it is the
new QML surface and one added FileView rather than anything that grows with the directory.
The consequence is worth stating plainly: memory on the scale fixture was won by 6.1 MiB and
is now won by 0.5 MiB over pcmanfm, and two runs of this same build straddled that ordinal,
so read first place on that column as a coin flip at this margin rather than as a result. The
recovery is the Loader gating already measured at 14.7 MB and recorded in AGENTS.md, which
needs ui/Pane.qml split first.
0.1.2
0.1.2
flea --versionprints the installed version. Updates are a manualgit pulluntil an AUR
package is possible, so until now the only way to tell which build you were running was
pacman -Q flea. The output is bare, no name and nov, so a script can read it without
parsing, and the flag is answered before every other mode so nothing can shadow it.
Nothing else changed. No benchmark numbers move.
0.1.1
v0.1.1
A patch release: one reported test failure whose root cause turned out to be a class of three,
and two corrections to the media benchmark. No product code changed, so Flea's own field-bench
numbers are untouched.
-
backend::kindasserted that/usr/share/mime/application/msword.xmlcarries the English
comment "Microsoft Word Document". That file is generated byupdate-mime-databasefrom
everything in/usr/share/mime/packages/and no package owns it, so its untranslated comment is
whatever an installed application happens to supply:libreoffice.xmlgives that string and
shared-mime-info's ownfreedesktop.org.xmlgives "Word document". The diagnosis in the report
was distributions shipping different wording, but the reporter runs the same Omarchy 4.0.2-1 and
the same shared-mime-info 2.5.1-2 as the development box, so the variable is an unrelated
installed package rather than the distribution. Fixes #1, reported by @tempest-chaoscreator. -
Two more tests in the same class, found by sweeping for it rather than by another report.
a_type_with_no_untranslated_comment_answers_nonepassed on the development box only because
libfm is installed: on a stock box the file it reads does not exist, so it passed by reading
nothing and proved nothing about the property it names. The thumbnailer tests asserted that
evince, ffmpegthumbnailer and glycin are installed, and none of those is even an optional
dependency, so they failed on a stock box for correct behaviour. Content assertions now read
fixtures through thefrom_strandfrom_pairsseams these modules already had, and each
module keeps one live test that asserts shape rather than vendor wording. The suite is 335
tests, up from 332, and it passes against a mime root built fromfreedesktop.org.xmlalone,
which is the root that reproduced the reported failure. -
The media bracket said
stratadrew no thumbnails and could thumbnail no format at all. Both
readings came from counting files in the shared thumbnail cache, and strata persists nothing
there: it renders each thumbnail into a scratch directory it deletes on drop and holds the image
in an in-memory cache. One blind instrument produced two agreeing wrong numbers. Reported on the
release thread by the project's operator, who had seen the thumbnails on screen. -
stratais now measured by a live watch and ranked. It draws 205 thumbnails on the media
fixture, settles in about 30,800 ms, and uses 70.3 MiB and 1.82 s of CPU. Its work count and its
timing come from the same runs rather than from two instruments on two days. Flea keeps both
columns it wins, settled listing first of six and CPU first of seven, though the CPU lead is now
1.28x over strata rather than 3.61x overnemo; its memory placement moves from fifth of six to
sixth of seven, because strata uses less. The 100,000 file bracket is unchanged.
Timing figures are medians of three cold runs and should be read as magnitudes rather than
constants: repeat batches on the same box disagree by a factor of two or more. The CSVs, their
manifests and the chart generator ship in docs/bench/, so every number above can be re-derived
and every committed chart re-checked.
0.1.0
A file manager for Omarchy: a Quickshell front end over a Rust backend.
What it is
Keyboard first, with the Finder chords read against Ctrl. Fuzzy search across
home with clickable results. Drag and drop in both directions that follows
Finder's rules: a move within a volume, a copy across one, Ctrl forces a copy,
and a drag from another application or another Flea window always copies. Undo
on every write. Preview that pages contracts, spreadsheets, recordings, code,
archives and clips. A mark that tracks the compositor rounding and the live
theme.
Field bench
Measured cold against eleven file managers on one box, GUI against GUI and TUI
against TUI. Numbers below are the GUI bracket on the 100,000 file fixture,
derived by tools/flea-bench-report from the CSVs in docs/bench/.
| Column | Flea | Placement | Next entrant |
|---|---|---|---|
| Time to a settled listing | 1,166 ms | first of seven | dolphin 5,339 ms, 4.57x |
| Memory, PSS | 106.7 MiB | first of seven | pcmanfm 111.3 MiB, 1.04x |
| CPU, process tree | 0.96 s | first of seven | strata 7.62 s, 7.93x |
On the media fixture Flea settles in 2,612 ms, first of five, ahead of nemo at
3,372 ms, and takes 1.42 s of CPU against nemo at 5.13 s.
Timing figures are medians of three runs and should be read as magnitudes, not
as constants: repeat batches on the same box disagree by a factor of two or
more. The CSVs, their manifests and the chart generator ship in the repo, so
every number above can be re-derived and every committed chart re-checked.
Requirements
Omarchy with Quickshell 0.3.1 and Qt 6.11. Build with makepkg, which runs the
Rust suite and the QML checks as part of check().