<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs-wttrin/wttrin.el, branch release/0.4.0</title>
<subtitle>Emacs frontend for Igor Chubin's wttr.in weather service
</subtitle>
<id>https://git.cjennings.net/emacs-wttrin/atom?h=release%2F0.4.0</id>
<link rel='self' href='https://git.cjennings.net/emacs-wttrin/atom?h=release%2F0.4.0'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/'/>
<updated>2026-06-28T10:42:00+00:00</updated>
<entry>
<title>fix: don't auto-fit the loading placeholder to a huge font</title>
<updated>2026-06-28T10:42:00+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T10:42:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=16be44154cf823332332d1df995ae1ed50ff43c4'/>
<id>urn:sha1:16be44154cf823332332d1df995ae1ed50ff43c4</id>
<content type='text'>
With auto-fit on, the one-line "Loading..." placeholder was sized to fill the
window height (capped huge), and a reused buffer kept the previous weather's
auto-fitted font while loading. Auto-fit now runs only once real weather has
rendered, and the placeholder resets to the base font.
</content>
</entry>
<entry>
<title>fix: don't steal focus when an async weather response renders</title>
<updated>2026-06-28T08:11:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T08:11:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=da7ee0841924dfbd91c9a944e0bfeff6903bd8a1'/>
<id>urn:sha1:da7ee0841924dfbd91c9a944e0bfeff6903bd8a1</id>
<content type='text'>
wttrin--display-weather ran switch-to-buffer from the async callback, so a
response arriving after the user moved to another buffer yanked them back to
*wttr.in*. It now renders with set-buffer; selecting the buffer is the
interactive command's job (wttrin-query already does it at invocation), so a
late response updates the buffer in place without changing the selected window.
</content>
</entry>
<entry>
<title>fix: drop stale async weather responses that overwrite a newer query</title>
<updated>2026-06-28T08:06:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T08:06:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=ce74e30562dfac3f599a94a45ac16c3c2319ab41'/>
<id>urn:sha1:ce74e30562dfac3f599a94a45ac16c3c2319ab41</id>
<content type='text'>
wttrin-query reuses the single *wttr.in* buffer, so requesting Paris then Berlin
and having Paris return last overwrote the Berlin buffer. Each query now stamps
a monotonic request id on the buffer; the callback displays only when its
captured id still matches, so a superseded response is ignored.
</content>
</entry>
<entry>
<title>fix: stop the mode-line cleanly when disabled before startup fires</title>
<updated>2026-06-28T08:01:06+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:56:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=19e103fea2e55a3e3bc3a777b4c618e644b57760'/>
<id>urn:sha1:19e103fea2e55a3e3bc3a777b4c618e644b57760</id>
<content type='text'>
The delayed initial fetch was scheduled with run-at-time but the one-shot timer
was discarded, and when the mode is enabled before after-init the start is
queued on after-init-hook. Disabling the mode before either fired could still
start timers, hit the network, or mutate mode-line state after the user turned
it off. Stop now cancels the stored startup timer and removes the after-init
hook, and the startup callback no-ops when the mode is off.
</content>
</entry>
<entry>
<title>fix: always evict at least one cache entry when over max</title>
<updated>2026-06-28T07:53:24+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:53:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=ec38418d6d3eb4342363af1714f0073a74d52fbc'/>
<id>urn:sha1:ec38418d6d3eb4342363af1714f0073a74d52fbc</id>
<content type='text'>
wttrin--cleanup-cache-if-needed removed floor(count * 0.20) entries, which is 0
for a small cache (e.g. two entries at max one), so the cache could sit over its
advertised maximum indefinitely. It now removes at least one whenever it is over.
</content>
</entry>
<entry>
<title>fix: key the cache on all response-shaping settings</title>
<updated>2026-06-28T07:50:53+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:50:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=944a52f0e33087dafba383edb3d97ec19a06d361'/>
<id>urn:sha1:944a52f0e33087dafba383edb3d97ec19a06d361</id>
<content type='text'>
wttrin--make-cache-key keyed only on location and unit system, but the request
body also depends on wttrin-display-options and wttrin-default-languages.
Changing display options or language mid-session served the old cached response,
and the staleness header then claimed it was current for the new settings. The
key now includes every setting that shapes the response.

Cache-key tests rewritten to assert behavior (distinct key per varying setting,
stable key for identical settings) instead of an exact key string.
</content>
</entry>
<entry>
<title>fix: require subr-x for string-trim</title>
<updated>2026-06-28T07:47:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:47:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=38b7812b3bce45372fd2f11a8da710cb73717092'/>
<id>urn:sha1:38b7812b3bce45372fd2f11a8da710cb73717092</id>
<content type='text'>
wttrin.el calls string-trim throughout but never required subr-x, so a clean
load could hit a void-function before something else pulled subr-x in.
</content>
</entry>
<entry>
<title>chore: clean up package metadata</title>
<updated>2026-06-28T07:45:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:45:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=aeb3f35eee682c489698f17b2286c43cd4921b01'/>
<id>urn:sha1:aeb3f35eee682c489698f17b2286c43cd4921b01</id>
<content type='text'>
Drop the "games" keyword (it miscategorizes a weather tool) from wttrin.el and
Eask. Sync wttrin-geolocation.el's version to 0.3.2 to match the main module.
</content>
</entry>
<entry>
<title>style: normalize wttrin-default-locations indentation to spaces</title>
<updated>2026-06-28T07:44:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:44:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=63a905217718370b187680078d4c1ecd023470e3'/>
<id>urn:sha1:63a905217718370b187680078d4c1ecd023470e3</id>
<content type='text'>
The list mixed tabs and spaces. Aligned every entry on spaces, no behavior
change.
</content>
</entry>
<entry>
<title>refactor: extract the auto-fit input guard, fix a unit-stale docstring</title>
<updated>2026-06-28T07:32:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:32:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=0305c495df91220dae780bb79c7293db2c5150c4'/>
<id>urn:sha1:0305c495df91220dae780bb79c7293db2c5150c4</id>
<content type='text'>
Pull the eight-condition validity check in wttrin--fit-font-height into
wttrin--fit-inputs-usable-p, so the arithmetic branch reads as one line.

Reword wttrin--center-margin's docstring, which still said "column counts"
after the pixel-based centering rewrite started passing it pixels.
</content>
</entry>
</feed>
