(defpackage :slynk-retro
  (:use :cl :slynk :slynk-api))

(in-package :slynk-retro)

(defun ensure-slynk-package-nicknames (&rest ignored)
  "Nickname all SLYNK-* package to SWANK-*"
  (declare (ignore ignored))
  (loop for package in (list-all-packages)
      for package-name = (package-name package)
      when (search "SLYNK" package-name :test #'char-equal)
        do (rename-package package
                           package-name
                           (remove-duplicates
                            (cons
                             (format nil "SWANK~a"
                                     (subseq package-name 5))
                             (package-nicknames package))
                            :test #'string-equal))))

(defun load-swankrcs-maybe ()
  (find-if (lambda (homedir-file)
             (load (merge-pathnames (user-homedir-pathname)
                                    homedir-file)
                   :if-does-not-exist nil))
           (list (make-pathname :name ".swank" :type "lisp")
                 (make-pathname :name ".swankrc"))))

(setq slynk-rpc:*translating-swank-to-slynk* nil)
(push #'ensure-slynk-package-nicknames
      slynk-api:*slynk-require-hook*)

(ensure-slynk-package-nicknames)
;;; Take this chance to load ~/.swank.lisp and ~/.swankrc if no
;;; ~/.slynk.lisp or ~/.slynkrc have already been loaded.
;;;
(unless slynk-api:*loaded-user-init-file*
  (setq slynk-api:*loaded-user-init-file*
        (load-swankrcs-maybe)))

(provide :slynk/retro)