One of the main problems with running swank remotely is that Emacs
assumes the files can be found using normal filenames. if we want
things like slime-compile-and-load-file
(C-c C-k) and
slime-edit-definition
(M-.) to work correctly we need to
find a way to let our local Emacs refer to remote files.
There are, mainly, two ways to do this. The first is to mount, using
NFS or similar, the remote machine's hard disk on the local machine's
file system in such a fashion that a filename like
/opt/project/source.lisp refers to the same file on both
machines. Unfortunately NFS is usually slow, often buggy, and not
always feasible, fortunately we have an ssh connection and Emacs'
tramp-mode
can do the rest.
(See see TRAMP User Manual.)
What we do is teach Emacs how to take a filename on the remote machine
and translate it into something that tramp can understand and access
(and vice versa). Assuming the remote machine's host name is
remote.example.com
, cl:machine-instance
returns
“remote” and we login as the user “user” we can use slime-tramp
contrib to setup the proper translations by simply doing:
(push (slime-create-filename-translator :machine-instance "remote" :remote-host "remote.example.com" :username "user") slime-filename-translations)