diff options
| author | Karl Fogel | 2009-09-05 16:25:27 +0000 |
|---|---|---|
| committer | Karl Fogel | 2009-09-05 16:25:27 +0000 |
| commit | 049a231b91bfb3b6f59b478d512829d35ad701b9 (patch) | |
| tree | 04888c4d79cb36a82000f6cbb3ebd54e07c9eabc | |
| parent | ef7ef2a01693469788f72fdaa554b88f1b961e0f (diff) | |
| download | emacs-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/ChangeLog | 7 | ||||
| -rw-r--r-- | lisp/files.el | 15 |
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 @@ | |||
| 1 | 2009-09-05 Karl Fogel <kfogel@red-bean.com> | 1 | 2009-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 | |||
| 8 | 2009-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) |