emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ellama d2fc4223f7: Fix scrolling


From: ELPA Syncer
Subject: [elpa] externals/ellama d2fc4223f7: Fix scrolling
Date: Thu, 21 Dec 2023 09:57:45 -0500 (EST)

branch: externals/ellama
commit d2fc4223f7fc29356d66253dea5a47afa3d7478c
Author: Sergey Kostyaev <kostyaev.sergey2@wb.ru>
Commit: Sergey Kostyaev <kostyaev.sergey2@wb.ru>

    Fix scrolling
---
 NEWS.org  |   3 ++
 ellama.el | 114 ++++++++++++++++++++++++++++++++++++++------------------------
 2 files changed, 74 insertions(+), 43 deletions(-)

diff --git a/NEWS.org b/NEWS.org
index 8c65ebc7be..4f8dcdd027 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -1,3 +1,6 @@
+* Version 0.4.3
+- Fix scrolling during generation.
+- Add auto scrolling for all commands.
 * Version 0.4.2
 - Add auto scrolling. Disabled by default.
 * Version 0.4.1
diff --git a/ellama.el b/ellama.el
index 3059cefb53..40e5f25ceb 100644
--- a/ellama.el
+++ b/ellama.el
@@ -6,7 +6,7 @@
 ;; URL: http://github.com/s-kostyaev/ellama
 ;; Keywords: help local tools
 ;; Package-Requires: ((emacs "28.1") (llm "0.6.0") (spinner "1.7.4"))
-;; Version: 0.4.2
+;; Version: 0.4.3
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;; Created: 8th Oct 2023
 
@@ -185,15 +185,27 @@ in.  Default value is (current-buffer).
          (save-excursion
            (let* ((start (make-marker))
                   (end (make-marker))
+                  (window (selected-window))
                   (insert-text
                    (lambda (text)
                      ;; Erase and insert the new text between the marker cons.
                      (with-current-buffer (marker-buffer start)
-                       (save-excursion
-                         (goto-char start)
-                         (delete-region start end)
-                         (insert text)
-                         (fill-region start (point)))))))
+                       (let ((pt (point)))
+                         (save-excursion
+                           (goto-char start)
+                           (delete-region start end)
+                           (insert text)
+                           (fill-region start (point)))
+                         (goto-char pt))
+                       (when ellama-auto-scroll
+                         (select-window (get-window-with-predicate
+                                         (lambda (_)
+                                           (eq (current-buffer)
+                                               (get-buffer buffer))))
+                                        t)
+                         (goto-char (point-max))
+                         (recenter -1)
+                         (select-window window))))))
              (setq ellama--change-group (prepare-change-group))
              (activate-change-group ellama--change-group)
               (set-marker start point)
@@ -219,38 +231,52 @@ in.  Default value is (current-buffer).
 In BUFFER at POINT will be inserted result between PREFIX and SUFFIX."
   (with-current-buffer buffer
     (unwind-protect
-     (save-excursion
-      (let* ((start (make-marker))
-             (end (make-marker))
-            (insert-text (lambda (text)
-                           ;; Erase and insert the new text between the marker 
cons.
-                           (with-current-buffer (marker-buffer start)
-                             (save-excursion
-                               (goto-char start)
-                               (delete-region start end)
-                               ;; remove prefix and suffix parts
-                               (insert (string-trim-right
-                                        (string-trim-left text prefix)
-                                        suffix)))))))
-       (setq ellama--change-group (prepare-change-group))
-       (activate-change-group ellama--change-group)
-        (set-marker start point)
-        (set-marker end point)
-        (set-marker-insertion-type start nil)
-        (set-marker-insertion-type end t)
-       (spinner-start ellama-spinner-type)
-       (llm-chat-streaming ellama-provider
-                           (llm-make-simple-chat-prompt prompt)
-                           insert-text
-                           (lambda (text)
-                             (funcall insert-text text)
-                             (with-current-buffer buffer
-                               (undo-amalgamate-change-group 
ellama--change-group)
-                               (accept-change-group ellama--change-group)
-                               (spinner-stop)))
-                           (lambda (_ msg)
-                             (cancel-change-group ellama--change-group)
-                             (error "Error calling the LLM: %s" msg))))))))
+       (save-excursion
+         (let* ((start (make-marker))
+                (end (make-marker))
+                (window (selected-window))
+                (insert-text
+                 (lambda (text)
+                   ;; Erase and insert the new text between the marker cons.
+                   (with-current-buffer (marker-buffer start)
+                     (let ((pt (point)))
+                       (save-excursion
+                         (goto-char start)
+                         (delete-region start end)
+                         ;; remove prefix and suffix parts
+                         (insert (string-trim-right
+                                  (string-trim-left text prefix)
+                                  suffix))
+                         (fill-region start (point)))
+                       (goto-char pt))
+                     (when ellama-auto-scroll
+                       (select-window (get-window-with-predicate
+                                       (lambda (_)
+                                         (eq (current-buffer)
+                                             (get-buffer ellama-buffer))))
+                                      t)
+                       (goto-char (point-max))
+                       (recenter -1)
+                       (select-window window))))))
+           (setq ellama--change-group (prepare-change-group))
+           (activate-change-group ellama--change-group)
+            (set-marker start point)
+            (set-marker end point)
+            (set-marker-insertion-type start nil)
+            (set-marker-insertion-type end t)
+           (spinner-start ellama-spinner-type)
+           (llm-chat-streaming ellama-provider
+                               (llm-make-simple-chat-prompt prompt)
+                               insert-text
+                               (lambda (text)
+                                 (funcall insert-text text)
+                                 (with-current-buffer buffer
+                                   (undo-amalgamate-change-group 
ellama--change-group)
+                                   (accept-change-group ellama--change-group)
+                                   (spinner-stop)))
+                               (lambda (_ msg)
+                                 (cancel-change-group ellama--change-group)
+                                 (error "Error calling the LLM: %s" msg))))))))
 
 ;;;###autoload
 (defun ellama-chat (prompt)
@@ -278,11 +304,13 @@ In BUFFER at POINT will be inserted result between PREFIX 
and SUFFIX."
              (lambda (text)
                ;; Erase and insert the new text between the marker cons.
                (with-current-buffer (marker-buffer start)
-                 (save-excursion
-                   (goto-char start)
-                   (delete-region start end)
-                   (insert text)
-                   (fill-region start (point)))
+                 (let ((pt (point)))
+                   (save-excursion
+                     (goto-char start)
+                     (delete-region start end)
+                     (insert text)
+                     (fill-region start (point)))
+                   (goto-char pt))
                  (when ellama-auto-scroll
                    (select-window (get-window-with-predicate
                                    (lambda (_)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]