Skip to content
- hints: add exit-on-unmatched flag to dismiss overlay on unmatched key (#1718) (1c47ad5)
- accessibility: skip tccutil reset when access is already granted (#1721) (547ece3)
- darwin,overlay: place grid label characters where the font puts them (#1727) (519a693)
- darwin: ensure autorelease on posted mouse and key event (#1730) (a845c1a)
- darwin: restore overlays on every Space after a fullscreen video (#1729) (99df1e0)
- modes: sort per-mode hotkey lookup with consistent modifier orders (#1734) (fac8776)
- darwin,overlay: improve overlay memory and faster activation (#1726) (cca76da)
- windows,overlay: release hidden overlay surfaces (#1728) (0388561)
- force the keyboard layout on Linux and Windows, and list layouts in neru doctor (#1715) (779ef0c)
- linux: keep Wayland bindings on a Latin layout while another language is active (#1709) (08c53d9)
- linux: keep X11 bindings on a Latin layout while another language is active (#1711) (7ddd0cc)
- linux: take the keyboard on X11 when a hotkey starts a mode (#1710) (25cd4c0)
- windows: keep punctuation hotkeys working while a non-Latin layout is active (#1712) (dda2b2a)
- windows: post drag motion as relative deltas so WinUI text selects (#1706) (5556bcf)
- windows: run exec commands without a console window (#1708) (324c051)
- cli: add ability to cycle
--strategy and --capture-scope (#1690) (8181c1d)
- modes: add bisect mode (#1678) (e67045c)
- modes: repeat a bisect cut with —count in one press (#1682) (5dbfcee)
- modes: support
--capture-screen for grid and recursive grid (#1686) (6576c70)
- overlay: scale label fonts down to fit their cells and badges (#1692) (1f70879)
- config: use arrow key for mouse move in bisect for consistency (#1681) (7484b67)
- darwin: repair overlays pinned to one space after a fullscreen exit (#1687) (c32e3dc)
- lifecycle: make
neru stop pause every mode, action and hotkey (#1689) (570042a)
- linux: build on distros whose pipewire emits -fno-strict-overflow (#1697) (22c3edc)
- modes: keep every monitor reachable when displays share a name (#1676) (f7ccc96)
- scroll: release held modifiers around a Wayland scroll (#1683) (437f35e)
- windows: keep hints inside the focused window frame (#1688) (1187d94)
- hints: make the contour detector’s thresholds configurable (#1651) (c166699)
- config: reject NaN and infinite floats in every option (#1652) (94a6a13)
- grid: plan cell sizes in apparent units on scaled Windows and X11 displays (#1658) (496313c)
- linux: make a bare modifier tap reach the compositor while a mode is open (#1666) (69f3dad)
- linux: make a hotkey click on Wayland land where the cursor is, unmodified (#1656) (2cb6a2a)
- linux: name mode chords with the activation modifier still held (#1653) (e9a57cb)
- overlay: draw only hint labels and badges bold on Windows and Linux (#1657) (c976d44)
- overlay: identify the overlay window as
neru-overlay on every platform (#1661) (995800b)
- windows: keep idle overlays responsive (#1648) (33f4997)
- windows: post drag motion so a held click selects and drags across a warp (#1664) (fb832ed)
- windows: scale overlay fonts and geometry to the monitor’s DPI (#1655) (6132dd8)
- windows: use Direct2D for the overlay instead of silently falling back to GDI (#1660) (2695e17)
- hotkeys: glide the cursor smoothly while a relative-move key is held (#1626) (89b6f1c)
- hotkeys: repeat a held global hotkey on Linux and Windows (#1621) (19b40a3)
- install: install, update and remove Neru with one curl or irm command (#1630) (30fc7f5)
- linux: make Wayland mode activation instant with a lifetime keyboard proxy (#1600) (52fa240)
- linux: support cosmic desktop (#1636) (f65d3a4)
- linux: support gnome wayland (#1638) (7e3290b)
- modes: add support for user declared custom mode (#1629) (3a3ee0e)
- cli: open the docs on Windows, where the tray already knows how (#1620) (16a3c90)
- hints: ask for screen-capture consent before the contour strategy runs (#1596) (71d1b34)
- hotkeys: bind Delete to the backspace key on Linux, as on macOS and Windows (#1624) (2cbe3ce)
- install: keep the PowerShell window open and respect the execution policy (#1631) (ed79130)
- install: notice Nix launch agents and clean up the old installer’s systemd unit (#1632) (212a7d1)
- linux: capture Bluetooth keyboards that expose a volume axis (#1633) (90f1447)
- linux: keep the kde focused window current after the tray closes the bus (#1642) (e092e6d)
- linux: keep the Wayland keyboard alive when a remapper grabs Neru’s proxy or starts after it (#1604) (1e8e7da)
- linux: keep Wayland hotkeys working with a key remapper across its restarts (#1602) (cffb996)
- linux: name keys by the character they type so Shift+Tab and PageUp bindings fire (#1599) (1516fb7)
- linux: pick the x11-focused window for hints instead of a chromium frame (#1645) (3029791)
- linux: place KDE screen-capture streams that carry no position (#1635) (66f2f45)
- linux: recognize labwc and the wlroots desktop tag (#1637) (61844b7)
- linux: release forwarded keys on the proxy keyboard when it fails open (#1619) (00715b3)
- linux: round a scroll to the nearest notch instead of truncating it (#1618) (ad4dc5c)
- linux: stop a mod hotkey chord opening the desktop launcher on Wayland (#1634) (cdc0a1e)
- linux: stop a modifier sticking after a Wayland mode launched from a compositor binding (#1603) (7831a5b)
- linux: track windows already open when neru starts on wlroots (#1643) (88463d4)
- linux: warn once when passthrough_unbounded_keys is set on the X11 backend (#1625) (4e6659f)
- modes: click where a held-key glide left the cursor, not on the grid selection (#1627) (3655957)
- scroll: apply a sticky modifier to scroll actions (#1615) (2eb92ff)
- windows: carry the action’s modifiers on injected clicks and drags (#1614) (c331fa2)
- windows: dispatch keys off the low-level hook thread, as the other taps do (#1617) (f151a66)
- windows: keep a stopped keyboard hook’s WM_QUIT off other message pumps (#1598) (73730a9)
- windows: stop the grid cells reappearing behind an open subgrid (#1622) (4c8268c)
- grid: allow bounded coarse selection labels (#1537) (ed456c4)
- hints: add wl-kbptr contour-based hint strategy on Linux (#1543) (c3aaea9)
- hints: bring the contour strategy to macOS with a capture scope (#1550) (3509ed3)
- windows: capture the screen with BitBlt so the contour strategy works (#1575) (52bcf64)
- windows: draw the virtual-pointer indicator in grid mode (#1581) (3a1f787)
- windows: grid and recursive-grid transition animation (#1583) (97587e4)
- windows: horizontal scroll injection (#1578) (bed6ccf)
- windows: key feed via SendInput (#1594) (ceada7a)
- windows: modifier passthrough and PostModifierEvent (#1579) (8ce1292)
- windows: monitor_select mode (#1580) (2bd90d7)
- windows: native notifications via tray balloon tips (#1586) (623c0cd)
- windows: neru services via Task Scheduler (#1587) (d396055)
- windows: publish display changes as screen-parameter events (#1573) (77a203b)
- windows: publish foreground-window changes through the app watcher (#1572) (fd20eb4)
- windows: resolve font families against installed fonts (#1588) (fc89ada)
- windows: smooth cursor animation, including relative moves (#1584) (39309dc)
- windows: smooth scroll animation (#1585) (110d22b)
- windows: verify the named-pipe server owner before connecting (#1589) (9a3987b)
- windows: vision strategy via Windows.Media.Ocr (#1576) (47bdcf8)
- windows: walk the full UIA tree with a cached FindAll (#1577) (320448d)
- app: guard observer hooks against a config reload racing startup (#1590) (7ba7e26)
- cli: present the Linux and Windows startup notice as beta status (#1595) (6518697)
- linux: make modified scroll work on hyprland (#1474) (5792e25)
- linux: report when scrolling falls back from uinput on wayland (#1570) (2199826)
- linux: stop wayland scroll sending a second, reversed notch per press (#1571) (8df1c41)
- windows: keep sticky modifiers out of global hotkey matching (#1591) (945bf4b)
- windows: prevent overlay flashes when reopening (#1545) (2611b0f)
- windows: draw the overlay through DirectComposition and Direct2D (#1582) (3fcb25e)
- cli: refuse mode command arguments that were accepted and ignored (#1200) (17f304e)
- config: catch a mistyped mode flag in a binding when the config loads (#1201) (9bce87c)
- config: declare per-platform support for every option, flag and action (#1470) (c943b1b)
- config: let hotkey bindings use the Insert key (#1390) (6d144e2)
- hints: make —debug a read-only probe command of its own (#1197) (5db952f)
- linux: animate smooth scroll on every backend (#1473) (eb6d00a)
- linux: capture the screen on KDE through the desktop portal (#1501) (b9b3265)
- linux: capture the screen on X11 and wlroots compositors (#1477) (9ed69c4)
- linux: draw the hint search input badge on every overlay backend (#1476) (b85744d)
- linux: draw the virtual-pointer indicator in grid mode (#1488) (09292c8)
- linux: manage the daemon as a systemd user unit (#1472) (ad4be0b)
- linux: recognise on-screen text for the vision hint strategy (#1480) (54782e3)
- linux: show a paused tray icon and announce a no-CGO build (#1494) (f19319d)
- linux: show notifications and alerts through freedesktop D-Bus (#1471) (134ad2d)
- modes: refuse mode flags that were accepted and then ignored (#1198) (1a3d9c0)
- nix: add services.neru.settings TOML configuration support (#1332) (4bc637e)
- scroll: honor —modifier on scroll actions (#1449) (5f01bb2)
- smooth_cursor: animate relative cursor moves on Linux (#1183) (cb00d07)
- smooth_cursor: animate relative cursor moves with a fixed per-move duration (#1179) (471235a)
- windows: draw the recursive-grid sub-key preview the way Linux and macOS do (#1369) (8120f05)
- accessibility: stop priming from opening status-bar menus (#1307) (c8cee2f)
- app: notice the first application switch after the daemon starts (#1355) (4506c3c)
- app: release the overlay after the event tap on shutdown (#1516) (55019b8)
- cli: open docs on Linux (#1467) (83cfeb6)
- cli: point —role examples in help and docs at role spellings that resolve (#1381) (04f214e)
- close the log file even when shutdown cannot flush the logger (#1397) (4bed76b)
- config: keep the grid labelled from the characters it is built with (#1264) (3950c8a)
- config: name the application whose clickable role is rejected (#1387) (1cdea36)
- config: reload the grid without racing a mode activation (#1284) (bab09a2)
- config: report a grid label set that leaves cells unreachable (#1280) (339ae1f)
- config: report an inert held-repeat acceleration setting in config validate (#1260) (530981e)
- config: report every faulty grid label in one validate run (#1285) (dfdb0c8)
- config: update derived values when config set changes their source (#1274) (76e444d)
- config: warn when a clickable role draws nothing on this platform (#1383) (33646b1)
- darwin: build on Apple clang 15 (#1306) (5dcf384)
- darwin: repair overlays the WindowServer silently pins to one Space (#1181) (3129f3a)
- darwin: stop an unmodified scroll inheriting held modifiers (#1450) (1458502)
- darwin: stop macOS actions firing at a point the cursor has left (#1420) (40f3643)
- eventtap: apply per-app hotkey overrides after switching apps mid-mode (#1273) (17a34a9)
- eventtap: make numpad Enter match Return bindings on macOS and stop numpad Clear firing delete (#1377) (aba948d)
- eventtap: make PageUp, PageDown, Home and End work on X11 and Windows (#1382) (cb29a03)
- eventtap: make the Insert key work on X11 and on Windows (#1403) (0e3b536)
- eventtap: make the keypad navigation keys work on X11 with NumLock off (#1395) (e028db3)
- eventtap: make the keypad work on Linux when the keyboard layout cannot be read (#1400) (d92ddc1)
- eventtap: stop the daemon hanging on quit during an app switch (#1514) (9a835e1)
- grid: draw the subgrid with the keys it accepts (#1275) (16564ea)
- grid: drop o from the alphabet a misconfigured grid falls back to (#1282) (ccfc21c)
- grid: stop a repeated character drawing cells nothing can select (#1283) (247c5c1)
- hints: make search_field and switch produce hints on macOS (#1378) (43b664a)
- hints: restore —debug printing elements instead of drawing hints (#1196) (c9bae53)
- hints: stop a hung app blocking the keyboard when a display changes (#1248) (e6ff491)
- hotkeys: keep global hotkeys working while a mode is active (#1520) (b910e19)
- ipc: scope the IPC endpoint to the user running the daemon (#1524) (8075782)
- linux: fall back to the generic font when the configured family is not installed (#1340) (7fcdc3e)
- linux: follow the physical mouse when selecting the active monitor on Hyprland (#1447) (7b0fc43)
- linux: honour the corner radius on hint boundaries and recursive-grid labels (#1357) (c067d44)
- linux: keep the KDE remote desktop grant across daemon restarts (#1485) (f3a0d37)
- linux: let X11 global hotkeys use Backspace (#1401) (3581735)
- linux: let X11 global hotkeys use PageUp, PageDown, Home and End (#1394) (71712a3)
- linux: report a hint placement the overlay cannot draw (#1331) (b1afe4b)
- linux: report focused-window bounds on KWin instead of the active screen (#1489) (600d5d5)
- linux: report the display server neru is actually driving (#1435) (097899b)
- linux: report the notification backend KDE actually has (#1505) (8a7bf05)
- linux: report when a no-cgo build cannot run Wayland global hotkeys (#1432) (f1b6640)
- linux: report where the focused window is now on KDE, not where it was (#1521) (9d98e5f)
- linux: show the subgrid instead of a stale frame when a cell is picked (#1507) (65bec87)
- linux: stop a modifier Neru injects on X11 latching as a sticky modifier (#1504) (a174f1e)
- linux: stop an X11 click carrying modifiers the user is physically holding (#1503) (de52958)
- linux: stop an X11 scroll carrying modifiers the user is physically holding (#1481) (b6c2942)
- linux: stop hint offsets from installing a KWin script on X11 (#1437) (922986b)
- linux: stop reporting a hint search input the overlay never draws (#1354) (10efe0f)
- linux: stop reporting a window with no pid as a failed X11 query (#1513) (c34e3cd)
- linux: stop the grid cells reappearing behind an open subgrid (#1509) (c225a0d)
- linux: stop X11 hotkeys and the KDE geometry helper from sharing what they should not (#1527) (c20a10b)
- linux: tell a failed compositor query apart from an unfocused desktop (#1512) (2f2f435)
- linux: tell an unfocused X11 desktop apart from a failed active-window query (#1499) (6c6f76d)
- logging: keep the daemon log per-user and out of its own content (#1523) (a919ca7)
- make a held scroll key travel as far as the same number of presses (#1498) (1242da8)
- modes: keep a wedged app from stalling a keystroke inside a mode (#1251) (e70dc86)
- modes: keep the keyboard captured across a mode-to-mode switch (#1519) (d07174f)
- modes: stop the monitor-move lock test failing on a busy machine (#1247) (b11d008)
- nix: stop the Linux source build failing on a rejected pipewire cflag (#1517) (0b67937)
- overlay: honour generic font aliases in the monitor picker and virtual pointer (#1336) (4f7d684)
- overlay: honour the virtual pointer’s char and font size defaults on macOS (#1358) (297f4e4)
- overlay: keep odd-sized badges at their full size (#1330) (bcc63f7)
- overlay: report a hint label placement the macOS overlay cannot draw (#1360) (d7b5844)
- overlay: report a hint search input anchor the overlay cannot place (#1356) (e1d5558)
- overlay: resolve each font family name from its own spelling (#1308) (c053f52)
- overlay: resolve generic font names the same way on every platform (#1290) (8accea2)
- overlay: stop Linux crashing when the overlay is torn down mid-animation (#1419) (d639a2b)
- scroll: anchor scrolls where the cursor is headed during animated moves (#1182) (c56be6b)
- stop warning about a logger flush that never could succeed (#1388) (303a2e8)
- windows: honour hints.ui.placement instead of pinning every label to the element corner (#1367) (4fd6d76)
- windows: keep the daemon alive across thousands of mode activations (#1526) (9733a3e)
- linux: paint the grid subgrid and its pointer in one repaint (#1510) (7696232)
- windows: stop re-resolving the font family on every drawn overlay label (#1361) (c68f80b)
- action: add
--bail-on-error to stop a sequence at a failure (#1140) (02c01da)
- action: add
--slot for named cursor marks (#1145) (ce5d664)
- action: add
move_cell for same-layer grid navigation (#1138) (5abc492)
- action: add
run for ordered action sequences (#1139) (224b1ed)
- action: hold, release, and toggle any mouse button (#1119) (f92b475)
- cli: add
--json output to neru status (#1143) (887101b)
- cli: add
--state to the toggles and a macro command (#1144) (3931d0f)
- config: add
[macros] for named, reusable action sequences (#1141) (97597b4)
- config: cross-platform role vocabulary for clickable_roles (#1124) (204cacc)
- held_repeat: accelerate step distance while a key is held (#1120) (ef9e12c)
- linux,wayland: resolve focused application (#1105) (ff0c6fe)
- linux,windows: support function keys F13 through F24 (#1118) (7303270)
- linux: event-driven focused-app changes for per-app config (#1115) (8c9500c)
- linux: feed keys through uinput when /dev/uinput is writable (#1130) (04c885b)
- linux: hint arrows for top/bottom placement (#1111) (6a4112b)
- linux: modifier passthrough on Wayland evdev (#1109) (31c84f8)
- linux: mouse action indicator on X11 and Wayland (#1110) (c907c7a)
- linux: multi-monitor parity for X11 and wlroots/KWin (#1125) (a066493)
- linux: smooth cursor animation for X11 and Wayland (#1108) (13dc1ba)
- linux: Wayland hints support, app watcher, and overlay fixes (#1107) (2988aa4)
- modes: add
--on-exit flag to modes (#1131) (f8ba0cf)
- action: make
feed --mode a discrete press-and-release (#1128) (421be62)
- config: accept comma-separated action chains in hotkey bindings (#1132) (593543b)
- config: report an invalid reload instead of blocking on the alert (#1142) (77282a5)
- darwin: enable clang-tidy analysis and fix the findings (#1155) (e18057f)
- darwin: invalidate CGEventTap Mach port before releasing it (#1150) (867e717)
- darwin: keep cursor accurate and visible under Accessibility Zoom (#1117) (b5e5a8b)
- darwin: release AX elements leaked during accessibility priming (#1152) (e1b9e9b)
- darwin: skip WindowServer work for healthy overlays on Space changes (#1151) (da0373d)
- linux: bound AT-SPI calls and surface real hints failures (#1121) (09680e8)
- linux: honor XDG base directory environment variables (#1171) (d22e474)
- linux: render overlays properly on the selected monitor (#1129) (fd2def9)
- linux: stop hints clearing on Wayland refresh (#1113) (83970f0)
- report Linux capabilities from live probes and cover the whole grid (#1136) (fc178e0)
- systray: unify tray icon assets and honor SetIcon everywhere (#1172) (2e63f1e)
- linux: resolve focused frame without scanning the whole a11y bus (#1122) (d2934f1)
- linux: use AT-SPI Collection.GetMatches for hint element collection (#1114) (b812044)
- config: add
--no-reload for set and add reset (#1083) (2920864)
- config: persistent
config set via override files (#1082) (6398fa5)
- install: unify the Windows binary, add cross-platform uninstall (#1103) (fc8e1f0)
- linux: support animation for recursive grid (#1089) (b800247)
- recursive_grid: add
--zoom-to-depth flag (#1077) (3dfe895)
- linux,wayland: make evdev capture persistent with kb hotplug support (#1086) (e345661)
- linux,wayland: prevent hotpulgLoop busy wait (#1088) (c519875)
- linux,wayland: prevent stale evdev state from causing stuck keys after grab (#1087) (cdd466a)
- linux,wayland: sync cursor before mode activation (#1091) (f94f72a)
- linux,wayland: use compositor keymap to respect XKB options (#1097) (fb4fe8e)
- linux: disable default global hotkeys to avoid collisions (#1081) (3625f39)
- linux: gate AT-SPI accessibility init and ensure reset on quit (#1085) (986f064)
- linux: recover evdev global hotkeys post-sleep and fix health check (#1092) (154ae6c)
- linux: resolve evdev hotkey deadlock post-suspend and preserve RemoteDesktop session (#1094) (16be957)
- replace startup warning on launch with dynamic capability notice (#1084) (03b2d5c)
- update cross platform feature parity with details (#1095) (6a9842b)
- allow
--modifier in mode --action (#1040) (ba7cb19)
- allow multiple clicks for
--action and action (#1039) (afea90a)
- cli: add
neru config set for runtime config changes (#1071) (a130074)
- darwin,action: add hide and show system cursor action with virtual pointer (#1059) (b3d6feb)
- darwin,hints: auto-detect bundle types (#1035) (db5682f)
- hints,cli: add
--hide-on-empty-search flag when search is empty (#1044) (a850c32)
- hints,vision,darwin: add
--split-word flag for vision only (#1041) (dfc76db)
- make virtual pointer fully customisable (#1061) (7c18422)
- recursive_grid,config: add
label_autohide_multiplier to hide cramped labels (#1054) (d8c4eb3)
- recursive_grid: add
label_char and sub_key_preview_label_char config options (#1045) (d95bb36)
- cli: write output to stdout so that they are pipeable (#1047) (bcddd01)
- config: ensure
app_configs merges properly without defaults (#1042) (204c0fd)
- darwin: auto-rehide cursor when macOS reveal it (#1065) (a2f6184)
- darwin: use a lightweight handler for space changes (#1032) (83351be)
- guard against integer overflow in allocation size computations (#1074) (f7136b9)
- hints: separate
cycle_hint from action execution (#1043) (b65861f)
- linux,wayland: sync cursor cache after move relative (#1056) (b0f6a97)
- linux,windows: ensure proper render for configured virtual pointer (#1063) (2f859e1)
- linux: add nocgo stubs for consistency (#1037) (2c27777)
- linux: ensure subkey preview autohide checks the subcell dimensions (#1066) (c1a436d)
- linux: use native relative pointer motion (#1055) (542866f)
- recursive_grid,darwin: pass font family to sub-key preview renderer (#1048) (75ac644)
- recursive_grid,overlay: evenly distribute cells and round centers to nearest pixel (#1046) (e0fee73)
- recursive_grid: distribute remainder pixels contiguiously (#1062) (b9d2367)
- cli: rewrite with proper grouping (#1068) (860db8b)
- troubleshooting: Add notes about element size and element type, clean up Electron/Browser troubleshooting (#1029) (e6d0211)
- troubleshooting: explain missing hints on multi-monitor setups (#1031) (14ec9ed)
- add
app_configs for global hotkey overrides (#1008) (b1a4c67)
- cli,action: add
--mode flag to action feed to feed keys into neru (#999) (fe23531)
- hotkeys: let per-mode hotkeys override a global hotkey on the same key (#993) (c95ccf5)
- linux,wayland,kde: add
action feed support (#1013) (c28300b)
- darwin,stick_modifier: prevent random sticky modifier toggles (#1011) (22bc23c)
- hints: keep labels on screen during refresh instead of blanking (#1012) (4638626)
- hints: lower down
minElementSize to 10 for smaller sized hints (#1020) (eefb876)
- linux,kde: work around KDE EIS keyboard drop bug (#1021) (8ff4a32)
- linux,recursive_grid: render subkey preview properly when enabled (#995) (1da2cd2)
- linux: recover from stale evdev/libei connections after sleep and config reload (#1023) (a43eb4e)
- lower down minimum font size to
1 and add missing validations (#1024) (c196b93)
- add bernatGene config showcase (#1010) (32958a6)
- tips: add commands to open a new window and edit config tips (#997) (d2816d3)
- tips: add mode-cycling and element-targeted shortcut recipes (#1004) (fcbcd5b)
- darwin,ci: pin arm64 CI runner & enforfe macos 14 minimum (#990) (e80285b)
- cli: add
--bail flag to wait_for_mode_exit for chain abort-on-cancel (#970) (92289a2)
- darwin: new
monitor_select mode with overlay (#963) (6ba2aab)
- darwin: replace Carbon hotkeys with per-hotkey CGEventTaps (#967) (fd77dd5)
- linux,kde: add support for KDE linux (#931) (b7563a4)
- darwin,monitor_select: allow current monitor to be selectable (#964) (ad2dcb5)
- darwin,monitor_select: remove unneeded
isCurrent theming (#965) (242e37b)
- darwin: keep indicators visible after wake changes (#962) (444ccf9)
- darwin: keep mode indicator visible across Spaces (#956) (34b9499)
- windows: correct active monitor detection (#966) (b7b03e1)
- hints: add
label_direction with different algo (#934) (9cf45b7)
- linux,wayland: render overlay at output buffer scale (#955) (8c8482a)
- windows,overlay: rewrite overlay renderenig with real per-pixel alpha and full theme support (#950) (8b1fa57)
- windows: add native alert dialogs for validation and startup (#948) (1b52c02)
- windows: embed app icon in .exe (#949) (90850f0)
- windows: initial basic support implementation (2b637ba)
- darwin,overlay: keep mode indicator visible after reactivation (#936) (c41f96f)
- grid: avoid overlay redraw flash on mode exit (#954) (5f07607)
- linux,wayland: prevent keyboard grab leak from evdev EINTR and blocked poll (#953) (d1bea3d)
- windows,config: use proper windows path for config, shell and path validation (#943) (c679e6f)
- windows,hints: render badges atomically for correct z index (#952) (208db03)
- windows: align roles for hints and fix styling (#951) (7677bb4)
- windows: auto launch daemon when running .exe (#944) (6d504ef)
- windows: consume non-modifier key-down events to prevent passthrough to apps (#947) (a10a27a)
- windows: ensure exe launches and quit properly (#946) (f12d0cd)
- linux,wayland: send 1-notch scroll events to prevent clipping (#927) (0a12df9)
- linux: badge overlay to follow cursor pointer (#920) (5288eee)
- linux: improve sticky modifier detection (#926) (8c685dd)
- resolve fonts via ports on all platforms (#928) (e807897)
- add
--toggle flag for all modes (#910) (80725a4)
- cli: remove actions
space, move_window_to_space and focus_window (#902) (088f535)
- config: make held-key repeat configurable (#914) (0230a63)
- default-config: tweak
recursive_grid.min_size_* to 1px (#913) (219015c)
- linux,overlay: hook grid colors into theme (8b5df46)
- linux: detect dark mode via xdg portal + kdeglobals (#892) (34d9db4)
- linux: proper theme observer for mode changes (#918) (8b5df46)
- systray: add
Open in Editor for config (#911) (c8e12f7)
- ensure cross platform log file path (#908) (4aaf9df)
- hints: validate and dedupe hint characters (#916) (c3e5169)
- linux: ensure
devbox works with proper png-config initialisation (8b5df46)
- properly resolve keyboard layouts on layout switch (#907) (b9e4c6f)
- cli: add
focus_window action to cycle window on active space (#884) (ead9855)
- cli: add action to move focused window to a workspace (#895) (245cfc6)
- cli: add action to switch native workspace by index (#894) (1eb97a5)
- config,hotkey,cli: make
exec shell configurable (#890) (d07ce38)
- default-config: promote 3x3 recursive grid to default grid (#882) (3e0e581)
- scroll,systray,cli: add
invert_scroll for direction inversion (#883) (e7d622b)
- overlay,indicator: revert #832 optimisation that causes regression (#887) (1ade137)
- overlay: use dispatch_sync with main thread check for window destruction (#888) (115c27a)
- prevent memory leak during window space transitions (#896) (dc3e284)
- overlay,indicator: dynamically size indicator badge to save memory (#893) (e38e5ef)
- add disclaimer on
space and move_window_to_space implementation (#897) (10304e4)
- update installation requirement for macOS to be 14.0 sonoma or later (1f86955)
- ensure screen capture permission flow consistency (#875) (920d85d)
- hotkeys: ensure consistent initialdelay with interval for repeat (#872) (caf1177)
- installation: add nightly homebrew
install and upgrade guide (#878) (40dfe49)
- make documenation richer for cli for better man generation (#879) (ddcd631)
- hints,vision: make vision options fully configurable (#869) (68c590f)
- hints: add
vision detection strategy (#867) (6fe14f4)
- hints,vision: use
ScreenCaptureKit for modern macOS (#868) (785f95b)
- reduce log noise and remove
structured_logging config option (#864) (ebadd9b)
- show
output in log when exec failes in hotkey (#866) (4aa3b95)
- retrigger github action due to outage during v1.40 release (8f4800e)
- scroll: add similar
<mode>.app_configs with overridables (#849) (1b0de2e)
- cli: expose missing
--role and --text flag on cli (#846) (a5e61a8)
- darwin: harden CGo callback singletons with generation-stamped slots (#862) (0ec420a)
- darwin: protect clickState
performLeftClickAtPosition (#853) (a8bdc48)
- linux,overlay,wayland: add
MAP_FAILED check after mmap in overlay buffer setup (9ebd520)
- linux,overlay,wayland: add
xkb_state_unref and xkb_context_unref to overlay destroy (9ebd520)
- linux,overlay,wayland: embed key ring in
NeruWaylandOverlay instead of file-scope singleton (9ebd520)
- linux,overlay,x11: add null-check after calloc in
x11_overlay_new (9ebd520)
- linux,overlay: close keymap fd outside format check to prevent leak (9ebd520)
- linux,scroll: ensure
__keyup_<key> on release just like darwin variant (9ebd520)
- prevent goroutine leak on context cancellation in
processClickableNodesConcurrent (#852) (f76b4a7)
- rename variable to ctx to avoid package shadowing (#851) (cabc51d)
- darwin: replace layout map init busy-wait with NSCondition (#856) (4cffc9a)
- hints: configurable visibility check for noise reduction (#844) (48b3ff7)
- hints: mission control notifications and actions (#842) (2218dd2)
- hints: ensure ctx cancellation for chaining calls (#839) (c413124)
- hints: reverse hints label to prevent prefix cluster (#845) (7781e24)
- preserve mode flags on mode refresh (#843) (5e63847)
- hints: skip AX hit tests for webkit apps (#841) (3646c88)
- ensure retry to set electron and chromium attrs (#834) (a4f4047)
- overlay: ensure modes overlay resized properly before showing (#835) (9d77d15)
- resolve memory leaks in animations, overlays and indicators (#831) (09181b1)
- eliminate thread explosion (#829) (052418b)
- hints: early exit on out of bounds child on chromium or electron (#836) (cc39c82)
- hints: optimize hint generation and filtering performance (#833) (6818af6)
- optimize overlays memory usage (#832) (8e85dfe)
- hints: add
AXGenericElement to default clickable role (#810) (f7196c7)
- hints: add neru own bundle to menubar targets (#802) (df4c515)
- hints: add support for screen capture thumbnail (#800) (1c2146c)
- hotkey: repeat global hotkey actions while held automatically (#817) (1e0429e)
- scroll,cli: add
--steps flag for overrides (#824) (e5cee80)
- hints: add explicit
includeOutOfBounds (#813) (b55ec1d)
- hints: add popovers, sheets and menus into interactive leaf elements (#805) (582523b)
- hints: allow links in textarea (#828) (6c2c919)
- hints: better clickaction heuristic detection (#812) (8ec5b1b)
- hints: better widget detection (#814) (9bd59cd)
- hints: eliminate hidden elements and simplify filtering (#821) (fc57e51)
- hints: ensure menubar elements include out of bounds (#815) (4a147b3)
- hints: filter zero-sized elements during tree build (#825) (7853065)
- hints: improve mission control detection (#807) (5ae21e2)
- hints: improve notification center hints (#808) (01a670a)
- hotkey: eliminate initial repeat delay for held-key actions (#819) (ad88403)
- hints: add
max_parallel_depth option and bump to 10 (#826) (d62d723)
- hints: faster hints activation (#822) (0f1afcb)
- hints: improve hint visibility checking (#818) (f2be692)
- hints: more parallelizing for element collection (#803) (3d9480e)
- hints: optimise AX API calls (#804) (a8476d3)
- hints: reduce AX roundtrips plus parallel tree workers (#827) (82e0629)
- add mouse action indicator (#791) (ae285d2)
- hints: add boundary highlights for targeted elements (#793) (8d05247)
- hints: add native PIP support for mac (#795) (0651fee)
- hints: add simple hints placement customisation (#797) (48de8a8)
- config: remove default launcher keybinds if mode is disabled (#788) (68040c4)
- hints: add capability to search text on subtree (#792) (f694847)
- hints: cap hint generation when elements exceed key combinations (#794) (0305936)
- hints: reduce AX work during hints activation (#796) (3240e0f)
- add smooth scroll animation (#779) (7050362)
- hints,action: add
cycle_hint action (#783) (aff245b)
- hints,cli: add
--search flag to show search input upon activation (#785) (cc14b02)
- hints: add
--role and --text filter flags (#772) (142940f)
- hints: add
search capability similar to homerow (#784) (bdb1046)
- hints: add native IME text input session plus improvements (#786) (a226c54)
- cli: properly support comma-separated values for
--role and --text flags (#773) (0b6b338)
- config: replace default launcher hotkeys on rebind (#778) (7486c19)
- hints: ensure menubar item adhere to strictFiltering (#767) (41e9ba8)
- hints: include
AXPopover windows (#769) (7cc4b28)
- hints: remove
AXTextField from leaf roles so that finder search works (#770) (7ebaa82)
- linux,wayland: do not fallback evdev on first grab fail, try others (#781) (83bb7d7)
- linux,wayland: explicitly enable keyboard interactivity on overlay when evdev fallback (#780) (732f876)
- linux,wlroots: filter out uinput virtual keyboard devices from evdev capture (#776) (4850af2)
- add
sleep action for reliability (#761) (f55ab47)
- add action feed key passthrough cli command (#759) (f041f13)
- cli: add
--window flag for move_mouse command (#765) (610a80b)
- grid,recursive_grid: add
app_configs.hotkey overrides (#763) (1bbedb5)
- allow macOS notification prompts (#753) (a593a24)
- always run alert UI regardless of binary or bundle (#756) (36ee674)
- cli,feed: preserve uppercase letters in action
feed (#762) (aeba2bb)
- ditch
open and purely run the binary for services (#755) (1f9bd4e)
- ensure eventtap and passthrough blacklist resolves the same (#754) (c1c7776)
- ensure global hotkeys are canonicalized before event tap registration (#752) (6134d00)
- strict filtering for Chromium/Electron apps (#749) (e53fea7)
- tips: add snippet to
move window to another native space on macOS (346f892)
- prompt for macOS accessibility permission on startup (#742) (2281b39)
- use proper cert for adhoc code signing (#738) (3789ac6)
- batch
AXUIElementCopyMultipleAttributeValues (#743) (81fb53e)
- linux: add
uinput scroll support as first detection layer (#731) (65a9913)
- support sticky modifiers on supported linux backends (#719) (957ef8b)
- add
super and meta modifier as cmd alias (#703) (997e08a)
- add multi-monitor support (#704) (8316f4f)
- add NixOS module and Linux systemd support for home-manager module (#695) (c2da28c)
- initial implementation for
x11 and wlroots for wayland (#694) (af4dea7)
- move_monitor: consolidate monitor movement and actions (#706) (9088c57)
- allow single-row and single-column recursive grids (#684) (e9e43e6)
- cli: add more profile information to
doctor command (#686) (83dc84d)
- hints: guard visible rows lookup against zero-count results (#689) (9f87280)
- hints: honor app-specific clickable roles during element discovery (#692) (3ab2381)
- hints: traverse AXHeading nodes when building the hint tree (#691) (f45689a)
- nix: add libxi for build input (bdc47e8)
- preserve recursive-grid animation for count-changing layer transitions on macOS (#682) (c720ecc)
- split daemon startup by platform plus some shut down fixes (#693) (6315c8a)
- sticky_modifier: prevent from misfiring on multi-modifier hotkey activation (#710) (f5da80a)
- use
primary modifier instead of cmd for cross platform (#701) (5e24e4a)
- add missing configurations that should be presented (#687) (994ed70)
- remove
trigger keyword and update home manager setup for linux (b0190ff)
- config: add semantic theming and unify overlay color defaults (#676) (0ec0159)
- config: unify color configuration with light/dark theme support (#674) (20937cd)
- recursive_grid: add opt-in native depth transitions/animation (#678) (e1edf43)
- add capability reporting and remove global config access (#669) (239e464)
- anchor sticky modifiers to virtual cursor in grid modes (#671) (460bb56)
- config: add default cursor-follow toggle for grid modes (#665) (14a0f48)
- config: explicitly add ”`” in default-config file (bc909d9)
- config: remove
tap_cooldown field (78c8c1b)
- recursive_grid: ensure move cursor to selection when enable
toggle-cursor-follow-selection (#680) (d562d67)
- show a lightweight virtual selection pointer in hold mode (#666) (48a1c0e)
- sticky_modifier: stabilize activation and chord handling (#667) (18f374c)
- treat manual relative mouse moves as selection override (#663) (e3d920f)
- add per-mode custom hotkeys (#633) (c23426b)
- add support for cursor selection mode (#660) (16a7042)
- cli: add —repeat flag to re-activate mode after action (#637) (24c6ff1)
- cli: add scroll actions (#635) (2e5dc48)
- config: merge hotkeys and custom_hotkeys on top of defaults instead of replacing (#647) (cc2a6d1)
- config: support multiple actions per hotkey binding (#642) (39ed7fa)
- hints: support app-specific hotkey overrides (#649) (e22d3ab)
- unify in-mode bindings under custom_hotkeys and remove legacy keybinding fields (#643) (27a7c8b)
- apply sticky modifiers to IPC-triggered click actions (#654) (09099a4)
- cli: rename
restore_cursor to restore_cursor_pos for consistency (#644) (a6044a9)
- config: rename
mode.custom_hotkeys to mode.hotkeys for consistency (#648) (ec91ac0)
- honor recursive-grid repeat for direct actions (#641) (d464d66)
- sticky_modifier: auto arm modifier detection after short delay (#657) (3bec95c)
- sticky_modifier: gate auto-arm timer on nav mode with sticky modifiers enabled (#658) (ab8afbd)
- add
sleep use cases for clicking and moving cursor (ca5ba20)
- alert: use UserNotifications framework for alert if possible (#628) (5ebadd0)
- nix: use
open with flags instead of running the binary in launch agent (#629) (ae635f8)
- sticky_modifier: add debounce and cooldown to prevent Karabiner conflicts (#625) (9052dee)
- sticky_modifier: emit physical key events when toggled (#627) (1a3ecb1)
- cli: add docs command to open version aware docs (#617) (d4e591b)
- scroll: add action key support to scroll mode (#616) (dc7d7b1)
- config: allow disabling all hotkeys via empty [hotkeys] section (#611) (ced7236)
- config: remove unnecessary defaults for exclusions (#612) (d38e5c8)
- overlay: make label arrow looking nicer in sizing (#619) (cab1b80)
- rename bundle binary from
Neru to neru (#621) (ee93475)
- hints: skip debounce for same-count updates and prevent stale callbacks (#615) (ed1d579)
- add config showcases to documentation from discussion (947077c)
- add homebrew repo link (d26fd65)
- add tips & tricks to documentation from discussion (bcb2301)
- change INFO to NOTE for proper rendering on github (e65b497)
- cli: improve readability and add more info (1f7f571)
- config: improve readability and add missing configuration keys (9c48371)
- add config onboarding flow on first launch (#600) (04cae66)
- cli: add
neru config init and neru config validate commands (#598) (e4b0b91)
- cli: expand neru doctor into a comprehensive diagnostic tool (#603) (e140297)
- cli: prevent duplicate error messages in CLI commands (#604) (cd7221b)
- exit on config validation failure instead of silently continuing with defaults (#601) (41dc09d)
- hints: clear accessibility cache before showing hints to prevent stale positions (#606) (31414f2)
- scroll: remove
ctrl for pageup and pagedown in default config (#596) (02be302)
- sticky_modifier: add tap duration threshold for sticky modifier toggle (#594) (4aba731)
- support simultaneous modifier key taps for sticky modifiers (#592) (c902db8)
- action: add
--monitor flag to move_mouse --center for multi-monitor support (#579) (a2c34fb)
- action: support
--modifier flag (#581) (f51c379)
- add modifier+action workflow for modes (#586) (16a2e71)
- hotkeys: add support for left/right-prefixed modifiers (#582) (9914ec8)
- passthrough: add
should_exit_after_passthrough option (#575) (4f386c9)
- ipc: replace static ProtocolVersion with build version validation (#583) (d9f4ba1)
- make smooth cursor animation non blocking (#580) (cd818ba)
- normalize key aliases (enter, backspace, esc) in modifier combo bindings (#588) (140cc31)
- recursive_grid: ensure to normalise
keyToCell (#565) (0f531dc)
- recursive_grid: make autohide preview multiplier configurable (#573) (a26acf4)
- sticky_modifier: cancel pending modifier toggle on passthrough events (#589) (2f3406c)
- update docs and stuffs for info and reading (#568) (e0de417)
- add app icon with brand new systray icon (#546) (be8a856)
- mode_indicator: customisable text and mode respective colors (#549) (357f9ca)
- passthrough: refresh hints mode after modifier shortcut passes through to OS (#551) (31ba19b)
- recursive-grid: add sub-key preview mini-grid inside each cell (#540) (19349ea)
- recursive-grid: support individual layer customisation for cols, row, keys (#554) (75cff13)
- support
passthrough unbounded keys to the OS (#541) (47db376)
- support mode specific
exit_keys that merges with the global exit_keys (#543) (1eaed7f)
- build: ad-hoc codesign app bundle in justfile, CI release workflow and nix (#547) (da3fe6b)
- eventtap: prevent use-after-free by always dispatching cleanup asynchronously (#556) (277f4fa)
- eventtap: remove 150ms enable delay for instant key capture after mode activation (#555) (8c6d0df)
- recursive-grid: avoid center sub-key preview overlap (#558) (4daea67)
- slim down default config and improve docs (#552) (3b48bc7)
- action: add —center flag to move_mouse command (#516) (d462bbe)
- hotkeys: support function keys F13 through F20 (#524) (5ba6fc4)
- make
backspace configurable in config for each mode (#530) (c989188)
- overlay: implements auto detected
padding and border radius labels (#526) (6f12b54)
- recursive-grid: add optional rounded label badge backgrounds with theme-aware styling (#512) (d74c3d1)
- centralize key mapping with unified ValidNamedKeys registry (#531) (9127b7a)
- config: disable file logging by default (#529) (30bb9ee)
- config: move all visual related configuration to
ui section (#533) (3947c75)
- config: propagate service config updates during hot-reload (#521) (26d1d19)
- config: rename corner_radius to border_radius for consistency (#532) (0e14253)
- cursor: add settling delay before cursor restore after click actions (#514) (da4de9d)
- docs:
backspace is not supported for reset_key for now (#520) (7e14d56)
- add theme-aware default for label_color - Closes #489 (#491) (9d22a6e)
- cursor: Add
center_cursor_position option (#504) (32f903a)
- implements program wide theme aware config for all colors (#500) (8201eb4)
- stable reference keyboard layout with auto-detection and config override (#507) (c5cad50)
- config: revamp the default colors (#505) (c8b4d99)
- eliminate duplicate configSnapshot() in app activation path (#494) (972181b)
- ipc: wire IPC reload through app-level config reload and fix stale config (#496) (6ce064d)
- lifecycle: remove dead q.Style write, keep cache invalidation (#495) (315134a)
- prevent event tap from blocking native thread and fix deadlock in callback cleanup (#509) (9b98230)
- recursive-grid: execute action on final depth selection instead of when reaching max depth (#502) (920104d)
- add auto_exit_actions config option for modes (#486) (e70f6aa)
- default reset_key to space in grid and recursive-grid modes (#481) (b39c6a9)
- docs: need
--action for command with action (0789121)
- also support
-c and --config for launch command (#476) (f1b890d)
- add mutex to protect indicatorConfig from concurrent access (#469) (79aecb8)
- bridge: add mutex to protect global appWatcher from data races (#465) (7db27b8)
- bridge: add mutex to protect global logger from data races (#464) (ec6cf07)
- bridge: cancel pending enable block in disableEventTap (#451) (38f399a)
- config: change default font_size to
10.0 (#449) (d387caa)
- config: close Watch channel on context cancellation (#470) (6996684)
- hints: preserve mode state during refresh and enable auto-activation (#454) (7a1accc)
- infra: add mutex synchronization for eventtap adapter state transitions (#471) (56b2045)
- lifecycle: resolve TOCTOU race in handleScreenParametersChange (#466) (bbc0ba6)
- logger: resolve data race in global logger access (#463) (f6c4d0c)
- overlayutil: validate generation to prevent stale callback race (#467) (9788b42)
- recursivegrid: add screen-change handling with callback-based resize and TOCTOU guards (#468) (a6fc091)
- scroll: add mutex synchronization for context state access (#472) (c10bcfe)
- accessibility: add pointer fast-path in Element.Equal to avoid CGo on cache hits (#438) (1a2a3f8)
- accessibility: use nil instead of empty slice for leaf node children (#437) (a422f9a)
- bridge: avoid temporary NSString allocation in prefix matching loops (#435) (32451f4)
- bridge: use NSSet for O(1) lookup in NeruDrawIncrementGrid removal pass (#436) (5fb5551)
- eventtap: replace dispatch_sync with os_unfair_lock for hotkey lookup (#433) (029b767)
- gc: replace runtime.ReadMemStats with runtime/metrics to avoid STW pause (#439) (3c97f48)
- grid: gate runtime.ReadMemStats behind debug log level in DrawGrid (#441) (d94227f)
- grid: reuse Grid.Index() in drawGridIncrementalStructural instead of rebuilding maps (#445) (0ea1493)
- hints: avoid map allocation in hintsAreStructurallyEqual on hot path (#442) (2b239bf)
- hints: remove element caching from HintService (#444) (cb45be1)
- hints: replace fmt.Sprintf map keys with image.Point in drawHintsIncrementalStructural (#443) (b495951)
- overlays: cache hint labels and add drawMu to prevent use-after-free across all overlays (#434) (30243d9)
- overlay: use dirty-rect partial redraw for match-prefix-only updates (#431) (2ca0373)
- overlay: use system font as default, cache NSFont, and improve font resolution (#446) (5f5c08a)
- tree: add sync.Pool for TreeNode to reduce GC pressure (#440) (b4e9290)
- accessibility: use priority queue for per-role TTL eviction in InfoCache (#422) (420ea16)
- eventtap: use O(1) lookup table for hotkey matching (#425) (77c80fa)
- hints: add max_depth config for accessibility tree traversal safety (#420) (4d40358)
- hints: make parallel tree-building threshold configurable and lower default to 20 (#427) (112e6fd)
- overlay: cache parsed hex colors to eliminate redundant parsing (#426) (82de189)
- overlay: replace NSDictionary with typed model classes for hint and grid cell data (#423) (3d5158e)
- replace per-node debug logs with aggregate statistics (#429) (34ead23)
- accessibility: prevent AXUIElementRef leaks by releasing tree nodes after use (#418) (fd80ec3)
- bridge: add explicit __strong qualifiers to ObjC fields in EventTapContext struct (#417) (1809167)
- bridge: enable ARC and fix memory management in bridge package (#416) (00ce086)
- overlay: include size in hint dicts and use position as center directly (#415) (a931c5a)
- overlay: switch to layer-backed rendering with Retina/multi-monitor support (#412) (77e2be5)
- overlay: use NSPanel with non-activating style to prevent focus stealing (#414) (d04a0c4)
- add configurable mode indicator overlay for every mode (#408) (3463c7e)
- standardize overlay creation and lifecycle across components (#410) (35285c9)
- recursive_grid: allow
grid_cols and grid_rows instead of a fixed NxN (#404) (84c445e)
- recursive_grid: split
min_size to min_size_width and min_size_height (#405) (50ce224)
- rename
quadgrid to recursive_grid (#403) (1c251bb)
- systray: add version-aware docs URL with fallback to main (#400) (28f3c9b)
- use hex alpha for transparency control (#399) (50f4056)
- replace NSWindowSharingReadWrite with NSWindowSharingReadOnly (#396) (f0774b0)
- add screen share overlay hiding via config, CLI, and system tray (#390) (dad9b7a)
- hints: add opt-in Mission Control detection with hybrid caching (#387) (b215c83)
- quadgrid: add configurable grid size support (#393) (cb4479b)
- config: normalize fullwidth CJK characters in key comparison (#385) (123b6fd)
- keymap: fix thread safety issues — use-after-free, MRC memory leaks, and TIS main-thread requirement (#384) (515b0af)
- remove unused
flake.lock (57363f6)
- eventtap: include Shift modifier in key callback and normalize special key strings (#379) (4c7a2b3)
- keymap: debounce keyboard layout change notifications (#378) (b66c425)
- keymap: derive kKeyCodeMaxPrintable from enum for robustness (#381) (b11a459)
- keymap: generic keyboard layout support (#376) (81be0db)
- keymap: pre-cache Shift+Caps modifier combination (#380) (965c29c)
- hint_service: optimize cache access with RWMutex and batch cleanup (#371) (d8f3e18)
- overlayutil: release callback ID on timeout and cancel paths (#370) (314e78b)
- state: add unsubscribe support to enabled state callbacks (#373) (6ccb54f)
- systray: ensure NSApplication runs on main thread to prevent SIGTRAP (#375) (619848a)
- systray: properly link to
bug report and feature request on github (#367) (2a1bb38)
- systray: add ability to toggle visibility of systray via config (#365) (de0fcd0)
- systray: add submenu separator and more help links (#361) (117e86a)
- systray: remove
systray dependency with own implementation (#357) (27a21ed)
- systray: restructure menu items and add notification for copy version (#359) (1ccdf8b)
- systray: remove unnecessary tooltips, annoying (#363) (81ba09a)
- overlay: ensure grid borders are visible at screen edges (#355) (a0fdd77)
- quadgrid: nicer quadgrid default border (#356) (45030c0)
- ui: offset odd border widths for nicer grid rendering (#353) (01cddd0)
- bypass input method by mapping key code directly (#346) (11bc421)
- eventtap: resolve race conditions in lifecycle management (#348) (518ca19)
- scroll: remove legacy scroll area and replace with label (#337) (34b51fd)
- bridge: ensure overlays persist across macOS spaces (#340) (34d1933)
- bridge: resolve overlay issue on spaces and full screen (#342) (3d347d5)
- lifecycle: only resize overlays when need to (b78317e)
- add support for customisable exit and reset key (#334) (b945da6)
- accessibility: add support for macos stage manager for hints (#330) (bed96d8)
- add configurable mouse action refresh delay for hints mode (#324) (cffc408)
- add mouse movement via keyboard and CLI commands (#309) (0b09be6)
- accessibility: resolve menubar instability and race conditions (#328) (1cbe1c3)
- hints: prevent stale hints from displaying during label refresh (#326) (8ea4154)
- action: improve mouse_down/mouse_up reliability for native macOS apps (#299) (a60bd2d)
- improve plist with nix (#305) (84d1aeb)
- simplify action mode with direct action keybindings in hints/grid mode (#295) (7531361)
- implements configurable scroll keybindings (#291) (250c412)
- do not use
devbox to build, set the environment manually (#281) (75ec201)
- accessibility: adjust mouse click event timing to prevent in-transit clicks (#272) (2889bef)
- add grid character validation and custom labels support (#269) (0a16068)
- grid: fix prefixes not initialized in cached grids (#271) (01f92f4)
- prevent empty grid state when typing invalid key sequences (#270) (b2dd915)
- support numbers and symbols in grid and hints character configurations (#267) (6fe4513)
- add devbox development environment support (#261) (7551025)
- cli: implement services CLI for launchd management (#258) (f6e014a)
- nix: add launchd configuration options to home-manager module (#256) (8e2e1c7)
- overlay: implement native macOS overlay windows for grid and hints rendering (#253) (52eebb1)
- comprehensive performance optimizations for hint generation, caching and accelsibility processing (#259) (ac62d79)
- improve unsafe pointer handling for C callback interop (#250) (50c0929)
- modes: add Action and Scroll navigation modes with Mode interface (#238) (8c55ec4)
- test: enhance integration tests with comprehensive coverage (#242) (f44b1ea)
- resolve CLI nil pointer regression and add comprehensive tests (#244) (9a611d6)
- implement accessibility query optimization (#245) (9ab4930)
- implement grid rendering optimizations (#247) (dda783f)
- implement hint filtering performance optimizations (#246) (8076df5)
- implement memory management optimizations (#248) (f54dedc)
- config: fix app-specific hints configuration and add tests (#223) (1ca2c38)
- overlay: clear overlay when switching from scroll to hints/grid mode (#228) (20a23ea)
- scroll: improve responsiveness of scroll mode activation (#225) (7377a74)
- cleanup for some unused code and functions (#211) (3093084)
- grid: ensure grid overlay style updated in
reload config (#208) (c08cb2a)
- hints: ensure hints using the configured config styles than just defaults (#209) (f7e808c)
- logger: add consoleWriter parameter to Init for output control (#215) (6fbf809)
- minor refactoring to ensure functions are not too long (#212) (99ccfbf)
- overlay: optimize memory usage in drawing operations (#206) (aac6119)
- add coding standard with stricter golangci config (#196) (8ab3f3b)
- add more test and update some existing tests (#192) (50a59af)
- clang indent tab and format (#202) (8536bef)
- cleanup some obvious comments and add some comments within complex functions (#203) (58f5164)
- crash in grid bench and move all bench test to its own file (#191) (97263a3)
- ensure tests are all with blackbox approach (#189) (33c2223)
- make most struc private and expose getter and setter (#197) (83bdde4)
- no magic numbers and some refactoring to adhere coding style (#200) (04433ec)
- remove
Get keywords from getter (#198) (342b0bd)
- remove unneeded globals (#194) (4418fd3)
- update flake to support overlays [skip ci] (#195) (cea0a6e)
- lifecycle: ensure
handleScreenParametersChange will refresh overlays including state and style (#186) (883a13a)
- logger: remove noises that doesn’t bring value for debugging (#188) (c119abf)
- metrics: provide toggle to enable metrics collection, off by default (#183) (f7b6532)
- more test to improve coverage (#179) (7b4d521)
- remove all
GetScrollableElements (#184) (5340972)
- standardize error handling and include
err113 lint (#185) (3d1888e)
- tighten golangci lint and refactoring variables (#181) (e570663)
- cli: add —action flag for hints and grid commands (#167) (d41bc99)
- config: remove subgrid_enabled option and make subgrid always enabled (#171) (970962e)
- implement program wide DI and initial testing suite (#175) (bf29d4e)
- add IPC timeout with flags and 5 sec default (#155) (6e5bd24)
- allow smooth mouse movement (#159) (63cb580)
- config: ensure reliable reload and improve startup validation UX (#169) (8127e49)
- do not restore cursor if switches to scroll action (#152) (d5ed1d5)
- domain based refactoring & update comments (#157) (b5d6c96)
- enhance codebase robustness and error handling (#165) (b3e6188)
- ensure clean scroll context when switching mode (#163) (cd69912)
- ensure just fmt pointing to new bridge location [skip ci] (#162) (1089e10)
- focus on performance optimisation (#173) (74b61f4)
- grid: move mouse to cell center when showing subgrid (#172) (bcedcd0)
- hints: prevent cursor restoration during hint mode transitions (#170) (83922f0)
- improve godoc and remove noises for obvious or not needed comments [skip ci] (#164) (3a3c2b2)
- improve logging and add config dumps (#154) (bc99f53)
- make uuid direct in go.mod (#176) (bb2bbe2)
- modes: reset cursor state when exiting scroll mode via ESC (#174) (12f2124)
- more tests (#177) (a019a53)
- remove
: from exec (#168) (385f2ce)
- restructure the codebase to be more concise (#161) (a089c13)
- use faster default smooth cursor for config (#160) (97c8af7)
- implement restore cursor after escape mode (#150) (131570f)
- add
action cli that act on current cursor position (#126) (52aaba6)
- add submode for action that is configurable and allow to <tab> through (#144) (770fc42)
- allow different action colors configuration for grid, same as hints (#129) (61307c8)
- centralize overlay into a single manager and window (#146) (70c4fbe)
- grid based navigation mode (#111) (441192b)
- grid: optimize for square cells across all screen types (#122) (d40d990)
- simplify actions (#141) (49629ff)
- add missing grid cli for various actions (#125) (c92d09e)
- add more loggings throughout the program for better viewabilitiy (#130) (a6ab8d7)
- allow hiding unmatched in grid (#113) (59bcca6)
- do not clear hintOverlay when cleaning up grid (#142) (d31648f)
- ensure backspace can successfully return back to main grid with state (#136) (ae139b1)
- ensure different screen sizes and resolution gets the best grid (#115) (6016fce)
- ensure grid and hint dont sleep when refresh overlays (#124) (e35c486)
- ensure grid is clicking on absolute point, not relative points (#118) (c08b2a9)
- ensure hints working across multi displays (#117) (29cf0cb)
- grid: only call
ResizeToActiveScreen when it is needed, not every activation (#123) (856f0b6)
- improve ci for formatting, linting and vetting go and objc files (#149) (4d09a16)
- improve linting with more checks (#147) (6091077)
- improve log retention with rotation with more configurable options (#145) (87a85e7)
- improve matched_text highlihts to only highlight the prefix text (#137) (6d6e639)
- improve perf for grid by caching the labels plus more optim (#139) (41fc4ed)
- improve resize callback handling for better UX (#132) (38dbdd9)
- make actions point based instead of element based (#110) (472a390)
- make grids more predictable than always linearly showing the labels (#131) (808ca14)
- more improvements on linting configuration and fixes (#148) (80e0544)
- more perf for grids and hints (#140) (013025c)
- only use default hotkey when not configured (#143) (f6629cf)
- react to screen changes and support extended displays for grid (#116) (1fd81c2)
- refactoring and move domain based implementation to internals (#108) (9675949)
- remove subgrid cell and row config, as we are fixing it to square 3x3 (#127) (56d89d2)
- restrict keys to only available cells (#114) (d819d72)
- restructure config and move ax related to hints section instead (#128) (a9947dc)
- separated restore cursor for grid (#112) (f91567f)
- slightly improve memory for overlay.m (#138) (84bd351)
- update default values (#119) (7a946bb)
- ensure less memory leaks and crashes in objc (#106) (75f521d)
- implements
triple click and simple drag and drop with mouse down and mouse up on a target (#102) (ee89ce1)
- more robust cli and IPC handling + flexibility in hotkey mappings (#103) (e1eefbe)
- add version copy for systray (#92) (2e7242b)
- allow <tab> key to toggle between scroll hint and scroll mode (#87) (5fa4c15)
- allow <tab> to switch between hints and hints_action (#93) (44ef64e)
- allow scroll hints styles to be configurable (#88) (84e087c)
- auto mouse_up calls after mouse_down (#104) (f789391)
- chill
shouldIncludeElement checks (#96) (3141ace)
- ensure
status command shows the right message when using default (#91) (4873616)
- ensure to init the same style for default scrol hints (#89) (0e0fc86)
- implements
IsMissionControlActive to only show hints for mission control when active (#95) (9ac2295)
- make scroll configuration easier and put everything in pixel (#90) (401da6b)
- more refactor for main package (#99) (ed1c635)
- nicer color for matched texts in hint (#100) (ba7e3c9)
- refactor
main.go and split them out, also update build command (#98) (2e98331)
- simpler scroll mechanism (#85) (edd608f)
- vertical action menu without magic heuristic numbers (#101) (9c2405d)
- wrong key for
scroll_step_full in default config [skip ci] (#94) (c15e203)
- add more actions to systray (#83) (af3e11d)
- add more actions to systray menu for Neru (#76) (5c121db)
- allow to bypass heuristic checks for scrollable and clickable (#81) (60af71b)
- also allow per-app ignore checks (2803d0d)
- make scroll areas dynamic with available areas (#79) (bded86e)
- revamp hotkey to support custom bash script and IPC calls (#82) (09633de)
- split out electron, chromium and firefox supports (#74) (6b842f6)
- use app watcher to enable electron accessibility (#73) (2b9e0e5)
- add conditional parallelize for tree building (#72) (21c06aa)
- always force to US keyboard (#75) (a76b29f)
- avoid memory leak and proper cleanups (#80) (1845299)
- centralize app watcher into single instance (#78) (b81a7c0)
- move timer based watcher for hotkeys registration to app watcher (#77) (ae4e6cd)
- removing maxDepth checks (#70) (53e0557)
- add defaults to the config to support launch on bundle start (#67) (30049e0)
- root cmd to auto launch when in app bundle (#65) (0af1e45)
- allow configurable additional targets for menubar by bundle IDs (#60) (bca0da2)
- implement bundle to work locally (#62) (7f18d45)
- add cache for elements and improve tree walking duration (#58) (22b1fa3)
- allow 3 characters for maxHints (#63) (641c2b9)
- no need to check isEnabled in go code (#59) (ce753d9)
- optimize tree building and element finding with parallelization and simple ttl caching (#54) (008f827)
- remove
isclickable and isscrollable proxy and call it directly (#56) (e94de63)
- remove configurable maxHints and derive it from
hintChars (#61) (3745e68)
- replace complex
visibleChildren logic with AXVisibleRow detection (#57) (ac896fb)
- add notification center hints (configurable) (#49) (5e28692)
- update branding to
neru (#52) (7f9922b)
- better heuristic for clickable detection (#51) (f8767af)
- allow configuration for restore cursor position (#47) (d5e5d87)
- new action to move mouse to a position (#46) (9efc9eb)
- chromium support fix (#43) (f8c8463)
- replace all click actions to use actual mouse click rather than accessibility (#45) (7ebfaef)
- add occlusion detection with Dock exception (#34) (1d4146f)
- apply heuristic checks for clickable elements (#38) (f6be55d)
- dynamically add menubar and dock roles when enabled (#37) (ab53a03)
- properly check for electron with dynamic maxDepth (#36) (a10bdf7)
- ensure dock getting hints and does not crash the program (#28) (b572f58)
- improve large list traversal with progressive checks (#30) (5c3a0e3)
- move around config keys to places that make more sense (#31) (a929ec6)
- standardize rect query and do not consider padding for bounds (#32) (fff37f5)
- auto deregister hotkeys when focused app is excluded (#26) (b5811ef)
- ensure we can activate other modes when in a mode (#21) (5f8e29e)
- make action hints style configurable to be visually difference (#22) (8510d03)
- remove clickable role injection (#19) (707eb8d)
- remove numeric hint, feels useless (#24) (8db6945)
- allow to unset global hotkeys (#10) (a0fc0bf)
- ensure correct config exposes to
status command (#8) (f2e3f1e)
- remove reload config (#11) (a493743)
- remove root run and requires
launch command to start daemon (#12) (efbf00a)
- ensure action to run with
cgo enabled (#6) (0963c66)
- ensure checking from ./bin instead of ./build (#4) (8ee6942)
- actually implement middle click (3783a60)
- add ci (#1) (0aab5c0)
- add hint support for dock and menubar (7c08d53)
- allow additional clickable roles in config (f893bb4)
- better hints (4685a7f)
- init project with implementation (43d255e)
- initial try to support electron (86db6f7)
- more hint modes (3badbbb)
- nicer action hints (2a712b0)
- nicer hint with arrow (e83c5b8)
- only check visible child for ax (2c1252b)
- support
-v and --version (ba29ea1)
- support backspace to go back during hint mode (8399942)
- support global and per-app ax roles (677e1c4)
- switch to cobra-cli with IPC socket for normal actions (958989e)
- actually properly support chrome and electron (5f6ec2d)
- add fallback and validation for empty hint_characters (36b8c64)
- configurable roles for scroll and hint (735c98c)
- ensure config for hint styles are passed through (8679355)
- ensure event loop runs in main thread (6826fdb)
- ensure to flush event after clicks (cb1d5ab)
- explicit validation for scrollAreaByNumber (bdbce7f)
- fallback to actual click if press action failed (e186bb1)
- make matched hint color text configurable (fd0980f)
- make sure
ctrl-c actually kills the program (a566cf9)
- more logs for additional accessibility (407f992)
- refactor scroll magic numbers to be constants (521df2a)
- remove
escape mapping (a795e2b)
- remove action mapping from config (6974c7d)
- remove stupid animations (97a390c)
- remove unneeded smoothscroll function (fb77bdc)
- remove unused config (23df329)
- some improvement for pre-production (b0e5a79)
- sort of working scroll mechanism (cd4376a)
- support 3 characters hint without clashes (7120ded)