Update of /project/mcclim/cvsroot/mcclim/Apps/Listener
In directory clnet:/tmp/cvs-serv4347/Apps/Listener
Modified Files:
dev-commands.lisp util.lisp
Log Message:
,Change Directory foo now changes to foo/
--- /project/mcclim/cvsroot/mcclim/Apps/Listener/dev-commands.lisp 2008/02/03 20:51:47 1.51
+++ /project/mcclim/cvsroot/mcclim/Apps/Listener/dev-commands.lisp 2008/02/04 03:17:39 1.52
@@ -1128,9 +1128,9 @@
(full-names 'boolean :default nil :prompt "show full name?")
(list-all-direct-subdirectories 'boolean :default nil :prompt "list all direct subdirectories?"))
- (let* ((pathname (if (wild-pathname-p pathname) ; Forgot why I did this..
- (merge-pathnames pathname)
- pathname))
+ (let* ((pathname
+ ;; helpfully fix things if trailing slash wasn't entered
+ (directorify-pathname pathname))
(wild-pathname (gen-wild-pathname pathname))
(dir (if list-all-direct-subdirectories
(list-directory-with-all-direct-subdirectories wild-pathname)
@@ -1181,12 +1181,12 @@
:menu t
:command-table filesystem-commands)
((pathname 'pathname :prompt "pathname"))
- (let ((pathname (merge-pathnames pathname)))
- (cond ((not (probe-file pathname))
- (note "~A does not exist." pathname))
- ((not (directoryp pathname))
- (note "~A is not a directory." pathname))
- (t (change-directory (merge-pathnames pathname))) )))
+ (let ((pathname (merge-pathnames
+ ;; helpfully fix things if trailing slash wasn't entered
+ (directorify-pathname pathname))))
+ (if (not (probe-file pathname))
+ (note "~A does not exist.~%" pathname)
+ (change-directory pathname))))
(define-command (com-up-directory :name "Up Directory"
:menu t
@@ -1312,15 +1312,12 @@
(define-command (com-push-directory :name "Push Directory"
:menu t
:command-table directory-stack-commands)
- ((pathname 'pathname :prompt "pathname"))
- (let ((pathname (merge-pathnames pathname)))
- (if (and (probe-file pathname)
- (directoryp pathname));; FIXME: Need smart conversion to directories, here and elsewhere.
+ ((pathname 'pathname :prompt "directory"))
+ (let ((pathname (merge-pathnames (directorify-pathname pathname))))
+ (if (not (probe-file pathname))
+ (note "~A does not exist.~%" pathname)
(progn (push *default-pathname-defaults* *directory-stack*)
- (com-change-directory pathname))
- (italic (t)
- (fresh-line) (present (truename pathname))
- (format t " does not exist or is not a directory.~%")) ))
+ (com-change-directory pathname))))
(compute-dirstack-command-eligibility *application-frame*))
(defun comment-on-dir-stack ()
--- /project/mcclim/cvsroot/mcclim/Apps/Listener/util.lisp 2008/02/03 12:47:04 1.24
+++ /project/mcclim/cvsroot/mcclim/Apps/Listener/util.lisp 2008/02/04 03:17:39 1.25
@@ -214,6 +214,16 @@
(merge-pathnames (make-pathname :directory '(:relative :back))
(truename pathname))))))
+(defun directorify-pathname (pathname)
+ "Convert a pathname with name/version into a pathname with a
+similarly-named last directory component. Used for user input that
+lacks the final #\\/."
+ (if (directoryp pathname)
+ pathname
+ ;; doing this the primitive way instead of trying to grok name,
+ ;; type, version and trying to reconstruct what the user
+ ;; actually typed. I think I'm going to hell for this one.
+ (pathname (concatenate 'string (namestring pathname) "/"))))
;;;; Abbreviating item formatter