branch: externals/ellama
commit 38b7a76955c19334652e1c3c0716a768670dc0dd
Author: Sergey Kostyaev <sskosty...@gmail.com>
Commit: Sergey Kostyaev <sskosty...@gmail.com>

    Add functionality to hide and collapse org quotes in session buffer
    
    Added a new custom variable `ellama-session-hide-org-quotes` to
    control whether org quotes should be hidden in the session buffer.
    Implemented functions `ellama-collapse-org-quotes` to collapse quote
    blocks and `ellama-hide-quotes` to hide quotes if the setting is
    enabled. Updated the session handling logic to call
    `ellama-hide-quotes` when a new session is created or resumed.
    Additionally, modified the markdown to org conversion function to
    replace `<think>` tags with org quote blocks.
---
 ellama.el | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/ellama.el b/ellama.el
index 168244f6cd..0365c9060f 100644
--- a/ellama.el
+++ b/ellama.el
@@ -84,6 +84,11 @@ This can improve long-term communication with reasoning 
models."
   :group 'ellama
   :type 'boolean)
 
+(defcustom ellama-session-hide-org-quotes t
+  "Hide org quotes in ellama session buffer."
+  :group 'ellama
+  :type 'boolean)
+
 (defcustom ellama-chat-translation-enabled nil
   "Enable chat translations."
   :group 'ellama
@@ -629,6 +634,8 @@ This filter contains only subset of markdown syntax to be 
good enough."
     (replace-regexp-in-string "^[[:space:]]*```$" "#+END_SRC")
     (replace-regexp-in-string "^[[:space:]]*```" "#+END_SRC\n")
     (replace-regexp-in-string "```" "\n#+END_SRC\n")
+    (replace-regexp-in-string "<think>[\n]?" "#+BEGIN_QUOTE\n")
+    (replace-regexp-in-string "</think>[\n]?" "#+END_QUOTE\n")
     (ellama--replace-bad-code-blocks)
     (ellama--replace-outside-of-code-blocks)))
 
@@ -942,6 +949,7 @@ If EPHEMERAL non nil new session will not be associated 
with any file."
               buffer ellama--active-sessions)
       (ellama-session-mode +1))
     (kill-buffer session-buffer)
+    (ellama-hide-quotes)
     (display-buffer buffer (when ellama-chat-display-action-function
                             `((ignore . 
(,ellama-chat-display-action-function)))))))
 
@@ -1573,6 +1581,28 @@ Otherwire return current active session."
       (with-current-buffer (ellama-get-session-buffer 
ellama--current-session-id)
        ellama--current-session))))
 
+(defun ellama-collapse-org-quotes ()
+  "Collapse quote blocks in curent buffer."
+  (declare-function org-element-map "ext:org-element")
+  (declare-function org-element-parse-buffer "ext:org-element")
+  (declare-function org-element-property "ext:org-element")
+  (declare-function org-hide-block-toggle "ext:org-compat")
+  (when (derived-mode-p 'org-mode)
+    (progn (save-excursion
+            (goto-char (point-min))
+            (org-element-map (org-element-parse-buffer) 'quote-block
+              (lambda (block)
+                (goto-char (org-element-property :begin block))
+                (org-hide-block-toggle 't)))))))
+
+(defun ellama-hide-quotes ()
+  "Hide quotes in current session buffer if needed."
+  (when-let* ((ellama-session-hide-org-quotes)
+             (session-id ellama--current-session-id)
+             (buf (ellama-get-session-buffer session-id)))
+    (with-current-buffer buf
+      (ellama-collapse-org-quotes))))
+
 (defun ellama-stream (prompt &rest args)
   "Query ellama for PROMPT.
 ARGS contains keys for fine control.
@@ -1682,6 +1712,8 @@ failure (with BUFFER current).
                                          (mapc (lambda (fn) (funcall fn text))
                                                donecb)
                                        (funcall donecb text))
+                                     (when ellama-session-hide-org-quotes
+                                       (ellama-collapse-org-quotes))
                                      (when (and ellama--current-session
                                                 
ellama-session-remove-reasoning)
                                        (mapc (lambda (interaction)

Reply via email to