<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs-wttrin/README.org, branch v0.3.2</title>
<subtitle>Emacs frontend for Igor Chubin's wttr.in weather service
</subtitle>
<id>https://git.cjennings.net/emacs-wttrin/atom?h=v0.3.2</id>
<link rel='self' href='https://git.cjennings.net/emacs-wttrin/atom?h=v0.3.2'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/'/>
<updated>2026-04-22T05:07:51+00:00</updated>
<entry>
<title>feat: add IP geolocation command for setting wttrin-favorite-location</title>
<updated>2026-04-22T05:07:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-22T05:07:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=9958ec4c4396ae8435f7e1818ff383c05df47a14'/>
<id>urn:sha1:9958ec4c4396ae8435f7e1818ff383c05df47a14</id>
<content type='text'>
Lets users set `wttrin-favorite-location` by IP lookup instead of typing a city by hand. `M-x wttrin-set-location-from-geolocation` runs the lookup, shows the detected "City, Region" in a yes/no prompt, and on confirmation sets the variable for the session. The docstring points at `M-x customize-save-variable` for persistence across restarts.

The new `wttrin-geolocation.el` module provides the provider layer. Three providers come built in: ipapi.co (the default), ipinfo.io, and ipwho.is. All three are HTTPS, need no API key, and have free tiers large enough for interactive use. The module has three layers. Pure JSON parsers handle the per-provider quirks: ipapi's `error: true` flag, ipwho.is's `success: false` flag, ipinfo's HTTP-status-only signalling. A small fetch helper extracts the HTTP body. `wttrin-geolocation-detect` wires them together and calls back with "City, Region" on success, or nil on any failure (network error, HTTP 4xx or 5xx, malformed response, rate-limit signal).

Providers live in an alist keyed by symbol, with plist values for :name, :url, and :parser. To use a different provider, push an entry onto `wttrin-geolocation--providers` and select it via `wttrin-geolocation-provider`. No code change needed.

README gains a subsection under Mode-line Weather Display covering the command, how to persist the result, provider selection with free-tier limits, and the accuracy caveat for VPN or mobile-hotspot users.

39 new tests across the parser layer (10 ipapi, 6 ipinfo, 6 ipwhois), fetch-and-dispatch (11), and interactive command (6). Each suite covers Normal, Boundary, and Error categories. Tests mock `url-retrieve` and `yes-or-no-p` at their boundaries and run the real extract-and-parse pipeline underneath. Test suite: 333 → 373 passing.
</content>
</entry>
<entry>
<title>doc: tighten README prose, remove AI writing patterns</title>
<updated>2026-04-04T18:51:16+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-04T18:51:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=faddcefa98c41356d8fd66d561f1e45453b19d05'/>
<id>urn:sha1:faddcefa98c41356d8fd66d561f1e45453b19d05</id>
<content type='text'>
Rewrite sections that read like generated text: replace clinical
descriptions with conversational language matching the existing
voice, cut padding phrases ("proactively", "several aspects",
"what's happening"), and trim the debug section down to essentials.
</content>
</entry>
<entry>
<title>doc: update README with missing features, fix stale content</title>
<updated>2026-04-04T18:47:54+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-04T18:47:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=c856f697718a3a0a92dbf84a913d56a4ce9c4944'/>
<id>urn:sha1:c856f697718a3a0a92dbf84a913d56a4ce9c4944</id>
<content type='text'>
Add: staleness display in weather buffer, stale mode-line dimming,
wttrin-clear-cache command, wttrin-mode-line-startup-delay option,
minimum Emacs version (24.4).

Fix: font height default was listed as 110 (actually 130), debug
output example didn't match current log format, manual debug setup
section was a duplicate of the use-package section.
</content>
</entry>
<entry>
<title>feat: unified cache and staleness handling for mode-line and buffer</title>
<updated>2026-02-21T13:11:03+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-21T13:06:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=b74b98f177d92d50ddbede900ba41212e07c5f63'/>
<id>urn:sha1:b74b98f177d92d50ddbede900ba41212e07c5f63</id>
<content type='text'>
Replace TTL-based cache invalidation with proactive scheduled refresh.
Both mode-line and buffer systems now follow: timer refreshes cache,
display reads from cache, staleness indicated when data is old.

Phase 1 - Mode-line cache formalization + staleness display:
- Replace wttrin--mode-line-tooltip-data with wttrin--mode-line-cache
  as (timestamp . data) cons cell matching buffer cache pattern
- Add wttrin--format-age helper for human-readable age strings
- Rewrite wttrin--mode-line-update-display to take no arguments,
  read from cache, compute staleness (age &gt; 2x refresh interval),
  dim emoji gray when stale, show staleness info in tooltip
- Rewrite wttrin--mode-line-fetch-weather to write cache on success,
  show stale display on failure with cache, error placeholder without
- Add wttrin--mode-line-update-placeholder-error for first-launch failure

Phase 2 - Remove TTL, add proactive buffer refresh:
- Rename wttrin-cache-ttl to wttrin-refresh-interval (default 3600s)
  with define-obsolete-variable-alias for backward compatibility
- Change wttrin-mode-line-refresh-interval default from 900 to 3600
- Remove TTL check from wttrin--get-cached-or-fetch; serve cached data
  regardless of age, background timer keeps it fresh
- Add buffer refresh timer (wttrin--buffer-cache-refresh)

Phase 3 - Buffer staleness display:
- Add wttrin--format-staleness-header for buffer age display
- Insert staleness line in wttrin--display-weather before instructions

Phase 4 - Cleanup:
- Remove all references to wttrin--mode-line-tooltip-data
- Update README.org cache settings and mode-line documentation
- Update tests for new API (198 tests across 21 files, all passing)
</content>
</entry>
<entry>
<title>refactor: core: rename wttrin-mode-line-favorite-location to wttrin-favorite-location</title>
<updated>2025-11-13T20:14:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-13T20:14:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=bf989bb594680eb2e3b69f55752353aa33cb47bb'/>
<id>urn:sha1:bf989bb594680eb2e3b69f55752353aa33cb47bb</id>
<content type='text'>
Renamed variable to remove 'mode-line' prefix, making it usable for
future location-based features beyond mode-line display. Updated all
references in code, tests, and documentation. All 187 tests passing.
</content>
</entry>
<entry>
<title>doc: readme: use :load-path instead of add-to-list for use-package</title>
<updated>2025-11-09T05:52:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-09T05:52:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=789c197f839bb602c724a4fb47ba50909759e99b'/>
<id>urn:sha1:789c197f839bb602c724a4fb47ba50909759e99b</id>
<content type='text'>
Replace add-to-list approach with use-package's :load-path keyword
for cleaner, more idiomatic configuration.
</content>
</entry>
<entry>
<title>doc: readme: simplify xterm-color configuration instructions</title>
<updated>2025-11-09T05:49:35+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-09T05:49:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=78d6f9c31ed060dc6f2d2aae7a5608014218b0b1'/>
<id>urn:sha1:78d6f9c31ed060dc6f2d2aae7a5608014218b0b1</id>
<content type='text'>
Remove outdated xterm-color configuration requirements following the
lazy-load refactor. Users no longer need :after, :preface, or separate
use-package declarations for xterm-color.

Changes:
- Simplified local development setup (no xterm-color use-package needed)
- Removed :preface xterm-color :demand t from debug examples
- Updated manual install to just require wttrin (not xterm-color first)
- Clarified that xterm-color loads automatically when needed
- Noted MELPA auto-installs xterm-color as dependency

The configuration is now simpler and matches the lazy-loading behavior.
</content>
</entry>
<entry>
<title>docs: Simplify manual installation debug example</title>
<updated>2025-11-08T18:46:03+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-08T18:46:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=62bde926991ffc2fb57b49c0618b2dd177765dd6'/>
<id>urn:sha1:62bde926991ffc2fb57b49c0618b2dd177765dd6</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>docs: Use :preface for wttrin-debug instead of external setq</title>
<updated>2025-11-08T18:40:15+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-08T18:40:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=ad9099f489b5d0ab89d23566c386c915cd92db06'/>
<id>urn:sha1:ad9099f489b5d0ab89d23566c386c915cd92db06</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>refactor: make debug functions public (single hyphen naming)</title>
<updated>2025-11-08T18:12:52+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-08T18:12:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=04b11059b831c94b4e5ba901b735fcc888cbbe1a'/>
<id>urn:sha1:04b11059b831c94b4e5ba901b735fcc888cbbe1a</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
