Skip to content

Releases: RMANOV/simple-program-launcher

v1.2.0 — Thread-Safe Architecture for Modern Python

Choose a tag to compare

@RMANOV RMANOV released this 08 Mar 08:36

Simple Program Launcher v1.2.0

What's New

Bulletproof on Python 3.14 + Tcl 9.0

Complete architectural overhaul of the GUI threading model. The launcher now runs flawlessly on the latest Python and Tcl stack, where previous versions would crash with SIGILL on the second popup invocation.

How It Works Now

The main thread owns the Tk event loop. The evdev input listener runs in a background thread and communicates trigger events through a lock-free queue. The main thread polls the queue every 50ms and creates popups as Toplevel windows — all GUI operations happen on a single thread, exactly as Tcl 9.0 requires.

┌─────────────────┐       queue.Queue       ┌──────────────────────┐
│   evdev thread   │ ──── put(position) ───→ │   main thread (Tk)   │
│  L+R detection   │                         │  poll → popup.show() │
└─────────────────┘                         └──────────────────────┘

Launched Apps Run Free

Programs started from the launcher now run in their own process session (start_new_session=True). No more interference from the launcher's signal handling — launched apps survive launcher restarts and Ctrl+C.

Console-Free Operation

The launcher auto-detects when it's running without a terminal and redirects all output to ~/.cache/launcher.log. Combined with the included KDE autostart desktop entry, it runs completely invisible — no console window, no tray icon, no taskbar entry. Just L+R click when you need it.

Clean Shutdown

Ctrl+C or SIGINT triggers a graceful shutdown — stops the input listener, exits the Tk event loop, no orphaned processes.

Upgrade

Drop-in replacement — same config, same behavior, no migration needed.

cd ~/simple_program_launcher && git pull

The autostart desktop entry at ~/.config/autostart/launcher.desktop handles the rest on next login.


21 commits of refinement. Zero footprint. Always ready.

v1.1.0 — Wayland click-outside & cursor fix

Choose a tag to compare

@RMANOV RMANOV released this 08 Mar 07:54

What's New

Wayland Fixes

  • Click-outside detection — timestamp correlation between evdev (global clicks) and tkinter (popup clicks). No cursor position needed — eliminates XWayland stale position bug entirely
  • Popup positioning — subprocess-isolated KWin D-Bus query for real Wayland cursor coordinates (~50ms). Removed in-process GLib mainloop that conflicted with tkinter
  • evdev input backend — native Wayland mouse event detection, no XWayland dependency

UI Improvements

  • Pin button visual feedback (📌 icon + disabled state after pinning)
  • UI width type safety fix

v1.0.0 — Lightning-Fast L+R Mouse-Click Program Launcher

Choose a tag to compare

@RMANOV RMANOV released this 01 Feb 16:36

Cross-platform program launcher triggered by simultaneous L+R mouse click. 10,000-entry clipboard history with fuzzy search, <50ms popup latency, smart usage tracking with 7-day recency weighting. Built in Rust (~4 MB binary, ~8 MB RAM) with Python GUI fallback.

Highlights

  • L+R Mouse Trigger — never conflicts with keyboard shortcuts
  • 10K Clipboard History — fuzzy search, pin, math preview, password detection
  • <50ms Popup Latency — Rust performance, appears at cursor
  • Smart Tracking — learns your most-used programs (7-day recency)
  • Hot-Reload Config — changes apply without restart

Stack

Rust 1.70+ | Python 3.8+ (GUI) | Cross-platform (Linux/Windows/macOS)