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
This commit was created on GitHub.com and signed with GitHubâs verified signature.
clipboard (new standalone file)
Added
Pinned items section
Dedicated âPinsâ area rendered above history, not subject to capacity limits.
Pin/Unpin action via toolbar, context menu, and Ctrl+P shortcut.
âClear Pinsâ action (button, context menu, and Ctrl+Shift+Backspace).
Multi-select operations
Copy, Paste, Delete, Move Up/Down all support multiple selections.
Aggregated Copy/Paste behavior with newline-joined payloads.
Drag-and-drop reordering
Reorder items by dragging within the same section (Pins or Items).
Disabled while a filter is active to avoid index confusion.
System clipboard watcher
Lightweight polling that auto-adds new clipboard text to history while the popup is open.
Pause watcher toggle to temporarily stop ingesting new items.
Live-refresh hook
app._clipboard_apply_filter is set while the popup is open and cleared on close, allowing external updates (e.g., from editor copy/cut) to refresh the UI instantly.
Platform-friendly context menu
Right-click, middle-click, and Ctrl+Click (macOS) all open the context menu.
UI details and controls
Selection counter and visible counts (Pins/Items).
âAuto-close on pasteâ option for fast workflows.
Changed/Improved
Standalone architecture
Decoupled from the main window into a dedicated popup, created via your popup builders when available, or via a Toplevel fallback.
Transparently adopts global window transparency and other common behaviors.
Robust indexing
View-to-model index mapping for all actions, resilient to duplicate items and active filters.
History semantics
Move-to-front with deduplication for both pinned and unpinned items.
Capacity enforcement applies only to unpinned history.
Filtering
Case-insensitive, instant filter across both sections.
Safe drag/reorder behavior by disabling reordering under filter conditions.
UX polish
Clear item rendering with truncation for long entries (models store full text).
Cross-platform context triggers and consistent key bindings.
Status labels update on selection and drag operations for better feedback.
Integration hygiene
Live-refresh hook and watcher lifecycle are cleaned up on window close.
Works with app-level builders, styles, and optional alpha without extra configuration.
Fixed
Duplicate-handling pitfalls
Operations no longer rely on raw value matching that could target the wrong duplicate; all actions use exact index mapping.
Filter-induced reorder bugs
Reordering is blocked while filtered to avoid inserting blocks at unexpected positions.
Clipboard watcher spam
Last-seen guard plus dedup ensures new clipboard content doesnât create redundant entries.
Context menu discoverability on macOS
Ctrl+Click and middle-click support ensures the menu is accessible across devices and trackpads.
UI update race conditions
All UI refreshes are scheduled on the Tk event loop; the live hook and watcher tear down cleanly on close.
Weather tool (new standalone file)
Added
Standalone weather module and popup window with clear responsibilities and imports/constants located at the top of the file.
City suggestions dropdown with accent- and case-insensitive matching and deduplicated results.
Recent/Recommended cities panel with capacity control and stable deduplication across accents and casing.
Notebook with tabs for Now, Hourly, Daily, and Textual summary, including a dedicated âLast cityâ view to recall the previous cityâs snapshot and quick-restore.
Responsive Matplotlib charts for hourly and daily forecasts with automatic resize handling and minimum readable sizes for tabs.
Textual forecast rendering fallback when plotting backends are unavailable.
Icon rendering via OpenWeather icon codes using PIL (kept as soft-dependency with safe fallbacks).
Asynchronous fetch pipeline with background thread, UI-safe scheduling, and graceful error dialogs.
Multi-provider data sources: primary OpenWeather (when API key is available) and automatic fallback to wttr.in; synthetic forecast generation if needed.
Numeric model normalized to metric units internally with local unit toggling (C/F and m/s vs mph) without re-fetching.
Copy action for the current summary with optional paste-to-editor integration.
Utility helpers: city normalization, robust key generation for dedupe, time formatting with timezone offsets (when provided), safe scheduling, and plotting helpers.
Changed/Improved
Split and refactored the previous monolithic weather logic from the main app into a dedicated drop-in module with snake_case naming and descriptive identifiers.
All widgets are now stored in variables, ensuring reliable later access for updates, theming, and event handling.
Suggestions and recents logic rewritten to be accent-insensitive, case-insensitive, and stable against duplicates; history capping is enforced.
Unified conversion flow: fetches once in metric, then converts to the selected UI units instantly (no extra network calls on unit toggle).
Forecast normalization strategy to a common, predictable structure; charts and text previews consume the same normalized format.
Chart rendering is now responsive with debounced resize and minimum size enforcement for reliable readability.
Error handling hardened across network, image, and plotting code paths with user-friendly messages; fallbacks prefer preserving UI continuity.
Snapshotting of the previous city for the âLast cityâ tab, including summary text and a small chart preview (when available).
Improved code organization: constants, helpers, providers, numeric model, UI, and rendering are separated into sections to aid maintainability and testing.
Fixed
Duplicate entries in recent and suggested cities caused by inconsistent casing/accents.
Unit-toggle inconsistencies that previously required another fetch or lost precision across conversions.
Occasional crashes occurred when plotting widgets were resized rapidly or when plotting backends were missing.
Intermittent icon load issues due to image resource handling; now preloads and retains references safely.
Edge cases where forecasts were missing or partial; fallback generation ensures charts and text remain populated.
Suggestions panel lingering open with no results; it now hides predictably on empty or unmatched queries.
Potential UI freezes from synchronous network calls; replaced with threaded fetch and safe UI updates.
Knowledge tool - Wiki and Dictionary (new standalone file)
Added
Dedicated Knowledge popup window with tabbed UI:
Search tab for query and options
Results tab for article/definition content and actions
Images tab (Wiki only) with lazy, incremental loading
Provider toggle and bridging:
Dictionary and Wikipedia providers with one-click bridge actions (Dict â Wiki summary, Wiki â Dict)
Keyboard shortcuts: Ctrl+1..4 for Wiki modes, Ctrl+Shift+D/W for bridging, Ctrl+./Ctrl+, for image nav
Non-blocking networking:
Background threads for searches and image downloads
Run-id tracking to safely discard stale/out-of-order responses
Debounced auto-search:
Configurable auto-search with minimum character threshold and provider-aware safeguards (never auto in images mode)
Images pipeline:
URL filtering (safe scheme/hosts, raster-only, drop SVG, de-duplication)
Parallel downloads with a configurable worker pool
Two-stage sizing (coarse clamp on fetch + precise fit to container at paint time)
First-ready rendering with responsive navigation controls
Image source actions (copy/open URL)
Robust output actions:
Paste to editor (preserving cursor location)
Copy all / copy selection
Open article in browser / copy article URL (Wiki)
Status and metrics:
Status bar for long-running tasks
Result stats (length, non-space chars, lines, paragraphs, sentences)
Soft preference persistence:
Auto-search, auto-pick (Wiki), auto-bridge (Dict), max images per session
UX polish:
Mode feedback, clean whitespace normalization for results
Safe URL validation
Pre-filling search from editor selection when available
Changed/Improved
Extracted from the main window into a self-contained, reusable popup module:
Cleaner separation of concerns; no UI blocking; better error isolation
Resilient UI composition:
Consistent notebook layout; stable min-sizes per provider; flexible grid/pack usage
Better centering and size-change behavior (keeps window centered on resize)
Safer state transitions:
Explicit run lifecycle: start-run, busy state, completion with ready state
Always updates UI on the main thread (using after callbacks)
Wikipedia modes:
Summary, Related, Content, Images each with tailored output and actions
Auto-pick for Related mode (optional) and disambiguation guidance with tips
Dictionary mode:
Enriched output with grouped definitions; optional synonyms/antonyms
Auto-bridge to Wikipedia when no definitions found (optional)
Images handling:
First-success flow automatically brings up the Images tab; avoids blank tab if nothing loads
Accurate navigation info (index and original image size when known)
Container-aware fitting reduces flicker/overflow and saves memory
Usability:
Debounce tuned to reduce premature network calls while typing