FUEL: remote connections.

db4
Jose A. Ortega Ruiz 2009-01-21 02:37:32 +01:00
parent db63d9d324
commit f34f7298ee
4 changed files with 59 additions and 3 deletions

View File

@ -2,9 +2,10 @@
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays assocs compiler.units definitions fuel.eval
fuel.help help.markup help.topics io.pathnames kernel math math.order
memoize namespaces parser sequences sets sorting tools.crossref
tools.scaffold tools.vocabs vocabs vocabs.loader vocabs.parser words ;
fuel.help help.markup help.topics io io.encodings.utf8 io.pathnames
io.servers.connection kernel listener math math.order memoize
namespaces parser sequences sets sorting tools.crossref tools.scaffold
tools.vocabs vocabs vocabs.loader vocabs.parser words ;
IN: fuel
@ -174,3 +175,19 @@ PRIVATE>
: fuel-scaffold-get-root ( name -- ) find-vocab-root fuel-eval-set-result ;
! Remote connection
: fuel-start-remote-listener ( port/f -- )
"Starting server. Connect with 'M-x connect-to-factor' in Emacs"
write nl flush number? [ 9000 ] unless*
<threaded-server>
"tty-server" >>name
utf8 >>encoding
swap local-server >>insecure
[ listener ] >>handler
f >>timeout
start-server ;
: fuel-start-remote-listener* ( -- ) f fuel-start-remote-listener ;
MAIN: fuel-start-remote-listener*

View File

@ -53,6 +53,20 @@ beast.
factor image (overwriting the current one) with all the needed
vocabs.
*** Connecting to a running Factor
'run-factor' starts a new factor listener process managed by Emacs.
If you prefer to start Factor externally, you can also connect
remotely from Emacs. Here's how to proceed:
- In the factor listener, run FUEL:
"fuel" run
This will start a server listener in port 9000.
- Switch to Emacs and issue the command 'M-x connect-to-factor'.
That's it; you should be up and running. See the help for
'connect-to-factor' for how to use a different port.
*** Vocabulary creation
FUEL offers a basic interface with Factor's scaffolding utilities.

View File

@ -24,6 +24,9 @@
(autoload 'switch-to-factor "fuel-listener.el"
"Start a Factor listener, or switch to a running one." t)
(autoload 'connect-to-factor "fuel-listener.el"
"Connect to an external Factor listener." t)
(autoload 'fuel-autodoc-mode "fuel-help.el"
"Minor mode showing in the minibuffer a synopsis of Factor word at point."
t)

View File

@ -87,6 +87,17 @@ buffer."
(fuel-listener--wait-for-prompt 10000)
(fuel-con--setup-connection (current-buffer))))
(defun fuel-listener--connect-process (port)
(message "Connecting to remote listener ...")
(pop-to-buffer (fuel-listener--buffer))
(let ((process (get-buffer-process (current-buffer))))
(when (or (not process)
(y-or-n-p "Kill current listener? "))
(make-comint-in-buffer "fuel listener" (current-buffer)
(cons "localhost" port))
(fuel-listener--wait-for-prompt 10000)
(fuel-con--setup-connection (current-buffer)))))
(defun fuel-listener--process (&optional start)
(or (and (buffer-live-p (fuel-listener--buffer))
(get-buffer-process (fuel-listener--buffer)))
@ -123,6 +134,17 @@ buffer."
(pop-to-buffer buf)
(switch-to-buffer buf))))
(defun connect-to-factor (&optional arg)
"Connects to a remote listener running in the same host.
Without prefix argument, the default port, 9000, is used.
Otherwise, you'll be prompted for it. To make this work, in the
remote listener you need to issue the words
'fuel-start-remote-listener*' or 'port
fuel-start-remote-listener', from the fuel vocabulary."
(interactive "P")
(let ((port (if (not arg) 9000 (read-number "Port: "))))
(fuel-listener--connect-process port)))
(defun fuel-listener-nuke ()
"Try this command if the listener becomes unresponsive."
(interactive)