mirror of
https://github.com/khoj-ai/khoj.git
synced 2024-11-27 17:35:07 +01:00
Stylize references shown as footnote links in chat messages
- Render references as superscript - Show reference definitions on hover over reference links to ease access - Truncate reference def shown on hover to 70 char - Add continuation suffix, ..., when reference definition truncated
This commit is contained in:
parent
cf28f104c7
commit
5e9558d39d
1 changed files with 30 additions and 4 deletions
|
@ -348,6 +348,8 @@ Render results in BUFFER-NAME using QUERY, CONTENT-TYPE."
|
||||||
(with-current-buffer (get-buffer-create buffer-name)
|
(with-current-buffer (get-buffer-create buffer-name)
|
||||||
(erase-buffer)
|
(erase-buffer)
|
||||||
(insert "#+STARTUP: showall hidestars\n")
|
(insert "#+STARTUP: showall hidestars\n")
|
||||||
|
;; allow sub, superscript text within {} for footnotes
|
||||||
|
(insert "#+OPTIONS: ^:{}\n")
|
||||||
(thread-last
|
(thread-last
|
||||||
json-response
|
json-response
|
||||||
;; generate chat messages from Khoj Chat API response
|
;; generate chat messages from Khoj Chat API response
|
||||||
|
@ -356,19 +358,43 @@ Render results in BUFFER-NAME using QUERY, CONTENT-TYPE."
|
||||||
(mapc #'insert))
|
(mapc #'insert))
|
||||||
(progn (org-mode)
|
(progn (org-mode)
|
||||||
(visual-line-mode)
|
(visual-line-mode)
|
||||||
|
(khoj--add-hover-text-to-footnote-refs (point-min))
|
||||||
(read-only-mode t)))))
|
(read-only-mode t)))))
|
||||||
|
|
||||||
|
(defun khoj--add-hover-text-to-footnote-refs (start-pos)
|
||||||
|
"Show footnote definition on mouse hover over all footnote references from START-POS."
|
||||||
|
(org-with-wide-buffer
|
||||||
|
(goto-char start-pos)
|
||||||
|
(while (re-search-forward org-footnote-re nil t)
|
||||||
|
(backward-char)
|
||||||
|
(let* ((context (org-element-context))
|
||||||
|
(label (org-element-property :label context))
|
||||||
|
(footnote-def (nth 3 (org-footnote-get-definition label)))
|
||||||
|
(footnote-width (if (< (length footnote-def) 70) nil 70))
|
||||||
|
(begin-pos (org-element-property :begin context))
|
||||||
|
(end-pos (org-element-property :end context))
|
||||||
|
(overlay (make-overlay begin-pos end-pos)))
|
||||||
|
(when (memq (org-element-type context)
|
||||||
|
'(footnote-reference))
|
||||||
|
(-->
|
||||||
|
footnote-def
|
||||||
|
(substring it 0 footnote-width)
|
||||||
|
(concat it (if footnote-width "..." ""))
|
||||||
|
(overlay-put overlay 'help-echo it)))))))
|
||||||
|
|
||||||
(defun khoj--query-chat-api-and-render-messages (query buffer-name)
|
(defun khoj--query-chat-api-and-render-messages (query buffer-name)
|
||||||
"Send QUERY to Khoj Chat. Render the chat messages from exchange in BUFFER-NAME."
|
"Send QUERY to Khoj Chat. Render the chat messages from exchange in BUFFER-NAME."
|
||||||
;; render json response into formatted chat messages
|
;; render json response into formatted chat messages
|
||||||
(with-current-buffer (get-buffer buffer-name)
|
(with-current-buffer (get-buffer buffer-name)
|
||||||
(let ((inhibit-read-only t)
|
(let ((inhibit-read-only t)
|
||||||
|
(new-content-start-pos (point-max))
|
||||||
(query-time (format-time-string "%F %T"))
|
(query-time (format-time-string "%F %T"))
|
||||||
(json-response (khoj--query-chat-api query)))
|
(json-response (khoj--query-chat-api query)))
|
||||||
(goto-char (point-max))
|
(goto-char new-content-start-pos)
|
||||||
(insert
|
(insert
|
||||||
(khoj--render-chat-message query "you" query-time)
|
(khoj--render-chat-message query "you" query-time)
|
||||||
(khoj--render-chat-response json-response)))
|
(khoj--render-chat-response json-response))
|
||||||
|
(khoj--add-hover-text-to-footnote-refs new-content-start-pos))
|
||||||
(progn (org-mode)
|
(progn (org-mode)
|
||||||
(visual-line-mode))
|
(visual-line-mode))
|
||||||
(read-only-mode t)))
|
(read-only-mode t)))
|
||||||
|
@ -404,7 +430,7 @@ RECEIVE-DATE is the message receive date."
|
||||||
"Create `org-mode' footnotes with REFERENCE."
|
"Create `org-mode' footnotes with REFERENCE."
|
||||||
(setq khoj--reference-count (1+ khoj--reference-count))
|
(setq khoj--reference-count (1+ khoj--reference-count))
|
||||||
(cons
|
(cons
|
||||||
(format "[fn:%x]" khoj--reference-count)
|
(propertize (format "^{ [fn:%x]}" khoj--reference-count) 'help-echo reference)
|
||||||
(thread-last
|
(thread-last
|
||||||
reference
|
reference
|
||||||
(replace-regexp-in-string "\n\n" "\n")
|
(replace-regexp-in-string "\n\n" "\n")
|
||||||
|
@ -424,7 +450,7 @@ RECEIVE-DATE is the message receive date."
|
||||||
;; extract khoj message from API response and make it bold
|
;; extract khoj message from API response and make it bold
|
||||||
(format "%s" message)
|
(format "%s" message)
|
||||||
;; append reference links to khoj message
|
;; append reference links to khoj message
|
||||||
(concat " " (string-join footnote-links " "))
|
(concat (string-join footnote-links ""))
|
||||||
;; append reference sub-section to khoj message
|
;; append reference sub-section to khoj message
|
||||||
(concat (if footnote-defs "\n**** References\n:PROPERTIES:\n:VISIBILITY: folded\n:END:" ""))
|
(concat (if footnote-defs "\n**** References\n:PROPERTIES:\n:VISIBILITY: folded\n:END:" ""))
|
||||||
(concat (string-join footnote-defs " "))
|
(concat (string-join footnote-defs " "))
|
||||||
|
|
Loading…
Reference in a new issue