From 38a8b40df277d801fdca10a3c4451781c9f91b07 Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Fri, 22 Jan 2021 21:16:22 +0100 Subject: [PATCH] SLY: Add sly-narrow-to-prompt. --- .emacs.d/lisp/init-sly-narrow.el | 41 ++++++++++++++++++++++++++++++++ .emacs.d/lisp/init-sly.el | 2 ++ 2 files changed, 43 insertions(+) create mode 100644 .emacs.d/lisp/init-sly-narrow.el diff --git a/.emacs.d/lisp/init-sly-narrow.el b/.emacs.d/lisp/init-sly-narrow.el new file mode 100644 index 00000000..d9f9999a --- /dev/null +++ b/.emacs.d/lisp/init-sly-narrow.el @@ -0,0 +1,41 @@ +;; Requires `ambrevar/sly-end-of-prompt-p'. + +(defun ambrevar/sly-prompt-begin-position () + (cond + ((and (get-text-property (point) 'sly-mrepl--prompt) + (not (get-text-property (1- (point)) 'sly-mrepl--prompt))) + (point)) + ((or (get-text-property (point) 'sly-mrepl--prompt) + (ambrevar/sly-end-of-prompt-p)) + (previous-single-char-property-change + (point) 'sly-mrepl--prompt)) + (t (previous-single-char-property-change + (previous-single-char-property-change + (point) 'sly-mrepl--prompt) + 'sly-mrepl--prompt)))) + +(defun ambrevar/sly-prompt-end-position () + (save-excursion + (goto-char (ambrevar/sly-prompt-begin-position)) + (call-interactively #'sly-mrepl-next-prompt) + (point))) + +(defun ambrevar/sly-output-end-position () + (if (get-text-property (point) 'sly-mrepl--prompt) + (next-single-char-property-change + (next-single-char-property-change + (point) 'sly-mrepl--prompt) + 'sly-mrepl--prompt) + (next-single-char-property-change + (point) 'sly-mrepl--prompt))) + +(defun ambrevar/sly-narrow-to-prompt () + "Narrow buffer to prompt at point." + (interactive) + (narrow-to-region + (ambrevar/sly-prompt-begin-position) + (ambrevar/sly-output-end-position))) + +(define-key sly-mrepl-mode-map (kbd "C-x n d") 'ambrevar/sly-narrow-to-prompt) + +(provive 'init-sly-narrow) diff --git a/.emacs.d/lisp/init-sly.el b/.emacs.d/lisp/init-sly.el index 36d5b9b1..32d401ed 100644 --- a/.emacs.d/lisp/init-sly.el +++ b/.emacs.d/lisp/init-sly.el @@ -316,4 +316,6 @@ returns a string." (advice-add 'sly-mrepl-next-prompt :override #'ambrevar/sly-mrepl-next-prompt) (advice-add 'sly-mrepl-previous-prompt :override #'ambrevar/sly-mrepl-previous-prompt) +(require 'init-sly-narrow) + (provide 'init-sly)