Hej!

Dom av er som har varit med ett tag behöver nog inte läsa mycket längre
men om det finns fler nybörjare än jag på listan så kanske det här kan
hjälpa någon.

Jag har en SBCL i ett jail på en FreeBSD-maskin i andra änden av
stan. Jag vill kunna sitta i en Emacs hemma och hacka. Jag vill kunna
sitta i en annan Emacs på jobbet och hacka i samma SBCL-instans. Låter
lite utopiskt, jag vet. Men vänta lite.

0. Några definitioner.
Lokal maskin #0: hemmadatan
Lokal maskin #1: jobbdatan
Maskin med SBCL: servern
Namn på jail i servern: lntest
Portnummer för att nå sshd i jailet: 60226
Användarnamn på servern: linus

1. Starta SBCL på servern.

   servern$ SWANK_PORT=4711 /usr/local/bin/sbcl \
        --eval "(require :asdf)" \
        --eval "(asdf:oos 'asdf:load-op :swank)" \
        --eval "(setf swank:*use-dedicated-output-stream* nil)" \
        --eval "(setf swank:*communication-style* :fd-handler)" \
        --eval "(swank:create-server :port $SWANK_PORT :dont-close t)"

   (Det här kan med fördel göras med detachtty(1) så gör det inget om
   man tappar kontakten med servern nån gång emellanåt.)

2. Sätt upp ssh-tunnel mellan lokal maskin och server.   

   hemmadatan$ ssh -Nf -L 4711:localhost:4711 -p 60226 servern

   (Ev. kör man på port 4005 istället, som är SLIME:s defaultport.)

3. Konfa SLIME. Jag kör f.n. CVS från 2007-11-11. Se till att ha samma
   version i båda ändarna. Ur ~/.emacs:

--8<---------------cut here---------------start------------->8---
(add-to-list 'load-path "/u/src/slime-20071111/slime/")
(add-to-list 'load-path "/u/src/slime-20071111/slime/contrib/")
(add-hook 'slime-load-hook
          (lambda ()
            (require 'slime-fancy)
            (require 'slime-typeout-frame)
            (require 'slime-asdf)
            (require 'slime-fuzzy)
            (require 'slime-tramp)
            ))
(require 'slime)

(push (slime-create-filename-translator
       :machine-instance "lntest"
       :remote-host "servern#60226"
       :username "linus")
      slime-filename-translations)

(global-set-key "\C-cs" 'slime-selector)
;; Local copy of the CLHS, supplied by the devel/clisp-hyperspec port.
;; Invoke in SLIME with `C-c C-d h'.
(setq common-lisp-hyperspec-root
      "file:/usr/local/share/doc/clisp-hyperspec/HyperSpec/")
;; Or, C-M-h for the info version (configure common-lisp-hyperspec-root above).
(global-set-key [(control meta h)]
                '(lambda ()
                   (interactive)
                   (ignore-errors
                     (info (concatenate 'string "(gcl) "
                                        (thing-at-point 'symbol))))))
--8<---------------cut here---------------end--------------->8---

  Observera ssh-portnummret till slime-create-filename-translator ovan.

  (En del av detta har inte med SLIME att göra men kan vara kul att ha
  ändå. Hyperspecen i Info-format genom C-M-h är god.)

4. Starta SLIME i Emacs.

   M-x slime-connect

   Ange 127.0.0.1 och 4711.


That's it, om jag inte har glömt nåt här.

Den riktigt magiska känslan infinner sig när man 

  CL-USER> (require 'mitt-hack)

och sen `M-. min-funktion' och Emacs börjar spela scp med rätt switchar
och *plopp* så har man sin egen kod från remote-maskinen i en buffer
lokalt! Helt genialiskt.

Gör sen samma sak på jobbdatan och njut av en riktig utvecklingsmiljö.


Tack till Mats Westin som kommit med tips och glada tillrop.

-- 
Linus


_______________________________________________
Lisp mailing list
Lisp@lisp.se
http://mailman.nocrew.org/cgi-bin/mailman/listinfo/lisp

Till