Interest in addition to slime-repl-history-replace?

Andrew Myers asm198 at gmail.com
Wed Jan 8 18:30:25 UTC 2014


Here's what I have modified right now.  Currently Devs who want the
behavior put this in their emacs config after loading slime and set the
defvar to t.  I'm not a slime or elisp expert by a long shot so if
anyone has comments for what I should improve that would be great :)

Andrew

These changes are in contrib/slime-repl.el

> (defvar slime-repl-eli-history-behavior nil)
>
> (defun slime-repl-insert-history (direction pos min-pos max-pos content)
>   (when (slime-repl-history-search-in-progress-p)
>     (let* ((dir-of-previous (if (eq direction 'backward) 'forward
> 'backward))
>            (previous-index (slime-repl-position-in-history pos
> dir-of-previous ""))
>            (previous (nth previous-index slime-repl-input-history)))
>       (let ((prev-point (point)))
>         (backward-char (length previous))
>         (delete-region (min (point) prev-point)
>                        (max (point) prev-point)))))
>   (insert-and-inherit content))
>
> (defun slime-repl-history-replace (direction &optional regexp)
>   "Replace the current input with the next line in DIRECTION.
> DIRECTION is 'forward' or 'backward' (in the history list).
> If REGEXP is non-nil, only lines matching REGEXP are considered."
>   (setq slime-repl-history-pattern regexp)
>   (let* ((min-pos -1)
>          (max-pos (length slime-repl-input-history))
>          (pos0 (cond ((slime-repl-history-search-in-progress-p)
>                       slime-repl-input-history-position)
>                      (t min-pos)))
>          (pos (slime-repl-position-in-history pos0 direction (or
> regexp "")
>                                               (slime-repl-current-input)))
>          (msg nil))
>     (cond ((and (< min-pos pos) (< pos max-pos))
>            (if slime-repl-eli-history-behavior
>                (slime-repl-insert-history direction pos min-pos max-pos
>                                           (nth pos
> slime-repl-input-history))
>              (slime-repl-replace-input (nth pos
> slime-repl-input-history)))
>            (setq msg (format "History item: %d" pos)))
>           ((not slime-repl-wrap-history)
>            (setq msg (cond ((= pos min-pos) "End of history")
>                            ((= pos max-pos) "Beginning of history"))))
>           (slime-repl-wrap-history
>            (setq pos (if (= pos min-pos) max-pos min-pos))
>            (setq msg "Wrapped history")))
>     (when (or (<= pos min-pos) (<= max-pos pos))
>       (when regexp
>         (setq msg (concat msg "; no matching item"))))
>     ;;(message "%s [%d %d %s]" msg start-pos pos regexp)
>     (message "%s%s" msg (cond ((not regexp) "")
>                               (t (format "; current regexp: %s" regexp))))
>     (setq slime-repl-input-history-position pos)
>     (setq this-command 'slime-repl-history-replace)))

On 01/08/2014 01:26 PM, Luís Oliveira wrote:
> On Wed, Jan 8, 2014 at 5:17 PM, Andrew Myers <asm198 at gmail.com> wrote:
>> I've modified slime-repl-history-replace to mimic the eli behavior, is
>> there interest in me tidying this up and submitting a patch to slime
>> with this as an optional alternative to the current history behavior?
> I'm interested in features that help ELI users move to SLIME. :-)
>




More information about the slime-devel mailing list