|
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