gptel: Check header-line-format before updating

gptel.el: A header-line is not required for using `gptel-send'. gptel
can now be used from any buffer by selecting a region.
This commit is contained in:
Karthik Chikmagalur 2023-03-09 14:14:06 -08:00
parent 3f7c81012b
commit f98293f004

View file

@ -114,8 +114,9 @@ When set to nil, it is inserted all at once.
(if (and arg (featurep 'gptel-transient)) (if (and arg (featurep 'gptel-transient))
(call-interactively #'gptel-send-menu) (call-interactively #'gptel-send-menu)
(message "Querying ChatGPT...") (message "Querying ChatGPT...")
(setf (nth 1 header-line-format) (and header-line-format
(propertize " Waiting..." 'face 'warning)) (setf (nth 1 header-line-format)
(propertize " Waiting..." 'face 'warning)))
(let* ((gptel-buffer (current-buffer)) (let* ((gptel-buffer (current-buffer))
(full-prompt (gptel--create-prompt)) (full-prompt (gptel--create-prompt))
(response (aio-await (response (aio-await
@ -126,25 +127,26 @@ When set to nil, it is inserted all at once.
(content-str (plist-get response :content)) (content-str (plist-get response :content))
(status-str (plist-get response :status))) (status-str (plist-get response :status)))
(if content-str (if content-str
(with-current-buffer gptel-buffer (with-current-buffer gptel-buffer
(save-excursion (save-excursion
(put-text-property 0 (length content-str) 'gptel 'response content-str) (put-text-property 0 (length content-str) 'gptel 'response content-str)
(message "Querying ChatGPT... done.") (message "Querying ChatGPT... done.")
(goto-char (point-max)) (goto-char (point-max))
(display-buffer (current-buffer) (display-buffer (current-buffer)
'((display-buffer-reuse-window '((display-buffer-reuse-window
display-buffer-use-some-window))) display-buffer-use-some-window)))
(unless (bobp) (insert "\n\n")) (unless (bobp) (insert "\n\n"))
(if gptel-playback (if gptel-playback
(gptel--playback (current-buffer) content-str (point)) (gptel--playback (current-buffer) content-str (point))
(insert content-str)) (insert content-str))
(insert "\n\n" gptel-prompt-string) (insert "\n\n" gptel-prompt-string)
(unless gptel-playback (unless gptel-playback
(setf (nth 1 header-line-format) (setf (nth 1 header-line-format)
(propertize " Ready" 'face 'success))))) (propertize " Ready" 'face 'success)))))
(setf (nth 1 header-line-format) (and header-line-format
(propertize (format " Response Error: %s" status-str) (setf (nth 1 header-line-format)
'face 'error)))))) (propertize (format " Response Error: %s" status-str)
'face 'error)))))))
(defun gptel--create-prompt () (defun gptel--create-prompt ()
"Return a full conversation prompt from the contents of this buffer. "Return a full conversation prompt from the contents of this buffer.
@ -305,9 +307,10 @@ Begin at START-PT."
(min content-length (+ idx 16)))) (min content-length (+ idx 16))))
(setq idx (+ idx 16))) (setq idx (+ idx 16)))
(when start-pt (goto-char (- start-pt 2))) (when start-pt (goto-char (- start-pt 2)))
(setf (nth 1 header-line-format) (and header-line-format
(propertize " Ready" 'face 'success)) (setf (nth 1 header-line-format)
(force-mode-line-update) (propertize " Ready" 'face 'success))
(force-mode-line-update))
(accept-change-group (symbol-value handle)) (accept-change-group (symbol-value handle))
(undo-amalgamate-change-group (symbol-value handle)) (undo-amalgamate-change-group (symbol-value handle))
(cancel-timer (symbol-value playback-timer))))))) (cancel-timer (symbol-value playback-timer)))))))