@@ -90,7 +90,7 @@ Display buffer from BUFFER-OR-NAME."
9090 (pop-to-buffer buffer-or-name `((display-buffer-in-direction)
9191 (dedicated . t ))))
9292
93- (defun chatgpt--get- user ()
93+ (defun chatgpt-user ()
9494 " Return the current user."
9595 (if (string-empty-p openai-user)
9696 " user" ; this is free?
@@ -193,13 +193,39 @@ The data is consist of ROLE and CONTENT."
193193; ;
194194; ;; Display
195195
196+ (defun chatgpt--render-markdown (content )
197+ " Render CONTENT in markdown."
198+ (if (featurep 'markdown-mode )
199+ (with-temp-buffer
200+ (delay-mode-hooks (markdown-mode ))
201+ (insert content)
202+ (font-lock-ensure )
203+ (buffer-string ))
204+ content))
205+
206+ (defun chatgpt--fill-region (start end )
207+ " Like function `fill-region' (START to END), improve readability."
208+ (save-restriction
209+ (narrow-to-region start end)
210+ (goto-char (point-min ))
211+ (while (not (eobp ))
212+ (end-of-line )
213+ (when (< fill-column (current-column ))
214+ (fill-region (line-beginning-position ) (line-end-position )))
215+ (forward-line 1 ))))
216+
196217(defun chatgpt--display-messages ()
197218 " Display all messages to latest response."
198219 (while (< chatgpt--display-pointer (length chatgpt-chat-history))
199220 (let ((message (elt chatgpt-chat-history chatgpt--display-pointer)))
200221 (let-alist message
201- (insert .role " : " .content)
202- (insert " \n\n " )))
222+ (goto-char (point-max ))
223+ (let ((start (point ))
224+ (content (chatgpt--render-markdown .content))
225+ (is-user (string= (chatgpt-user) .role)))
226+ (insert " <" .role " >: " content)
227+ (insert " \n\n " )
228+ (chatgpt--fill-region start (point )))))
203229 (cl-incf chatgpt--display-pointer)))
204230
205231(defun chatgpt-type-response ()
@@ -210,7 +236,7 @@ The data is consist of ROLE and CONTENT."
210236 (message " [BUSY] Waiting for OpanAI to response... " ))
211237 (t
212238 (let ((response (read-string " Type response: " ))
213- (user (chatgpt--get- user))
239+ (user (chatgpt-user))
214240 (instance chatgpt-instance))
215241 (chatgpt--add-message user response) ; add user's response
216242 (chatgpt-with-instance instance
@@ -248,19 +274,23 @@ The data is consist of ROLE and CONTENT."
248274(defun chatgpt-info ()
249275 " Show session information."
250276 (interactive )
251- (lv-message
252- (concat
253- (format " model: %s " chatgpt-model) " \n "
254- (format " prompt_tokens: %s | completion_tokens: %s | total_tokens: %s "
255- (ht-get chatgpt-data 'prompt_tokens 0 )
256- (ht-get chatgpt-data 'completion_tokens 0 )
257- (ht-get chatgpt-data 'total_tokens 0 ))
258- " \n "
259- (format " max_tokens: %s " chatgpt-max-tokens) " \n "
260- (format " temperature: %s " chatgpt-temperature) " \n "
261- (format " user: %s " (chatgpt--get-user))))
262- ; ; Register event to cancel lv window!
263- (add-hook 'pre-command-hook #'chatgpt--pre-command-once ))
277+ (when (eq major-mode 'chatgpt-mode )
278+ (lv-message
279+ (concat
280+ (format " session: %s " (cdr chatgpt-instance)) " \n "
281+ (format " history size: %s " (length chatgpt-chat-history))
282+ " \n\n "
283+ (format " prompt_tokens: %s | completion_tokens: %s | total_tokens: %s "
284+ (ht-get chatgpt-data 'prompt_tokens 0 )
285+ (ht-get chatgpt-data 'completion_tokens 0 )
286+ (ht-get chatgpt-data 'total_tokens 0 ))
287+ " \n\n "
288+ (format " model: %s " chatgpt-model) " \n "
289+ (format " max_tokens: %s " chatgpt-max-tokens) " \n "
290+ (format " temperature: %s " chatgpt-temperature) " \n "
291+ (format " user: %s " (chatgpt-user))))
292+ ; ; Register event to cancel lv window!
293+ (add-hook 'pre-command-hook #'chatgpt--pre-command-once )))
264294
265295; ;
266296; ;; Entry
0 commit comments