aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Fogel2009-09-05 16:25:27 +0000
committerKarl Fogel2009-09-05 16:25:27 +0000
commit049a231b91bfb3b6f59b478d512829d35ad701b9 (patch)
tree04888c4d79cb36a82000f6cbb3ebd54e07c9eabc
parentef7ef2a01693469788f72fdaa554b88f1b961e0f (diff)
downloademacs-049a231b91bfb3b6f59b478d512829d35ad701b9.tar.gz
emacs-049a231b91bfb3b6f59b478d512829d35ad701b9.zip
* lisp/files.el (find-alternate-file): Run `kill-buffer-hook' manually
before killing the old buffer, since by the time `kill-buffer' is run so many buffer variables have been set to nil that it may not behave as expected. (Bug#4061)
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/files.el15
2 files changed, 20 insertions, 2 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 9356b66552d..8d5200e5ddf 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,12 @@
12009-09-05 Karl Fogel <kfogel@red-bean.com> 12009-09-05 Karl Fogel <kfogel@red-bean.com>
2 2
3 * files.el (find-alternate-file): Run `kill-buffer-hook' manually
4 before killing the old buffer, since by the time `kill-buffer' is
5 run so many buffer variables have been set to nil that it may not
6 behave as expected. (Bug#4061)
7
82009-09-05 Karl Fogel <kfogel@red-bean.com>
9
3 * files.el (find-alternate-file): If the old buffer is modified 10 * files.el (find-alternate-file): If the old buffer is modified
4 and visiting a file, behave similarly to `kill-buffer' when 11 and visiting a file, behave similarly to `kill-buffer' when
5 killing it, thus reverting to the pre-1.878 behavior; see 12 killing it, thus reverting to the pre-1.878 behavior; see
diff --git a/lisp/files.el b/lisp/files.el
index 773740214b7..e20f4695b49 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1493,6 +1493,17 @@ killed."
1493 (odir dired-directory) 1493 (odir dired-directory)
1494 (otrue buffer-file-truename) 1494 (otrue buffer-file-truename)
1495 (oname (buffer-name))) 1495 (oname (buffer-name)))
1496 ;; Run `kill-buffer-hook' here. It needs to happen before
1497 ;; variables like `buffer-file-name' etc are set to nil below,
1498 ;; because some of the hooks that could be invoked
1499 ;; (e.g., `save-place-to-alist') depend on those variables.
1500 ;;
1501 ;; Note that `kill-buffer-hook' is not what queries whether to
1502 ;; save a modified buffer visiting a file. Rather, `kill-buffer'
1503 ;; asks that itself. Thus, there's no need to temporarily do
1504 ;; `(set-buffer-modified-p nil)' before running this hook.
1505 (run-hooks 'kill-buffer-hook)
1506 ;; Okay, now we can end-of-life the old buffer.
1496 (if (get-buffer " **lose**") 1507 (if (get-buffer " **lose**")
1497 (kill-buffer " **lose**")) 1508 (kill-buffer " **lose**"))
1498 (rename-buffer " **lose**") 1509 (rename-buffer " **lose**")
@@ -1520,8 +1531,8 @@ killed."
1520 (rename-buffer oname))) 1531 (rename-buffer oname)))
1521 (unless (eq (current-buffer) obuf) 1532 (unless (eq (current-buffer) obuf)
1522 (with-current-buffer obuf 1533 (with-current-buffer obuf
1523 ;; We already asked; don't ask again. 1534 ;; We already ran these; don't run them again.
1524 (let ((kill-buffer-query-functions)) 1535 (let (kill-buffer-query-functions kill-buffer-hook)
1525 (kill-buffer obuf)))))) 1536 (kill-buffer obuf))))))
1526 1537
1527(defun create-file-buffer (filename) 1538(defun create-file-buffer (filename)