1(defun roswell-configdir ()
2  (substring (shell-command-to-string "ros roswell-internal-use version confdir") 0 -1))
3
4(defun roswell-load (system)
5  (let ((result (substring (shell-command-to-string
6                            (concat "ros -L sbcl-bin -e \"(format t \\\"~A~%\\\" (uiop:native-namestring (ql:where-is-system \\\""
7                                    system
8                                    "\\\")))\"")) 0 -1)))
9    (unless (equal "NIL" result)
10      (load (concat result "roswell/elisp/init.el")))))
11
12(defun roswell-opt (var)
13  (with-temp-buffer
14    (insert-file-contents (concat (roswell-configdir) "config"))
15    (goto-char (point-min))
16    (re-search-forward (concat "^" var "\t[^\t]+\t\\(.*\\)$"))
17    (match-string 1)))
18
19(defun roswell-directory (type)
20  (concat
21   (roswell-configdir)
22   "lisp/"
23   type
24   "/"
25   (roswell-opt (concat type ".version"))
26   "/"))
27
28(defvar roswell-slime-contribs '(slime-fancy))
29
30(let ((type (or (ignore-errors (roswell-opt "emacs.type")) "slime")))
31  (cond ((equal type "slime")
32         (let ((slime-directory (roswell-directory type)))
33           (add-to-list 'load-path slime-directory)
34           (require 'slime-autoloads)
35           (setq slime-backend (expand-file-name "swank-loader.lisp"
36                                                 slime-directory))
37           (setq slime-path slime-directory)
38           (slime-setup roswell-slime-contribs)))
39        ((equal type "sly")
40         (add-to-list 'load-path (roswell-directory type))
41         (require 'sly-autoloads))))
42
43(setq inferior-lisp-program "ros run")
44