2021-01-22 21:16:22 +01:00
|
|
|
;; 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)))
|
|
|
|
|
2021-01-22 22:06:38 +01:00
|
|
|
(with-eval-after-load 'sly-mrepl
|
|
|
|
(define-key sly-mrepl-mode-map (kbd "C-x n d") 'ambrevar/sly-narrow-to-prompt))
|
2021-01-22 21:16:22 +01:00
|
|
|
|
2021-01-23 13:09:04 +01:00
|
|
|
(provide 'init-sly-narrow)
|