|
93 | 93 | (defvar codegpt-requesting-p nil |
94 | 94 | "Non-nil if sitll requesting.") |
95 | 95 |
|
96 | | -(defvar codegpt-spinner-counter 0 |
97 | | - "Spinner counter.") |
98 | | - |
99 | | -(defvar codegpt-spinner-timer nil |
100 | | - "Spinner timer.") |
| 96 | +(defvar codegpt-spinner nil |
| 97 | + "Spinner.") |
101 | 98 |
|
102 | 99 | ;; |
103 | 100 | ;;; Major Mode |
104 | 101 |
|
105 | 102 | (defun codegpt-header-line () |
106 | 103 | "Header line for CodeGPT." |
107 | 104 | (format " %s[Tunnel] %s [Model] %s" |
108 | | - (if codegpt-requesting-p |
109 | | - (let* ((spinner (if (symbolp codegpt-spinner-type) |
110 | | - (cdr (assoc codegpt-spinner-type spinner-types)) |
111 | | - codegpt-spinner-type)) |
112 | | - (len (length spinner))) |
113 | | - (when (<= len codegpt-spinner-counter) |
114 | | - (setq codegpt-spinner-counter 0)) |
115 | | - (format "%s " (elt spinner codegpt-spinner-counter))) |
| 105 | + (if-let ((frame (spinner-print codegpt-spinner))) |
| 106 | + (concat frame " ") |
116 | 107 | "") |
117 | 108 | codegpt-tunnel codegpt-model)) |
118 | 109 |
|
119 | | -(defun codegpt-mode--cancel-timer () |
| 110 | +(defun codegpt-mode--kill-buffer-hook () |
120 | 111 | "Cancel spinner timer." |
121 | | - (when (timerp codegpt-spinner-timer) |
122 | | - (cancel-timer codegpt-spinner-timer))) |
| 112 | + (spinner-stop codegpt-spinner)) |
123 | 113 |
|
124 | 114 | ;;;###autoload |
125 | 115 | (define-derived-mode codegpt-mode fundamental-mode "CodeGPT" |
126 | 116 | "Major mode for `codegpt-mode'. |
127 | 117 |
|
128 | 118 | \\<codegpt-mode-map>" |
129 | | - (setq codegpt-spinner-counter 0) |
130 | 119 | (setq-local header-line-format `((:eval (codegpt-header-line)))) |
131 | | - (add-hook 'kill-buffer-hook #'codegpt-mode--cancel-timer nil t) |
132 | | - (codegpt-mode--cancel-timer) |
133 | | - (setq codegpt-spinner-timer (run-with-timer (/ spinner-frames-per-second 60.0) |
134 | | - (/ spinner-frames-per-second 60.0) |
135 | | - (lambda () |
136 | | - (cl-incf codegpt-spinner-counter) |
137 | | - (force-mode-line-update))))) |
| 120 | + (add-hook 'kill-buffer-hook #'codegpt-mode--kill-buffer-hook nil t) |
| 121 | + (unless (spinner-p codegpt-spinner) |
| 122 | + (setq codegpt-spinner (make-spinner codegpt-spinner-type t))) |
| 123 | + (spinner-start codegpt-spinner)) |
138 | 124 |
|
139 | 125 | ;; |
140 | 126 | ;;; Application |
@@ -191,7 +177,7 @@ boundaries of that region in buffer." |
191 | 177 | ("content" . ,(buffer-string)))])) |
192 | 178 | (lambda (data) |
193 | 179 | (setq codegpt-requesting-p nil) |
194 | | - (codegpt-mode--cancel-timer) |
| 180 | + (spinner-stop codegpt-spinner) |
195 | 181 | (openai--with-buffer codegpt-buffer-name |
196 | 182 | (openai--pop-to-buffer codegpt-buffer-name) |
197 | 183 | (let ((original-point (point))) |
|
0 commit comments