| Age | Commit message (Collapse) | Author |
|
- 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
|
|
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.
|
|
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>
|
|
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>
|
|
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>
|
|
- 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
|
|
- 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.
|
|
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
|
|
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`.
|
|
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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>
|
|
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
|
|
|
|
- bind it locally instead within the let form
|
|
|
|
the unwieldly wttrin-default-accept-language became the lighter-weight and more
user-friendly wttrin-default-language
|
|
- 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
|
|
|
|
|
|
- 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
|
|
- 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
|
|
- 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
|
|
- 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
|
|
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
|
|
This fork has the following patches applied (still outstanding in bcbcarl/emacs-wttrin):
- patch for selecting the unit system: https://github.com/bcbcarl/emacs-wttrin/pull/10
- patch for url request to return ascii rather than html https://github.com/bcbcarl/emacs-wttrin/pull/18
- patch to use https instead of http: https://github.com/bcbcarl/emacs-wttrin/pull/15
|
|
|
|
If wttrin-default-cities only has the one city in it, default the input to
wttrin to that so that it's easier and faster to get the weather.
|
|
This means it can be easily called from other code, with the city passed as
an argument.
|
|
|
|
Local keymap allows to quit current buffer or query for new place.
|
|
|
|
* Depend on stable version of `xterm-color`.
* Use `erase-buffer` instead of delete all region.
* Replace `ido-completing-read` with `completing-read`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|