chiark / gitweb /
Import ~/emacs from zealot
[ian-dotfiles.git] / home / emacs / find-alternate-18style.el
1 (defun find-alternate-file (filename)
2   "Find file FILENAME, select its buffer, kill previous buffer.
3 If the current buffer now contains an empty file that you just visited
4 \(presumably by mistake), use this command to visit the file you really want.
5
6 This function has been modified by Ian Jackson so as to revert to the
7 old (Emacs 18) behaviour of not requiring you to cut out the current
8 buffer's filename."
9   (interactive
10    (let ((file buffer-file-name)
11          (file-dir nil))
12      (and file
13           (setq file-dir (file-name-directory file)))
14      (list (read-file-name
15             "Find alternate file: " file-dir nil nil nil))))
16   (and (buffer-modified-p)
17        ;; (not buffer-read-only)
18        (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? "
19                                  (buffer-name))))
20        (error "Aborted"))
21   (let ((obuf (current-buffer))
22         (ofile buffer-file-name)
23         (onum buffer-file-number)
24         (otrue buffer-file-truename)
25         (oname (buffer-name)))
26     (rename-buffer " **lose**")
27     (setq buffer-file-name nil)
28     (setq buffer-file-number nil)
29     (setq buffer-file-truename nil)
30     (unwind-protect
31         (progn
32           (unlock-buffer)
33           (find-file filename))
34       (cond ((eq obuf (current-buffer))
35              (setq buffer-file-name ofile)
36              (setq buffer-file-number onum)
37              (setq buffer-file-truename otrue)
38              (lock-buffer)
39              (rename-buffer oname))))
40     (or (eq (current-buffer) obuf)
41         (kill-buffer obuf))))
42
43 (provide 'find-alternate-18style)