You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Multi-entry mode. Pass --entry MONITOR:DIRECTION repeatably on the CLI to ferry to a single Android device from multiple monitor edges at once. Example: mouseferry --entry 1:right --entry 2:bottom triggers the ferry both from the right edge of monitor 1 and from the bottom edge of monitor 2.
All four directions.top and bottom join left and right as valid edges (top/bottom available only via --entry, not in single-entry config mode).
Dynamic return. By default, the cursor returns based on your sweep direction: sweep left/right → warp to the monitor of an entry with right/left direction; sweep up/down → warp to an entry with top/bottom. No need to remember which entry triggered the ferry — the sweep itself picks where to come back. A new pure helper winning_entry() evaluates all configured entries against the current sweep accumulator.
--return MONITOR override. Forces a fixed return target (warp to center of that monitor regardless of sweep direction) for users who prefer the static behavior.
Conflict-tolerant CLI. Passing --left/--right/--monitor alongside --entry prints a warning (not an error) and proceeds in multi-entry mode. Safe for incremental migration.
Pre-flight validation. Malformed --entry values fail fast with a clear message and exit 2, before any X/adb/evdev I/O. Works cleanly in headless/CI contexts too.
Fixed
entry_matches bounding-box bug. The edge check now verifies the cursor is inside the target monitor's full bounding box before checking proximity to the named edge. Previously --entry DisplayPort-2:bottom could match instantly at launch if the cursor was on a different monitor located below DisplayPort-2. The same bug existed latently in v0.1.1 but was invisible in most setups. 4 regression tests added.
Tests & CI
61 unit tests (up from 24 in v0.1.0). New coverage for parse_entry_spec (8), direction_return_config (5), entry_matches happy path + cursor-past-edge regressions (13), winning_entry (7), plus threshold/whitespace edge cases. CI (ruff + pytest) green on every push.
Compatibility
100% backward compatible. No --entry? Same behavior as v0.1.1 — config-driven single-entry on left/right.
Multi-entry is CLI-only by design (no [entries] config section). Use shell aliases for recurring setups:
alias mf-office='mouseferry --entry 1:right --entry 2:bottom'
Linux / X11 only (Wayland unchanged). Hotplug still requires restart.
Closes
#1 — Multi-entry monitors with per-monitor direction