From: choo@cs.yale.edu (Young-il Choo)
Subject: Re: Allowing SPACE in filename (find-file, dired, etc)
Organization: Yale Univ Computics
Date: Wed, 27 Jan 1993 22:27:37 GMT

In article <SHENTON.93Jan26134727@troll.gsfc.nasa.gov> shenton@troll.gsfc.nasa.gov (Chris Shenton) writes:

> I'm editing files which frequently have space in their filename, and
> would like the find-file functions in -- for example -- dired to
> recognize the fullname, not just up to the first space.

> Anyone have ideas on how to do this?

Here are some functions in "dired-plus.el", which are automatically loaded
by having the following in my .emacs

(setq dired-mode-hook
      (function
       (lambda ()
	 (require 'dired-plus))))


;;; dired-plus.el  -- modifications to handle file names containing spaces
;;; Dec 1992          Young-il Choo  <choo-young-il@cs.yale.edu>

;;The way I get the whole file name is by searching for eol.  This can cause
;;trouble since I like to have the symbolic links visible in dired-mode.  So,
;;I have a function that removes the stuff after " -> ".

(provide 'dired-plus)

(defun dired-get-long-filename (&optional localp no-error-if-not-filep)
  "In dired, return name of file, which may contain spaces,
mentioned on this line.
Value returned normally includes the directory name.
A non-nil 1st argument means do not include it.  A non-nil 2nd argument
says return nil if no filename on this line, otherwise an error occurs."
  (let (eol)
    (save-excursion
      (end-of-line)
      (setq eol (point))
      (beginning-of-line)
      (if (re-search-forward
	   "\\(Jan\\|Feb\\|Mar\\|Apr\\|May\\|Jun\\|Jul\\|Aug\\|Sep\\|Oct\\|Nov\\|Dec\\)[ ]+[0-9]+"
	   eol t)
	  (progn (skip-chars-forward " ")
		 (skip-chars-forward "^ " eol)
		 (skip-chars-forward " " eol)
		 (let ((beg (point)))
		   (skip-chars-forward "^\n") ;; first eol [YIC]
		   (dired-remove-symbolic-link ;; [YIC]
		    (if localp
			(buffer-substring beg (point))
		      ;; >> uses default-directory, could lose on cd, multiple.
		      (concat default-directory (buffer-substring beg (point))))
		    )
		   ))
	(if no-error-if-not-filep nil
	  (error "No file on this line"))))))

(defun dired-remove-symbolic-link (string)
  "Gets rid of the -> symbol in the string for dired."
  (substring string 0 
	     (if (string-match " -> " string) (match-beginning 0) nil)))

;;;(fset 'dired-simple-get-filename (symbol-function 'dired-get-filename))

(defun dired-get-filename (&optional localp no-error-if-not-filep)
  "Call \\[dired-get-long-filename].
Then, if dired-listing-switches contains the F flag,
fix up the filename by getting rid of the extra character."
  (let ((filename (dired-get-long-filename localp no-error-if-not-filep))
	eol)
    (if (and (string-match "F" dired-listing-switches)
	     (save-excursion
	       (end-of-line)
	       (setq eol (point))
	       (beginning-of-line)
	       (re-search-forward
		(concat "^."
			(if (string-match "i" dired-listing-switches)
			    "\\s-+[0-9]+" "")
			(if (string-match "s" dired-listing-switches)
			    "\\s-+[0-9]+" "")
			"\\s-+\\([ds]\\|\\-..x\\|\\-.....x\\|\\-........x\\)")
		eol t)))
	(substring filename 0 (1- (length filename)))
      filename)))
;;; end of dired-plus.el