blob: 55546d4ef593e1df7dc11eb31bf99a9538522623 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
;;; wttrin-debug.el --- Debug functions for wttrin.el -*- lexical-binding: t; -*-
;; Copyright (C) 2025 Craig Jennings
;; Author: Craig Jennings <c@cjennings.net>
;; Keywords: debug weather wttrin
;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Commentary:
;; This file contains debug functions for troubleshooting wttrin.el behavior.
;; It is only loaded when `wttrin-debug' is non-nil.
;;
;; Enable with:
;; (setq wttrin-debug t)
;; (require 'wttrin)
;;
;; Available debug functions:
;; - `debug-wttrin-show-raw' - View raw weather data with line numbers
;; - `debug-wttrin-mode-line' - Diagnose mode-line lighter issues
;; - `wttrin--debug-mode-line-info' - Auto-called when wttrin runs (if debug enabled)
;;
;; Interactive commands:
;; - M-x debug-wttrin-enable - Enable debug mode
;; - M-x debug-wttrin-disable - Disable debug mode
;;
;; When debug mode is enabled, raw weather data is automatically saved to
;; timestamped files in `temporary-file-directory' for bug reports.
;;; Code:
;; wttrin-debug.el is loaded by wttrin.el, so wttrin is already loaded
;; No need for (require 'wttrin) here
;;;###autoload
(defun debug-wttrin-show-raw (location)
"Fetch and display raw wttr.in data for LOCATION with line numbers.
This is useful for debugging header parsing issues."
(interactive "sLocation: ")
(let ((raw-string (wttrin--get-cached-or-fetch location)))
(with-current-buffer (get-buffer-create "*wttrin-debug*")
(erase-buffer)
(insert raw-string)
(goto-char (point-min))
(let ((line-num 1))
(while (not (eobp))
(beginning-of-line)
(insert (format "%2d: " line-num))
(setq line-num (1+ line-num))
(forward-line 1)))
(goto-char (point-min))
(switch-to-buffer (current-buffer)))))
;;;###autoload
(defun debug-wttrin-enable ()
"Enable wttrin debug mode.
Raw weather data will be saved to timestamped files for bug reports."
(interactive)
(setq wttrin-debug t)
(message "Wttrin debug mode enabled. Raw data will be saved to: %s" temporary-file-directory))
;;;###autoload
(defun debug-wttrin-disable ()
"Disable wttrin debug mode."
(interactive)
(setq wttrin-debug nil)
(message "Wttrin debug mode disabled"))
;;;###autoload
(defun debug-wttrin-mode-line ()
"Display detailed mode-line information for the wttrin buffer.
This is useful for diagnosing why the mode-line lighter isn't appearing."
(interactive)
(if-let ((buf (get-buffer "*wttr.in*")))
(with-current-buffer buf
(let* ((has-custom-modeline (boundp 'cj/modeline-major-mode))
(formatted-mode (when has-custom-modeline
(format-mode-line mode-name))))
(with-output-to-temp-buffer "*wttrin-mode-debug*"
(princ (format "=== Wttrin Mode-Line Debug Info ===\n\n"))
(princ (format "Buffer: %s\n" (buffer-name)))
(princ (format "Major mode: %s\n" major-mode))
(princ (format "mode-name variable: %S\n" mode-name))
(princ (format "mode-name type: %s\n" (type-of mode-name)))
(princ (format "\nCustom modeline detected: %s\n" has-custom-modeline))
(when has-custom-modeline
(princ (format "format-mode-line result: %S\n" formatted-mode)))
(princ (format "\nmode-line-format first 5 elements:\n"))
(let ((i 0))
(dolist (elem mode-line-format)
(when (< i 5)
(princ (format " [%d] %S\n" i elem))
(setq i (1+ i)))))
(princ (format "\nSpecial-mode parent: %s\n"
(get 'wttrin-mode 'derived-mode-parent)))
(princ (format "Is special-mode active: %s\n"
(derived-mode-p 'special-mode))))))
(message "No *wttr.in* buffer exists. Run M-x wttrin first.")))
(defun wttrin--debug-mode-line-info ()
"Auto-generate mode-line diagnostic information.
This function is called automatically when wttrin runs if debug mode is enabled.
It creates the *wttrin-mode-debug* buffer with diagnostic information."
(debug-wttrin-mode-line))
(provide 'wttrin-debug)
;;; wttrin-debug.el ends here
|