<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs-wttrin/README.org, 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:52:52+00:00</updated>
<entry>
<title>docs: document auto-fit and buffer centering</title>
<updated>2026-06-28T10:52:52+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T10:52:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=bcdb5889bc7f38ce1e87c495b6f186b62e45467a'/>
<id>urn:sha1:bcdb5889bc7f38ce1e87c495b6f186b62e45467a</id>
<content type='text'>
Add an "Auto-Fit and Centering" subsection to the README font settings: the
weather block centers automatically, and wttrin-auto-fit-font (with the
min/max floor and cap) opts into sizing the font to the window.
</content>
</entry>
<entry>
<title>docs: fix verbatim markdown bold in the README geolocation section</title>
<updated>2026-06-28T07:43:11+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:43:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=276b66894e71a842b8cc1e9143feadabf75874ea'/>
<id>urn:sha1:276b66894e71a842b8cc1e9143feadabf75874ea</id>
<content type='text'>
Five labels used Markdown **bold**, which renders literally in the Org
README. Switched them to Org *bold*.
</content>
</entry>
<entry>
<title>feat: fit and center the weather buffer in its window</title>
<updated>2026-06-28T07:20:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-28T07:20:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=e8ea03ecc8c1a2499046b34f785bca4f871531df'/>
<id>urn:sha1:e8ea03ecc8c1a2499046b34f785bca4f871531df</id>
<content type='text'>
Centering and auto-fit share one resize hook (wttrin--update-layout on
window-configuration-change-hook).

Centering is always on. The block centers via the window's left margin,
measured in pixels from the buffer font so it stays exact under a font-height
remap. It centers against the available width including the current margin, so
the margin shrinking the body can't make the value oscillate.

Auto-fit is opt-in (wttrin-auto-fit-font, off by default). When on, the font is
sized so the whole buffer fits top to bottom (down to the row past the footer's
last menu item) without the widest line truncating, clamped to
wttrin-font-height-min and -max.

The pixel-exact measurement needs window-font-width and window-font-height, so
the minimum is now Emacs 25.1.
</content>
</entry>
<entry>
<title>docs: use a public landmark address in saved-location examples</title>
<updated>2026-06-26T15:04:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-26T15:04:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=d4d12746e81348a55a25a1e40dbeac6a935e2825'/>
<id>urn:sha1:d4d12746e81348a55a25a1e40dbeac6a935e2825</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add named-locations directory with display names</title>
<updated>2026-06-26T14:53:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-26T14:53:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=55ee8158a1f85bb532a24d752f9ef409192a924c'/>
<id>urn:sha1:55ee8158a1f85bb532a24d752f9ef409192a924c</id>
<content type='text'>
A saved location carries a display name distinct from its query target ("Mom's House" maps to coordinates or an address), stored in a savehist-persisted wttrin-saved-locations alist. The name shows everywhere the place appears (picker, buffer header, mode-line tooltip) while wttr.in is still queried by the target.

Management commands wttrin-save-location, wttrin-rename-location, and wttrin-remove-location edit the directory, with refuse-on-collision rename and a favorite-fallback warning on remove. In the weather buffer, s/r/x reach those commands and d names a detected location before promoting it to the default. The footer is two columns: a "This view" column (another, refresh, quit) and a "Saved locations" column (save, make default, rename, remove). The buffer anchors to the top so the forecast isn't scrolled out of view in a short window.

The mode-line follows favorite changes immediately rather than waiting for the next scheduled fetch, and its hover tooltip shows the saved name instead of the raw query. History holds named entries only: raw coordinate detections and saved names stay out of it.
</content>
</entry>
<entry>
<title>feat: add external-command geolocation, opt-out, and example adapters</title>
<updated>2026-06-25T20:03:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-25T20:03:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=7027cccea9eb7170ea0f08e1def3f979f2e59932'/>
<id>urn:sha1:7027cccea9eb7170ea0f08e1def3f979f2e59932</id>
<content type='text'>
These build on the current-location picker with the rest of the geolocation work.

wttrin-geolocation-command runs a command that prints {lat,lng} (and optionally an address) and queries wttr.in by those coordinates. IP geolocation only finds the network's exit point, which is wrong on a VPN or hotspot. A command that scans nearby WiFi resolves to street level. It runs asynchronously, falls back to the IP provider when unset or failing, and assumes nothing about the OS, so it's inert until set. When the command returns an address, wttrin shows it on a "Location:" line, so the resolved place is readable even though the fetch is by raw coordinates.

wttrin-use-current-location is a labeled command that sets the favorite to auto-detect, so the bare t value never has to be typed into init by hand.

wttrin-geolocation-enabled (default t) turns every geolocation surface off for anyone who wants that: the picker entry, the auto-detect favorite, and the command.

examples/geolocation/ ships two reference adapters for the command: google-geolocate.py (Google API, key via the environment or ~/.authinfo.gpg) and apple-wps.py (Apple's keyless WiFi positioning, which uses an undocumented endpoint, so read its caveat). Both are Python 3 standard library and scan via nmcli, with notes on adapting the scan to other systems.
</content>
</entry>
<entry>
<title>feat: add current-location detection to the weather picker</title>
<updated>2026-06-25T16:15:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-25T16:15:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=33621b5a6e5407da190767b89756e287698ef234'/>
<id>urn:sha1:33621b5a6e5407da190767b89756e287698ef234</id>
<content type='text'>
Geolocation used to live in a separate command, so getting weather for where you are meant knowing a second command existed. I added a "Current location (detect)" entry pinned to the top of the M-x wttrin picker. Selecting it detects your location and shows its weather. If the guess is wrong (VPN, hotspot) the detected city is visible in the header, so you reopen the picker and type one. Press d to keep the detected city as the default.

The entry is pinned first through a completion table whose display-sort-function holds against completion frameworks that re-sort, and it never enters location history or the cache as a place.

A new wttrin-geolocation-enabled (default t) turns every geolocation surface off for users who want that: the picker entry, the auto-detect favorite, and the command. It stays on by default.

The older wttrin-set-location-from-geolocation command is now obsolete in favor of the picker. Its customize-save-variable persistence advice is replaced by savehist, which already carries the favorite across sessions.
</content>
</entry>
<entry>
<title>feat: add 'd' key to make the displayed location the default</title>
<updated>2026-06-24T04:10:51+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-24T04:10:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=efd3cdce5b3aebfdb3e02460d1ec0434cef85949'/>
<id>urn:sha1:efd3cdce5b3aebfdb3e02460d1ec0434cef85949</id>
<content type='text'>
I bound d in the weather buffer to wttrin-make-default, which sets wttrin-favorite-location to the location on screen so it drives the mode-line and future sessions. The footer advertises "[d] to make default".

Persistence rides savehist, not the Emacs custom-variable mechanism: wttrin--savehist-register registers wttrin-favorite-location alongside the search history, at load and on savehist-save-hook. Enable savehist-mode and the favorite survives restarts.

Promoting a location drops it from the search history, the way wttrin-default-locations entries are kept out of history. The favorite shows in the picker instead: wttrin--completion-candidates prepends it when it's a string and not already a default, so it appears exactly once.

The setter only assigns the variable and trims history. It doesn't register with savehist itself, because savehist-additional-variables is unbound until savehist loads, so a direct add-to-list would error for users without savehist. Registration stays on the load and save-hook path.
</content>
</entry>
<entry>
<title>feat: expose themeable faces for mode-line and buffer text</title>
<updated>2026-06-24T03:04:46+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-24T03:04:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=4d46eafaa087f5570ece9d2e5f5d2ba6bc0d824e'/>
<id>urn:sha1:4d46eafaa087f5570ece9d2e5f5d2ba6bc0d824e</id>
<content type='text'>
I added four customizable faces so themes and customize-face can restyle the text wttrin draws itself: wttrin-mode-line-stale (the dimmed stale mode-line emoji), wttrin-staleness-header (the "Last updated:" line), wttrin-instructions (the footer prose), and wttrin-key (the [a]/[g]/[q] chords).

The package exposed no faces before and hardcoded one color. The stale-emoji dimming used a literal "gray60". Now it inherits a face, so the color tracks the theme. I changed make-emoji-icon's second argument from a color string to a face symbol applied via :inherit.

wttrin-key inherits bold rather than help-key-binding, which is Emacs 28+ while the package supports 24.4.

The weather ASCII art stays colored by xterm-color's ANSI faces. Only the package's own text is newly faced.
</content>
</entry>
<entry>
<title>fix: keep location history registered after a savehist setq</title>
<updated>2026-06-21T13:11:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-21T13:11:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/emacs-wttrin/commit/?id=eaabae3b01b8bdc05a5892492c06a8131c195a45'/>
<id>urn:sha1:eaabae3b01b8bdc05a5892492c06a8131c195a45</id>
<content type='text'>
A one-time add-to-list put wttrin--location-history into savehist-additional-variables when savehist loaded. Any user who later setqs that list, a common config pattern for curating which histories persist, replaces it and drops the entry. The search history then silently never saves.

Re-assert the registration on savehist-save-hook, which runs at the top of every savehist-save. The variable is now in the list whenever a save happens, regardless of init order or a clobbering setq. Restore was never affected, since savehist reloads the value from explicit setq forms in its file.

The README persistence note now reflects this: the variable stays registered even if you set savehist-additional-variables yourself.
</content>
</entry>
</feed>
