Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Special repl modes and sending code #32

Open
gdkrmr opened this issue Jul 6, 2018 · 14 comments
Open

Special repl modes and sending code #32

gdkrmr opened this issue Jul 6, 2018 · 14 comments
Assignees

Comments

@gdkrmr
Copy link

gdkrmr commented Jul 6, 2018

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.

@tpapp
Copy link
Owner

tpapp commented Jul 7, 2018

Any suggestions for implementation?

@gdkrmr
Copy link
Author

gdkrmr commented Jul 7, 2018

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
Copy link
Author

gdkrmr commented Jul 9, 2018

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.

@tpapp
Copy link
Owner

tpapp commented Jul 9, 2018

Thanks for the ideas, I will explore these.

@tpapp tpapp self-assigned this Jul 9, 2018
@MasonProtter
Copy link

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.

@tpapp
Copy link
Owner

tpapp commented Jul 31, 2018

@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?

@MasonProtter
Copy link

MasonProtter commented Jul 31, 2018

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.

@tpapp
Copy link
Owner

tpapp commented Jul 31, 2018

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

@MasonProtter
Copy link

@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?

@gdkrmr
Copy link
Author

gdkrmr commented Aug 24, 2018

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.

@tpapp
Copy link
Owner

tpapp commented Aug 25, 2018

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

@tpapp
Copy link
Owner

tpapp commented Aug 25, 2018

@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.

@gdkrmr
Copy link
Author

gdkrmr commented Aug 25, 2018

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

@tpapp
Copy link
Owner

tpapp commented Sep 2, 2018

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants