julia-repl icon indicating copy to clipboard operation
julia-repl copied to clipboard

Special repl modes and sending code

Open gdkrmr opened this issue 7 years ago • 14 comments
trafficstars

When in any special repl mode, such as shell, pkg, etc. sending code to the repl does not make sense. I propose to simply snap out of the special mode, as this is usually what you want.

gdkrmr avatar Jul 06 '18 20:07 gdkrmr

Any suggestions for implementation?

tpapp avatar Jul 07 '18 09:07 tpapp

Good question :-), I just started digging into the julia-repl source code a little bit yesterday, I will tell you if I come up with an idea.

gdkrmr avatar Jul 07 '18 12:07 gdkrmr

Solution 1: simply prepend "\^H" to each command you send to the repl, this shouldn't do any harm. Solution 2: do some matching, e.g.:

(defun julia-repl--quit-repl-mode-maybe ()
  (interactive) 
  (with-current-buffer "*julia*"
    (save-excursion
      (goto-char (point-max))
      (when (not (string-match-p "^julia>.*" (thing-at-point 'line t)))
        (term-send-raw-string "\^H")))))

Something like this would also be useful, for the following case:

send

x = collect(1:100)

to the repl containing a command:

julia> y

then there is no variable x, but yx. So generally deleting commands from the repl may be a good idea.

gdkrmr avatar Jul 09 '18 12:07 gdkrmr

Thanks for the ideas, I will explore these.

tpapp avatar Jul 09 '18 12:07 tpapp

This isn't a huge deal but I thought I'd chime in: I sometimes find it helpful to be able to send code while in other REPL modes, especially since I have to leave char-mode in the REPL buffer in order to paste. Sometime I will enter the Pkg mode and then send over code like add Plots or whatever.

MasonProtter avatar Jul 30 '18 15:07 MasonProtter

@MasonProtter: just to clarify, you have

add Plots

in a buffer and you want to use julia-repl to send that to the inferior process?

tpapp avatar Jul 31 '18 05:07 tpapp

Yes.

As a more realistic example, I’ve been playing around lately with creating my own repl modes for DSLs and so it’s helpful to just open my special repl mode and then write and use julia-repl to send DSL code from my .jl buffer straight into my other repl mode.

This works fine now but if the proposed change goes through, it would limit the usefulness of alternate repl modes.

MasonProtter avatar Jul 31 '18 14:07 MasonProtter

Good to know. I will hold off this change and think about it.

tpapp avatar Jul 31 '18 14:07 tpapp

@tpapp Interestingly, if I use julia-repl to send code to the pkg> repl mode, the command does not get run unless I press enter again in the term buffer. Do you have any idea why this behaviour is happening?

MasonProtter avatar Aug 24 '18 17:08 MasonProtter

what about a shortcut for sending something in a certain mode: C-c C-s C-c: send line or region in shell mode C-c C-p C-c: send line or region in pkg mode

or

C-c C-s to send in "special mode": C-c C-s C-s C-c: send line or region in shell mode C-c C-s C-p C-c: send line or region in pkg mode

you could also do C-c C-S for locking into the special mode and then the normal key bindings for sending to the REPL send in that mode.

There could be a variable that binds a key to a prefix:

(setq julia-repl-special-mode-key-map '(("C-s" . ";")
                                        ("C-p" . "]")))

this would be easily extensible and you just have to pre-pend the letter to each line before sending.

gdkrmr avatar Aug 24 '18 20:08 gdkrmr

@MasonProtter: could be the bracketed paste, but I am not sure.

tpapp avatar Aug 25 '18 05:08 tpapp

@gdkrmr: I will think about this, but I am finding it hard to find a use case. I think of shell and pkg modes as convenience features for interactive use. If I found, for example, that I am composing something complex in a buffer and sending it to the shell, I would just write a shell script.

tpapp avatar Aug 25 '18 05:08 tpapp

A DLS that is built on top of julia? For Pkg and shell you are probably right.

gdkrmr avatar Aug 25 '18 07:08 gdkrmr

To everyone interested: #36 is an attempt to fix the most obvious case, ie clear the prompt by default by sending a C-a C-a [backspace]. C-u before should override (disable it). Testing and comments are welcome, this is about the 6th variation that I am trying out, but it seems to work.

tpapp avatar Sep 02 '18 18:09 tpapp