summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-11-08refactor: debug: route all debug output to debug log instead of MessagesCraig Jennings
- Remove (message ...) call from wttrin--debug-log function - Replace 9 debug message calls in wttrin.el with wttrin--debug-log - All debug output now goes to debug log for review with M-x wttrin-debug-show-log - User-facing error messages preserved (network errors, processing errors) - Updated docstring to clarify messages are stored for later review
2025-11-08refactor: Improve cache cleanup clarity and add input validationCraig Jennings
Cache Refactorings: - Extract wttrin--get-cache-entries-by-age helper function - Refactor wttrin--cleanup-cache-if-needed to use helper - Improves code clarity with descriptive variable names - Makes cache logic independently testable - Add 15 new tests (8 for helper, 7 for refactored cleanup) Input Validation: - Add range validation to wttrin-mode-line-startup-delay (1-10 seconds) - Prevents invalid values (0, negative, or excessive delays) - Uses restricted-sexp type for enforcement Test Fixes: - Fix debug function naming (use public wttrin-debug-clear-log) - Ensure wttrin-debug module loads in test setup - Make mocks synchronous for batch mode compatibility - Update test expectations to match actual debug messages - Fix startup delay test to check defcustom default value Linter/Compiler Fixes: - Add declare-function for wttrin--debug-log - Add defvar/declare-function in wttrin-debug.el - Fix docstring line lengths (wrap at 80 chars) - Fix checkdoc warnings (imperative mood, escaping) - Disambiguate temporary-file-directory reference All 165 tests passing. Clean byte-compile, package-lint, checkdoc.
2025-11-08docs: Simplify manual installation debug exampleCraig Jennings
Remove add-to-list from manual installation example and ensure :ensure t is included. The :preface section with xterm-color and wttrin-debug settings works the same whether installing from MELPA or a local path. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08docs: Use :preface for wttrin-debug instead of external setqCraig Jennings
Update README to show wttrin-debug being set in :preface section of use-package declarations. This is cleaner and follows standard use-package conventions better than requiring users to set variables outside the declaration. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08refactor: make debug functions public (single hyphen naming)Craig Jennings
Renamed private debug functions to public API: - wttrin--debug-show-log → wttrin-debug-show-log - wttrin--debug-clear-log → wttrin-debug-clear-log Added ;;;###autoload to both functions for proper autoloading. Updated all references: - README.org (2 occurrences) - tests/README-DEBUG-TESTS.md (4 occurrences) - tests/test-wttrin-integration-with-debug.el (8 occurrences) These are user-facing commands that should be discoverable via M-x, so they follow the public API naming convention (single hyphen). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08docs: add critical setup rules for local development and debuggingCraig Jennings
Added two new sections to README: 1. "Local Development / Manual Install" section: - Shows correct pattern for loading xterm-color in :preface - Explains :demand t ensures immediate loading - Provides both use-package and manual install examples - Emphasizes xterm-color must load BEFORE wttrin 2. "Debugging and Troubleshooting" section: - Documents wttrin-debug must be set BEFORE loading wttrin - Shows correct vs incorrect examples (with ❌ for wrong way) - Explains how to view debug log with M-x wttrin--debug-show-log - Includes example debug output - Lists common issues and solutions Key rules documented: - xterm-color in :preface with :demand t for local development - wttrin-debug set before (require 'wttrin) or use-package declaration - Debug checked at load time, can't be set in :custom section These are common pitfalls that prevented wttrin from loading correctly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08feat: debug: add comprehensive debug logging and integration testsCraig Jennings
Enhanced wttrin-debug.el: - Added wttrin--debug-log() function for timestamped logging - Added wttrin--debug-clear-log() to clear log - Added wttrin--debug-show-log() to display log in buffer - Debug log structure: list of (timestamp . message) pairs Added debug logging to key functions in wttrin.el: - wttrin--fetch-url: Logs start, success (bytes), and errors - wttrin--mode-line-fetch-weather: Logs start, URL, data received - wttrin--mode-line-update-display: Logs display update, emoji extraction Created comprehensive integration tests: - test-wttrin-integration-with-debug.el (5 tests, 3 passing) - Tests fetch, mode-line display, error handling with debug logging - Includes mocked network calls to avoid external dependencies - Example debug output shows complete flow: [wttrin-debug 11:51:46.490] mode-line-fetch: Starting fetch for Berkeley, CA [wttrin-debug 11:51:46.490] mode-line-fetch: Received data = "Berkeley, CA: ☀️ +62°F Clear" [wttrin-debug 11:51:46.490] mode-line-display: Extracted emoji = "☀", font = Noto Color Emoji [wttrin-debug 11:51:46.490] mode-line-display: Complete. mode-line-string set = YES Added test fixtures: - tests/fixtures/test-init.el: Minimal config with debug enabled - tests/README-DEBUG-TESTS.md: Documentation for using debug features Usage: (setq wttrin-debug t) ; Before loading wttrin (require 'wttrin) M-x wttrin--debug-show-log ; View all logged events This provides complete visibility into wttrin's operation for troubleshooting. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08test: add comprehensive integration tests for package loadingCraig Jennings
Add 18 integration tests to verify wttrin loads correctly: Package Loading: - Package loads without errors - Feature is properly provided - Dependencies available (xterm-color, url) Function Availability: - Main commands defined and interactive (wttrin, wttrin-clear-cache) - Modes defined (wttrin-mode, wttrin-mode-line-mode) Configuration: - All defcustom variables exist - Internal variables defined - Keymaps exist and valid Package Metadata: - Version information present - Autoload cookies in place Smoke Tests: - URL building works - Cache operations function - Mode-line display works All 18 tests passing - package loads correctly when dependencies available. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08refactor: mode-line: extract inline keymap to shared defvarCraig Jennings
Replace inline keymap construction with shared wttrin--mode-line-map defvar. Before (line 474-479): Keymap recreated on every mode-line update - (let ((map (make-sparse-keymap))) ...) - Allocates new keymap object each time - 6 lines of repetitive code After (line 183-190 + line 483): Shared keymap created once - (defvar wttrin--mode-line-map ...) - Reference: 'local-map wttrin--mode-line-map - Single allocation, no repeated construction Added comprehensive tests (8 tests, all passing): - Keymap existence and structure verification - Keybinding tests (mouse-1, mouse-3, no mouse-2) - Integration test verifying mode-line uses shared map Benefits: - More efficient (no allocation on every update) - Clearer code structure - Easier to add new keybindings - Self-documenting with inline documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08refactor: config: replace magic numbers with named constantsCraig Jennings
Replace two magic numbers with self-documenting constants: 1. Cache cleanup percentage (line 395): - Before: (dotimes (_ (/ (length entries) 5)) - After: (dotimes (_ (floor (* (length entries) wttrin--cache-cleanup-percentage))) - Added: wttrin--cache-cleanup-percentage constant (0.20 = 20%) - Explains WHY 20%: provides buffer before next cleanup cycle 2. Mode-line startup delay (line 508): - Before: (run-at-time 3 nil #'wttrin--mode-line-fetch-weather) - After: (run-at-time wttrin-mode-line-startup-delay nil ...) - Added: wttrin-mode-line-startup-delay defcustom (default 3 seconds) - Now user-customizable, range 1-5 seconds recommended Added comprehensive tests (8 tests, all passing): - 5 tests verify cache cleanup behavior (removes ~20% of oldest entries) - 3 tests verify startup delay defcustom exists and has reasonable value Benefits: - Self-documenting code (explains WHY these values exist) - Startup delay is now user-customizable - Easier for future maintainers to understand rationale 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08test: render: add comprehensive ERT tests for display helper functionsCraig Jennings
Add 34 new tests covering the three helper functions extracted from wttrin--display-weather: - test-wttrin--validate-weather-data.el (12 tests) - test-wttrin--process-weather-content.el (12 tests) - test-wttrin--add-buffer-instructions.el (10 tests) Tests follow Normal/Boundary/Error pattern and all pass. Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08refactor: render: split wttrin--display-weather into focused helper functionsCraig Jennings
- Extracted wttrin--validate-weather-data for data validation - Extracted wttrin--process-weather-content for ANSI filtering and cleanup - Extracted wttrin--add-buffer-instructions for UI instructions - Refactored main function to use helpers (improved readability) Benefits: - Each function has single, clear purpose - Easier to test individual components - Better code organization and maintainability - Main function reduced from ~40 lines to ~20 lines
2025-11-08test: core: enhance ERT tests for pure functionsCraig Jennings
- Enhanced test-wttrin-additional-url-params with clearer test organization - Enhanced test-wttrin--build-url with comprehensive boundary and error cases - Added tests for Unicode, special characters, GPS coordinates, domains - Fixed domain name test to check for URL-encoded @ symbol (%40) - Enhanced test-wttrin--make-cache-key with extensive boundary tests - Critical test: same location with different units produces different keys - Added tests for special chars, Unicode, empty strings, pipe characters All 29 tests for these three pure functions now pass (6 + 12 + 11) Combined with wttrin--fetch-url tests: 38 total tests passing
2025-11-08refactor: fetch: extract duplicate URL fetching logic into wttrin--fetch-urlCraig Jennings
- Created wttrin--fetch-url helper to eliminate code duplication - Refactored wttrin-fetch-raw-string to use helper (27 lines -> 3 lines) - Refactored wttrin--mode-line-fetch-weather to use helper (~30 lines -> ~10 lines) - Added comprehensive ERT test suite with 9 tests covering normal, boundary, and error cases - All tests passing This refactoring provides a single point of truth for async URL fetching, making the code more maintainable and reducing duplication by ~40 lines.
2025-11-04fix(wttrin): Fix ANSI color rendering on fresh Emacs launchCraig Jennings
Critical bug fix: On fresh Emacs launch, weather displayed with only double quotes colored blue, all other text white. Pressing 'g' to refresh brought colors back. Root cause: wttrin-mode (derived mode) calls kill-all-local-variables internally. The code was setting xterm-color--state buffer-local BEFORE calling wttrin-mode, so the state was immediately wiped out. On refresh, the mode was already active (no-op), so the state survived. Fix: Call wttrin-mode FIRST, then set buffer-local variables after. This ensures kill-all-local-variables runs before we set any state. Changes: - Reorder initialization in wttrin--display-weather (wttrin.el:277-285) - Add regression tests for mode initialization order (2 new tests) Test results: 65 tests, all passing
2025-11-04docs: Update vc-install instructions for Wttrin in READMECraig Jennings
Simplify Emacs Lisp configuration using `:vc` keyword for Wttrin installation and update.
2025-11-04feat:docs: Add mode-line weather display featureCraig Jennings
Introduce mode-line weather display in README.org. Add setup, features, and customization instructions, enabling users to show weather updates directly in the mode-line with automatic refresh and interactive options.
2025-11-04feat:wttrin: Add auto-enable option for mode-line weather displayCraig Jennings
Introduce `wttrin-mode-line-auto-enable` customization option. When set to non-nil, this automatically enables the mode-line weather display upon loading wttrin. Users can still manually toggle the display with `wttrin-mode-line-mode`.
2025-11-04refactor:debug: Rename and enhance wttrin debug functionsCraig Jennings
- Reorganized debugging utilities by renaming `debug-wttrin.el` to `wttrin-debug.el` and adding new functions. - The updated module now supports `debug-wttrin-mode-line` for detailed mode-line diagnostics and introduces customizable mode-line weather display with new configuration options. - Additionally, extended debugging capabilities ensure concise emoji-based weather info and tooltip data management, incorporated with auto-loaded conditional debug logic.
2025-11-04refactor:wttrin: Make asynchronous loading standardCraig Jennings
Make asynchronous loading the only mode of operation. It's well tested and doesn't lock up Emacs during fetching. Synchronous loading code has been removed.
2025-11-04docs: Update README with Emacs 29+ note and advanced settingsCraig Jennings
Add a note for Emacs 29+ users about using `setopt` for type checking. Include sections on asynchronous loading and cache settings under advanced settings, providing customization options for Wttrin's behavior.
2025-11-04feat:debug: Add debugging utilities for wttrinCraig Jennings
Introduce debugging features to assist with wttrin display issues. New utility functions enable developers to view raw weather data with line numbers, facilitate easy debugging of header parsing. Includes debug mode toggle functions to save raw weather responses to timestamped files for bug reporting and diagnostics. Updated URL-building tests to confirm correct URL formats with additional 'F' parameter, ensuring comprehensive coverage for various input scenarios.
2025-11-04docs:README: Add VC install instructionsCraig Jennings
Include detailed steps for installing Wttrin using package-vc in Emacs 30 or later.
2025-11-04feat:wttrin-mode: Add major mode for weather displayCraig Jennings
Introduce `wttrin-mode`, a derived major mode for displaying weather information from wttr.in. This includes keybindings for refreshing and querying new locations, and sets up the buffer with a custom font and read-only settings. Existing display logic has been refactored to utilize this mode for improved usability and code organization.
2025-11-04feat(emacs): Add asynchronous weather fetching to wttrinCraig Jennings
Introduce asynchronous data fetching to the wttrin.el Emacs package. This enhancement avoids blocking Emacs during data retrieval by using `url-retrieve` for async calls. The behavior is controlled via a new customizable variable `wttrin-use-async`. Tests have been added for the new async behavior to ensure proper functionality.feat:makefile): Add package initialization for Emacs batch Enhance Makefile with package support by loading and initializing MELPA archive before validating and compiling, ensuring required packages are available during these operations. feat(tests): Add unit tests for `wttrin--display-weather` Introduce comprehensive tests for `wttrin--display-weather` function to validate buffer creation, content, keybindings, and error handling.
2025-11-04feat:Makefile: Add dependency installation targetCraig Jennings
Add a new `install-deps` target to the Makefile for setting up required dependencies, specifically `xterm-color`, using MELPA package repository. Enhance test process by including package initialization in `EMACS_TEST` command.
2025-11-04remove coloring from the MakefileCraig Jennings
2025-11-04feat:Makefile: Add Makefile for build and test automationCraig Jennings
Introduce a Makefile to automate common tasks for the wttrin project. This includes running tests (unit and integration), validating and compiling the main file, linting, and cleaning up generated files.
2025-11-04chore:docs: Remove obsolete documentation filesCraig Jennings
Update .gitignore to include the docs directory.
2025-11-04remove merged bugs.orgCraig Jennings
2025-11-04Add comprehensive ERT test suite and fix critical bugsCraig Jennings
Session 1: Testing infrastructure and initial test coverage Bug fixes in wttrin.el: - Fix wttrin-additional-url-params to handle nil unit system - Remove incorrect callback parameter to url-retrieve-synchronously - Add nil buffer check for network failures - Strip HTTP headers before decoding response - Kill buffer after fetch to prevent memory leaks - Fix double concatenation of URL params in cache function - Add proper URL encoding via new wttrin--build-url function Refactoring: - Extract wttrin--build-url as pure, testable function - Separate URL building logic from network I/O Test infrastructure (33 tests, 100% passing): - tests/testutil-wttrin.el: Shared test utilities - tests/test-wttrin-additional-url-params.el: 7 tests - tests/test-wttrin--make-cache-key.el: 9 tests - tests/test-wttrin--build-url.el: 10 tests - tests/test-wttrin--cleanup-cache-if-needed.el: 7 tests Documentation: - docs/testing-plan.org: Comprehensive testing roadmap - docs/bugs.org: Bug analysis from code review - docs/NOTES.org: Session tracking and guidelines - docs/session-1-summary.org: Detailed session summary Next session: Cache workflow tests, parsing logic extraction, integration tests 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25Add caching system for weather dataCraig Jennings
Implement a caching mechanism to reduce API calls and improve performance. The cache stores weather data with configurable TTL (15 minutes default) and automatic cleanup when exceeding max entries (50 default). - Add cache configuration options for TTL and max entries - Store fetched data with timestamps in hash table - Add force refresh functionality with 'r' key binding - Implement automatic cache cleanup to prevent unbounded growth - Fall back to stale cache on network errors - Also, fixed URL parameter concatenation in fetch function
2025-09-24use https rather than httpCraig Jennings
2025-09-24don't mutate url-request-extra-headersCraig Jennings
- bind it locally instead within the let form
2025-09-24ensure utf-8 encodingCraig Jennings
2024-04-22wordsmithingCraig Jennings
- fix numbering mistake - swap package installation ordering - word tweaking, probably born out of procrastination
2024-04-22wordsmithingCraig Jennings
2024-04-22changed accept-language variable name to wttrin-default-languagesCraig Jennings
the unwieldly wttrin-default-accept-language became the lighter-weight and more user-friendly wttrin-default-language
2024-04-22Readme RewriteCraig Jennings
- moved the format from markdown to org - much better text IMHO - badges and sections and pictures oh my!
2024-04-21clean-up byte compile and licensing issuesCraig Jennings
- fix let-binding for date-time-stamp and location-info - also switched goto-line usage (interactive only) with forward-line - require face-remap for buffer-face-mode-face - adjust all code and docstring for 80 column width
2024-04-21fix docstring longer than 80 charactersCraig Jennings
2024-04-21Add License Boilerplate and SPDX-License-Identifier for GPL 3.0Craig Jennings
2024-04-11fit and finish bugfixingCraig Jennings
- adjust display header to location and date - change references from cities to location - update default-location names requery smoothly - always name the buffer *wttr.in* for easy reuse/killing - keep the buffer display up while user chooses next location
2024-04-01package prep: linter bugfixing and updated readmeCraig Jennings
- added manual and straight installation instructions - corrected font-height setting example - corrected :type for wttrin-default-accept-language - fix docstrings corrected emacs-lisp code block, upcased usage header
2024-04-01squash! Update README.mdCraig Jennings
2024-04-01bugfixesCraig Jennings
- fixed types for default-accept-language and default-cities - removed unneeded status variable in wttrin-fetch-raw-string - syntax correction in defgroup wttrin description - changed default font to Lucida Console (more universal + compatible with wttr.in) - added games to keywords per package linter - updated version, header description, and commentary
2024-04-01Update README.mdCraig Jennings
attempted code block and image link fix
2024-04-01customize font, display date, clean requeries, license change, &c.Craig Jennings
- changed license to GPLv3 - allow user to specify font name and height for display - place date/time stamp above location name at top of buffer - re-query with new location deletes to reduce buffer clutter - updated screenshot to show current updates - changed references from "city" to "location" in wttrin.el - removed old CI config files - removed old badges from readme file
2024-03-11removing fake run-travis-ci.shCraig Jennings
2024-03-11Reapplying patch to avoid raw HTML; other changesCraig Jennings
Other changes being: - added text prompt for quitting and selecting another city - updated default cities - fixed docstring issues reported by Emacs' linter - updated several prompt texts - updated maintainer