(defun change-directory (&optional path) "Change the current directory to DIR. Defaults to (user-homedir-pathname) ~ if not given." (when (not path) (setf path (enough-namestring (user-homedir-pathname)))) (when (pathnamep path) (setf path (safe-namestring path))) #+openmcl (syscall (chdir path)) #+sbcl (progn (syscall (chdir path)) (let ((tn (ignore-errors (truename path)))) (when tn (setf *default-pathname-defaults* tn)))) #+clisp (ext:cd path) #+excl (setf *default-pathname-defaults* (pathname (excl:chdir path))) #+cmu (setf (ext:default-directory) path) #+ecl ;; try to turn it into a directory ;;; @@@ this fails for .. or . ;;(ext:chdir (if (not (pathname-directory path)) ;; (make-pathname :directory `(:relative ,path)) ;; (make-pathname :directory path))) ;;; try something simpler but os dependent (ext:chdir (if (and (stringp path) (length path)) (concatenate 'string path "/") path)) #+lispworks (hcl:change-directory path) #+abcl (progn (syscall (chdir path)) (setf *default-pathname-defaults* (truename path))) #-(or clisp excl openmcl sbcl cmu ecl lispworks abcl) (missing-implementation 'change-directory))