aboutsummaryrefslogtreecommitdiff
path: root/wttrin.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-11-08 11:33:31 -0600
committerCraig Jennings <c@cjennings.net>2025-11-08 11:33:31 -0600
commit19e88c1ed7ecde966372adefeb3d468374ef1dd7 (patch)
tree43515c57ad96fcc60f9be57bce7e2938e5e954b1 /wttrin.el
parent47130cec2000f741bdcf61827c03226fd0301bc0 (diff)
downloademacs-wttrin-19e88c1ed7ecde966372adefeb3d468374ef1dd7.tar.gz
emacs-wttrin-19e88c1ed7ecde966372adefeb3d468374ef1dd7.zip
refactor: config: replace magic numbers with named constants
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>
Diffstat (limited to 'wttrin.el')
-rw-r--r--wttrin.el24
1 files changed, 19 insertions, 5 deletions
diff --git a/wttrin.el b/wttrin.el
index 527ac02..afc0d2f 100644
--- a/wttrin.el
+++ b/wttrin.el
@@ -95,6 +95,12 @@ units (default)."
:group 'wttrin
:type 'integer)
+(defconst wttrin--cache-cleanup-percentage 0.20
+ "Percentage of cache entries to remove when max size is exceeded.
+When cache reaches `wttrin-cache-max-entries', remove the oldest 20%
+to avoid frequent cleanup cycles. This value (0.20) means remove 1/5
+of entries, providing a reasonable buffer before the next cleanup.")
+
(defcustom wttrin-mode-line-favorite-location nil
"Favorite location to display weather for in the mode-line.
When nil, mode-line weather display is disabled.
@@ -110,6 +116,13 @@ Default is 900 seconds (15 minutes)."
:group 'wttrin
:type 'integer)
+(defcustom wttrin-mode-line-startup-delay 3
+ "Seconds to delay initial mode-line weather fetch after Emacs starts.
+This allows network stack and daemon initialization to complete before
+fetching weather data. Recommended range: 1-5 seconds."
+ :group 'wttrin
+ :type 'integer)
+
(defcustom wttrin-mode-line-emoji-font "Noto Color Emoji"
"Font family to use for mode-line weather emoji.
Common color emoji fonts include:
@@ -378,8 +391,8 @@ CALLBACK is called with the weather data string when ready, or nil on error."
(push (cons k (car v)) entries))
wttrin--cache)
(setq entries (sort entries (lambda (a b) (< (cdr a) (cdr b)))))
- ;; Remove oldest 20% of entries
- (dotimes (_ (/ (length entries) 5))
+ ;; Remove oldest entries based on wttrin--cache-cleanup-percentage
+ (dotimes (_ (floor (* (length entries) wttrin--cache-cleanup-percentage)))
(when entries
(remhash (caar entries) wttrin--cache)
(setq entries (cdr entries)))))))
@@ -491,8 +504,8 @@ Force-refresh cache and update tooltip without opening buffer."
wttrin-mode-line-favorite-location
wttrin-mode-line-refresh-interval))
(when wttrin-mode-line-favorite-location
- ;; Delay initial fetch by 3 seconds to allow network to initialize during startup
- (run-at-time 3 nil #'wttrin--mode-line-fetch-weather)
+ ;; Delay initial fetch to allow network to initialize during startup
+ (run-at-time wttrin-mode-line-startup-delay nil #'wttrin--mode-line-fetch-weather)
;; Set up refresh timer (starts after the interval from now)
(when wttrin--mode-line-timer
(cancel-timer wttrin--mode-line-timer))
@@ -501,7 +514,8 @@ Force-refresh cache and update tooltip without opening buffer."
wttrin-mode-line-refresh-interval
#'wttrin--mode-line-fetch-weather))
(when (featurep 'wttrin-debug)
- (message "wttrin mode-line: Initial fetch scheduled in 3 seconds, then every %s seconds"
+ (message "wttrin mode-line: Initial fetch scheduled in %s seconds, then every %s seconds"
+ wttrin-mode-line-startup-delay
wttrin-mode-line-refresh-interval))))
(defun wttrin--mode-line-stop ()