;;; -*-Scheme-*-
;;;
-;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/dired.scm,v 1.97 1989/03/14 08:00:23 cph Exp $
+;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/edwin/dired.scm,v 1.98 1989/03/15 19:10:20 cph Exp $
;;;
;;; Copyright (c) 1986, 1989 Massachusetts Institute of Technology
;;;
(select-buffer-other-window (make-dired-buffer "Dired Other Window")))
(define (make-dired-buffer prompt)
- (let ((pathname
- (prompt-for-pathname prompt
- (pathname-directory-path
- (or (buffer-pathname (current-buffer))
- (working-directory-pathname))))))
+ (let ((pathname (prompt-for-directory prompt (current-default-pathname))))
(let ((buffer (get-dired-buffer pathname)))
(set-buffer-major-mode! buffer dired-mode)
(set-buffer-truename! buffer pathname)
(lambda (buffer)
(and (eq? dired-mode (buffer-major-mode buffer))
(pathname=? pathname (buffer-truename buffer)))))
- (new-buffer (pathname-name-string pathname))))
+ (new-buffer (pathname->buffer-name pathname))))
(define (revert-dired-buffer argument)
argument ;ignore
(set-buffer-writeable! buffer)
(region-delete! (buffer-region buffer))
(let ((pathname (buffer-truename buffer)))
+ (temporary-message
+ (string-append "Reading directory "
+ (pathname->string pathname)
+ "..."))
(with-output-to-mark (buffer-point buffer)
(lambda ()
(write-string "Directory ")
(for-each (lambda (pathname)
(write-string (os/make-dired-line pathname))
(newline))
- (directory-read pathname)))))
+ (directory-read pathname))))
+ (append-message "done"))
(buffer-not-modified! buffer)
(set-buffer-read-only! buffer)
(add-buffer-initialization! buffer
(lambda ()
- (set-current-point! (line-start (buffer-start (current-buffer)) 2)))))
+ (set-dired-point! (line-start (buffer-start (current-buffer)) 2)))))
\f
(define-major-mode "Dired" "Fundamental"
"Major mode for editing a list of files.
(define-key "Dired" #\F "^R Dired Find File")
(define-key "Dired" #\O "^R Dired Find File Other Window")
+(define-key "Dired" #\G "^R Dired Revert")
(define-key "Dired" #\D "^R Dired Kill")
(define-key "Dired" #\K "^R Dired Kill")
(define-key "Dired" #\C-D "^R Dired Kill")
(define-key "Dired" #\U "^R Dired Unmark")
(define-key "Dired" #\Rubout "^R Dired Backup Unmark")
(define-key "Dired" #\Space "^R Dired Next")
+(define-key "Dired" #\C-N "^R Dired Next")
+(define-key "Dired" #\C-P "^R Dired Previous")
(define-key "Dired" #\X "^R Dired Execute")
(define-key "Dired" #\Q "^R Dired Quit")
(define-key "Dired" #\C-\] "^R Dired Abort")
"Read the current file into a buffer in another window."
(find-file-other-window (dired-current-pathname)))
+(define-command ("^R Dired Revert")
+ "Read the current buffer."
+ (revert-buffer (current-buffer) true true))
+
(define-command ("^R Dired Kill" (argument 1))
"Mark the current file to be killed."
(dired-mark #\D argument))
(define-command ("^R Dired Backup Unmark" (argument 1))
"Cancel the kill requested for the file on the previous line."
- (set-current-point! (line-start (current-point) -1 'ERROR))
+ (set-dired-point! (line-start (current-point) -1 'ERROR))
(dired-mark #\Space argument)
- (set-current-point! (line-start (current-point) -1 'ERROR)))
+ (set-dired-point! (line-start (current-point) -1 'ERROR)))
(define-command ("^R Dired Next" (argument 1))
"Move down to the next line."
- (set-current-point! (line-start (current-point) argument 'BEEP)))
+ (set-dired-point! (line-start (current-point) argument 'BEEP)))
+
+(define-command ("^R Dired Previous" (argument 1))
+ "Move up to the previous line."
+ (set-dired-point! (line-start (current-point) (- argument) 'BEEP)))
(define-command ("^R Dired Execute")
"Kill all marked files."
"Summarize the Dired commands in the typein window."
(message "d-elete, u-ndelete, x-ecute, q-uit, f-ind, o-ther window"))
\f
+(define (set-dired-point! mark)
+ (set-current-point!
+ (let ((lstart (line-start mark 0)))
+ (if (dired-filename-line? lstart)
+ (region-start (os/dired-filename-region lstart))
+ lstart))))
+
(define (dired-current-pathname)
(let ((lstart (line-start (current-point) 0)))
(guarantee-dired-filename-line lstart)
(not (match-forward "Directory" lstart)))))
(define (dired-pathname lstart)
- (merge-pathnames (pathname-directory-path (buffer-truename (current-buffer)))
- (string->pathname (dired-filename lstart))))
-
-(define (dired-filename lstart)
- (let ((start (mark+ lstart 2)))
- (char-search-forward #\Space start (line-end start 0))
- (extract-string start (re-match-start 0))))
+ (merge-pathnames
+ (pathname-directory-path (buffer-truename (current-buffer)))
+ (string->pathname (region->string (os/dired-filename-region lstart)))))
(define (dired-mark char n)
(with-read-only-defeated (current-point)
(guarantee-dired-filename-line lstart)
(delete-right-char lstart)
(insert-chars char 1 lstart)
- (set-current-point! (line-start lstart 1))))))))
+ (set-dired-point! (line-start lstart 1))))))))
(define (dired-kill-files)
(let ((filenames (dired-killable-filenames)))
(define-command ("List Directory" argument)
"Generate a directory listing."
(let ((pathname
- (prompt-for-pathname "List Directory"
- (pathname-directory-path
- (or (buffer-pathname (current-buffer))
- (working-directory-pathname))))))
+ (prompt-for-directory "List Directory" (current-default-pathname))))
(let ((pathnames (directory-read pathname))
(directory (pathname->string pathname)))
(with-output-to-temporary-buffer "*Directory*"