(defun find-alternate-file (filename) "Find file FILENAME, select its buffer, kill previous buffer. If the current buffer now contains an empty file that you just visited \(presumably by mistake), use this command to visit the file you really want. This function has been modified by Ian Jackson so as to revert to the old (Emacs 18) behaviour of not requiring you to cut out the current buffer's filename." (interactive (let ((file buffer-file-name) (file-dir nil)) (and file (setq file-dir (file-name-directory file))) (list (read-file-name "Find alternate file: " file-dir nil nil nil)))) (and (buffer-modified-p) ;; (not buffer-read-only) (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? " (buffer-name)))) (error "Aborted")) (let ((obuf (current-buffer)) (ofile buffer-file-name) (onum buffer-file-number) (otrue buffer-file-truename) (oname (buffer-name))) (rename-buffer " **lose**") (setq buffer-file-name nil) (setq buffer-file-number nil) (setq buffer-file-truename nil) (unwind-protect (progn (unlock-buffer) (find-file filename)) (cond ((eq obuf (current-buffer)) (setq buffer-file-name ofile) (setq buffer-file-number onum) (setq buffer-file-truename otrue) (lock-buffer) (rename-buffer oname)))) (or (eq (current-buffer) obuf) (kill-buffer obuf)))) (provide 'find-alternate-18style)