Is there any way to attach Emacs (or any other editor, for that matter), to a web-repl? Given that I can telnet directly to port 7000 and execute the repl, there ought to be some way.
I took a quick look at cmuscheme.el, comint.el and ftelnet.el, but my Emacs-fu is clearly not good enough. I don't see anything obvious.
Thanks, -a
Afficher les réponses par date
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 17-Oct-06, at 7:30 PM, Andrew Lentvorski wrote:
Is there any way to attach Emacs (or any other editor, for that matter), to a web-repl? Given that I can telnet directly to port 7000 and execute the repl, there ought to be some way.
I took a quick look at cmuscheme.el, comint.el and ftelnet.el, but my Emacs-fu is clearly not good enough. I don't see anything obvious.
Depends what you mean by "attach". One way is: C-U M-x telnet RET localhost RET 7000 RET . If you want to be able to have several concurrent REPLs in the same Gambit process, then edit the procedure start-repl-server in web-repl.scm like this:
(define (start-repl-server) (let ((server (open-tcp-server (list port-number: repl-server-port reuse-address: #t)))) (let loop () (let ((ide-repl-connection (read server))) (setup-ide-repl-channel ide-repl-connection) ; (start-ide-repl) (start-ide-repl-in-new-thread) (loop)))))
Each new connection will start a new REPL.
I hope you are aware of the security risks with such a thing, so it might be wise to wrap all of this with some kind of authentification layer.
Marc
Marc Feeley wrote:
On 17-Oct-06, at 7:30 PM, Andrew Lentvorski wrote:
Is there any way to attach Emacs (or any other editor, for that matter), to a web-repl? Given that I can telnet directly to port 7000 and execute the repl, there ought to be some way.
I took a quick look at cmuscheme.el, comint.el and ftelnet.el, but my Emacs-fu is clearly not good enough. I don't see anything obvious.
Depends what you mean by "attach". One way is: C-U M-x telnet RET localhost RET 7000 RET . If you want to be able to have several concurrent REPLs in the same Gambit process, then edit the procedure start-repl-server in web-repl.scm like this:
I want to be able to use the gambit-mode in an emacs on machine A running against a gambit on machine B. That's what I mean by "attach".
This relates back to running gambit directly on embedded hardware. Since the hardware doesn't really have a stdin/stdout, keyboard, etc., I'd like to be able to control things from a separate machine.
I am aware of the security implications. I'll deal with those later. I'm looking for trying to get things working on my local machine in an appropriate amount of memory over the network first.
-a
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 17-Oct-06, at 8:49 PM, Andrew Lentvorski wrote:
Marc Feeley wrote:
On 17-Oct-06, at 7:30 PM, Andrew Lentvorski wrote:
Is there any way to attach Emacs (or any other editor, for that matter), to a web-repl? Given that I can telnet directly to port 7000 and execute the repl, there ought to be some way.
I took a quick look at cmuscheme.el, comint.el and ftelnet.el, but my Emacs-fu is clearly not good enough. I don't see anything obvious.
Depends what you mean by "attach". One way is: C-U M-x telnet RET localhost RET 7000 RET . If you want to be able to have several concurrent REPLs in the same Gambit process, then edit the procedure start-repl-server in web-repl.scm like this:
I want to be able to use the gambit-mode in an emacs on machine A running against a gambit on machine B. That's what I mean by "attach".
This relates back to running gambit directly on embedded hardware. Since the hardware doesn't really have a stdin/stdout, keyboard, etc., I'd like to be able to control things from a separate machine.
Here's what you can do. Apply this change to the make-ide-repl-ports procedure in web-repl.scm
(define (make-ide-repl-ports ide-repl-connection) (receive (in-rd-port in-wr-port) (open-string-pipe '(direction: input)) (receive (out-wr-port out-rd-port) (open-string-pipe '(direction: output)) (begin
; Hack... set the names of the ports for usage with gambit.el (##vector-set! in-rd-port 4 (lambda (port) '(stdin))) (##vector-set! out-wr-port 4 (lambda (port) '(stdout)))
(ide-repl-pump ide-repl-connection out-rd-port in-wr-port) (values in-rd-port out-wr-port)))))
Then, after starting web-repl.scm, in your emacs type C-u M-x run- scheme RET (erase line) telnet localhost 7000 RET .
This way you will be running the telnet session with all the functionality of gambit.el . One problem I have noticed is that you get a double echo of the expressions typed at the REPL. I'm not sure if it is the telnet that is adding its own echo of the input. I hope some emacs wizard better qualified than me can figure out what is the source of the problem. Another problem is that you can't interrupt the execution with ctrl-C. Telnet sends ctrl-C as the byte sequence # \xff #\xf4 #\xff #\xfd #\x06, so this sequence would have to be recognized by the process-input procedure in the ide-repl-pump procedure, followed by the call
(##thread-interrupt! primordial-thread ; or any thread you want to interrupt (lambda () ((##current-user-interrupt-handler)) (##void)))
so that the primordial thread handles the user-interrupt (it would be useless to call the user-interrupt-handler directly because this would interrupt the thread executing the ide-repl-pump). I'll leave that as an exercise to the reader!
Marc
On 10/17/06, Andrew Lentvorski bsder@allcaps.org wrote:
I want to be able to use the gambit-mode in an emacs on machine A running against a gambit on machine B. That's what I mean by "attach".
I'm not sure whether that helps in your case, but you might be able to do something like: (setq scheme-program-name "ssh user@host /usr/local/bin/gsi -:d-")
Works for me.
Guillaume
At 17:49 Uhr -0700 17.10.2006, Andrew Lentvorski wrote:
I want to be able to use the gambit-mode in an emacs on machine A running against a gambit on machine B.
C-u M-x run-scheme telnet localhost 7000 <enter>
works for me so far.
There is a problem with exceptions in the web-repl.scm in beta 17, though, they are not displayed correctly and the prompt vanishes.
Christian.