diff options
-rw-r--r-- | elisp/geiser-connection.el | 8 | ||||
-rw-r--r-- | elisp/geiser-repl.el | 52 |
2 files changed, 27 insertions, 33 deletions
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 9b98373..1068330 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -1,6 +1,6 @@ ;;; geiser-connection.el -- talking to a scheme process -;; Copyright (C) 2009, 2010, 2011, 2013 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011, 2013, 2021 Jose Antonio Ortega Ruiz ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the Modified BSD License. You should @@ -92,11 +92,11 @@ (tq-queue-pop tq))))))) (defun geiser-con--combined-prompt (prompt debug) - (format "\\(%s%s\\)" prompt (if debug (format "\\|%s" debug) ""))) + (if debug (format "\\(%s\\)\\|\\(%s\\)" prompt debug) prompt)) (defun geiser-con--connection-eot-re (prompt debug) - (geiser-con--combined-prompt (format "\n%s" prompt) - (and debug (format "\n%s" debug)))) + (geiser-con--combined-prompt (format "\n\\(%s\\)" prompt) + (and debug (format "\n\\(%s\\)" debug)))) (defun geiser-con--make-connection (proc prompt debug-prompt) (list t diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 6f28ae8..814c501 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -464,37 +464,31 @@ module command as a string") (let ((font-lock-dont-widen t)) (font-lock-default-unfontify-region (point-min) (point-max)))))) -(defun geiser-repl--output-filter (txt) - (let ((mark-output nil)) +(defun geiser-repl--find-output-region () + (save-excursion + (goto-char (point-max)) + (re-search-backward comint-prompt-regexp) + (move-to-column 0) + (set-marker geiser-repl--last-output-end (point)) (save-excursion - (goto-char (point-max)) - (re-search-backward comint-prompt-regexp) - ;; move to start of line to prevent accidentally marking a REPL prompt - (move-to-column 0) - ;; Only mark output which: - ;; a) is not on the REPL output line - ;; b) has at least one character - ;; - ;; This makes the magic number for distance 3 -- as the newline - ;; after executing expression is also counted. This is due to the point - ;; being set before comint-send-input. - ;; - ;; Restriction a) applies due to our inability to distinguish between - ;; output from the REPL, and the REPL prompt output. - (let ((distance (- (point) geiser-repl--last-output-start))) - (when (> distance 2) - (setq mark-output t) - (set-marker geiser-repl--last-output-end (point))))) - (when mark-output - (with-silent-modifications - (add-text-properties (1+ geiser-repl--last-output-start) - geiser-repl--last-output-end - `(read-only ,geiser-repl-read-only-output-p)) - (geiser-repl--fontify-output-region geiser-repl--last-output-start - geiser-repl--last-output-end) - (geiser--font-lock-ensure geiser-repl--last-output-start - geiser-repl--last-output-end)))) + (when (re-search-backward comint-prompt-regexp nil t) + (forward-line) + (when (> (point) geiser-repl--last-output-start) + (set-marker geiser-repl--last-output-start (point))))) + (> (- geiser-repl--last-output-end geiser-repl--last-output-start) 2))) + +(defun geiser-repl--treat-output-region () + (with-silent-modifications + (add-text-properties (1- geiser-repl--last-output-start) + geiser-repl--last-output-end + `(read-only ,geiser-repl-read-only-output-p)) + (geiser-repl--fontify-output-region geiser-repl--last-output-start + geiser-repl--last-output-end) + (geiser--font-lock-ensure geiser-repl--last-output-start + geiser-repl--last-output-end))) +(defun geiser-repl--output-filter (txt) + (when (geiser-repl--find-output-region) (geiser-repl--treat-output-region)) (geiser-con--connection-update-debugging geiser-repl--connection txt) (geiser-image--replace-images geiser-repl-inline-images-p geiser-repl-auto-display-images-p) |