mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2026-09-10 07:46:51 -04:00
Avoid an unusual error when visiting a directory in Dired
* lisp/dired.el (dired-internal-noselect): Unset 'dired--ls-error-buffer' before calling 'dired-readin'. This is a safeguard to prevent an error when visiting a directory in Dired, which apparently happens when the variable somehow gets set even though 'ls' has not emitted an error message (bug#80499, Message #218). * test/lisp/dired-tests.el (dired-test-set-dired--ls-error-buffer): New test.
This commit is contained in:
parent
b6e7962700
commit
a94a33827b
|
|
@ -1459,10 +1459,20 @@ The return value is the target column for the file names."
|
|||
;; (buffer-local), so we can call dired-readin:
|
||||
(let ((failed t))
|
||||
(unwind-protect
|
||||
(progn (dired-readin)
|
||||
(unless (and dired--ls-error-buffer
|
||||
(get-buffer "*ls error*"))
|
||||
(setq failed nil)))
|
||||
(progn
|
||||
;; `dired--ls-error-buffer' should only be set in
|
||||
;; `insert-directory', and if `ls' errors and the buffer
|
||||
;; displaying the error message pops ups,
|
||||
;; `dired--ls-error-buffer' is then unset. But if for
|
||||
;; some reason it gets set before the next Dired
|
||||
;; buffer-display command is invoked, this can raise an
|
||||
;; error, so ensure the variable is unset before reading
|
||||
;; the directory contents into a Dired buffer.
|
||||
(setq dired--ls-error-buffer nil)
|
||||
(dired-readin)
|
||||
(unless (and dired--ls-error-buffer
|
||||
(get-buffer "*ls error*"))
|
||||
(setq failed nil)))
|
||||
;; If either `dired-readin' failed (e.g. if parent directories
|
||||
;; are inaccessible) or `ls' errored, don't leave the Dired
|
||||
;; buffer around.
|
||||
|
|
|
|||
|
|
@ -820,5 +820,15 @@ of the value of `dired-auto-toggle-b-switch'."
|
|||
(let ((dired-auto-toggle-b-switch nil))
|
||||
(dired-test--filename-with-backslash-n)))
|
||||
|
||||
(ert-deftest dired-test-set-dired--ls-error-buffer () ; bug#80499, Message #218
|
||||
"Test visiting a directory after setting `dired--ls-error-buffer'."
|
||||
(let ((dir (ert-resource-file (file-name-as-directory "test-dir"))))
|
||||
(make-directory dir t)
|
||||
(setq dired--ls-error-buffer (get-buffer-create "*ls error*"))
|
||||
(find-file dir)
|
||||
(should (equal list-buffers-directory dir))
|
||||
(kill-buffer (current-buffer))
|
||||
(delete-directory dir)))
|
||||
|
||||
(provide 'dired-tests)
|
||||
;;; dired-tests.el ends here
|
||||
|
|
|
|||
Loading…
Reference in a new issue