[comp.emacs] File name expansion in place in shell

maa@sei.cmu.edu (Mark Ardis) (03/17/88)

Here is my solution to the file name expansion problem.  I bind this
function to TAB, so that expansion occurs in-place while I am in the
shell buffer.

(defun shell-expand-file-name ()	; Added 8/26/86 by Mark Ardis
  "Expand the file name before point."
  (interactive)
					; Local Variables
  (let (place start path stop name full-name)
					; Body
    (message "Completing...")
    (setq place (point))
    (beginning-of-line)
    (setq stop (point))
    (goto-char place)
    (if (search-backward " " stop t)
      (progn
	(forward-char)
	(setq start (point))
	(goto-char place)
	(if (search-backward "/" start t)
	  (progn
	    (forward-char)
	    (setq path (buffer-substring start (point)))
	  ) ; progn
	; else
	  (progn
	    (setq path "")
	    (goto-char start)
	  ) ; progn
	) ; if (search-backward "/" start t)
        (setq name (buffer-substring (point) place))
        (setq full-name (file-name-completion name
			      (concat default-directory path)))
	(if (not full-name)
	  (progn
	    (goto-char place)
	    (error "Cannot complete this!")
	    ) ; progn
	  ) ; if
	(if (not (equal full-name t))
	    (progn
	      (delete-region (point) place)
	      (insert full-name)
	      (if (> (length (file-name-all-completions
			   name (concat default-directory path)))
		     1)
		  (progn
		    (ding)
		    (message "Completed, but not unique!")
		    ) ; progn
		(message "Completed.")
		) ; if
	      ) ; progn
	  ; else
	  (progn
	    (goto-char place)
	    (message "Completed---already complete.")
	    ) ; progn
	  ) ; if
      ) ; progn
    ; else
      (progn
	(goto-char place)
	(error "Nothing to complete here!")
	) ; progn
    ) ; if (search-backward " " stop t)
  ) ; let
) ; defun shell-expand-file-name
--
Mark A. Ardis
Software Engineering Institute
Carnegie-Mellon University
Pittsburgh, PA 15213
(412) 268-7636
maa@sei.cmu.edu