21

在 OS X 10.5 Emacs 23.2 上,在 dired 模式下,如果我尝试dired-sort-toggle-or-edit使用前缀参数--sort=extensionor进行排序-X,我会得到:

insert-directory: Listing directory failed but `access-file' worked

并且dired缓冲区变空。我试过设置

(setq dired-use-ls-dired nil)

但这没有效果。dired-sort-toggle-or-edit并且按扩展名排序似乎在我的 Ubuntu 盒子上工作正常。有人知道发生了什么吗?

4

5 回答 5

17

现在,我还找到了另一个解决方案ls-lisp

(when (eq system-type 'darwin)
  (require 'ls-lisp)
  (setq ls-lisp-use-insert-directory-program nil))
于 2010-11-03T03:24:54.873 回答
10

安装在 OS X 上的ls不支持-X或任何长参数,如--sort. 设置dired-use-ls-dired不会有任何影响;dired 将始终使用 ls,但如果该变量不是 nil,它将传递--dired给 ls。

如果你想要那种类型的排序,你可以使用像 fink 这样的东西来安装 coreutils,它会提供一个更像你在 Ubuntu 中习惯的 ls。

于 2010-11-02T18:49:30.903 回答
9

以下是使用coreutils通过 macports 安装的 Emacs 在 Snow Leopard 10.6.8 上运行的步骤:

注意:我的 macports 安装不同于通用 ( /opt/...) —— 即,我/macports用作根。不需要更改根设置,这只是我的个人喜好。对于 vanilla macport 安装或替代设置,请相应地调整路径。

sudo /macports/bin/port install coreutils

这进入.emacsor init.el

;; sort directories first

(setq insert-directory-program "/macports/bin/gls")

(setq dired-listing-switches "-aBhl --group-directories-first")

注意:不建议为gls/使用符号链接,因为它会破坏 macports install 的功能,而且很可能还会破坏其他东西。ls


需要更多控制权的用户的替代安装:

下载: coreutils-8.21.tar.xz来自:   http: //ftp.gnu.org/gnu/coreutils/

如果您没有用于解压缩*.xz文件的实用程序,则可以使用诸如TheUnarchiver3.9.1.

这是一个快速参考coreutils——我将安装位置设置为我自己的个人喜好,而不是默认设置:

./configure \
--prefix=/Users/HOME/.0.data/.0.emacs/elpa

make

sudo make install

将这些插入到您的.emacsinit.el文件中 - 相应地调整路径:

;; sort directories first

(setq insert-directory-program "/Users/HOME/.0.data/.0.emacs/elpa/bin/ls")

(setq dired-listing-switches "-aBhl --group-directories-first")
于 2013-11-17T06:22:53.457 回答
5

2020年还在发生!如果像我一样,您使用brew作为您的开源包管理器,那么这是将粘贴复制到您的.emacs文件中的正确解决方案,或者您保留启动自定义的任何位置:

(when (equal system-type 'darwin)
  (setq insert-directory-program "/usr/local/opt/coreutils/libexec/gnubin/ls"))

(我检查操作系统是因为我在多个系统上部署了我的 Emacs 配置)。

奇怪的是,这突然发生在一个 Mojave 系统上,从那以后我经常使用 Emacs,而且我确信 dired 过去一直在该系统上工作。我猜想是更新破坏了某些东西,使 dired 使用正确的二进制文件,而无需手动设置它。

于 2020-12-02T16:25:01.107 回答
0

这与 lawlist 的好答案没有太大区别,但信息略有不同,并且是为使用 Nix 包管理器的人量身定制的:

(use-package dired
  :custom
  ;; See http://stackoverflow.com/questions/4115465/emacs-dired-too-much-information
  ;; NOTE: Just some information worth keeping in mind. More readable dired file
  ;; size output - consider adding F (make file type obvious), or p (p adds a
  ;; trailing slash to dirs, but makes moving dirs fail), and G (colorize) too.
  (dired-listing-switches "-alh --group-directories-first")
  :config
  ;; [[https://stackoverflow.com/questions/4076360/error-in-dired-sorting-on-os-x][macos - error in dired sorting on OS X - Stack Overflow]]
  ;; To fix the
  ;; (error "Listing directory failed but 'access-file' worked")
  ;; error. Emacs needs to use gnu's ls, which I get through nixpkgs' coreutils.
  ;; In my config, currently, Emacs is not picking up the path to my nix install
  ;; ls (todo: fix).
  ;;
  ;; Note that, unlike the info at the link provided above,
  ;; --group-directories-first is not needed to fix this error. I just like to
  ;; see the directories first in a dired buffer.
  (setq insert-directory-program (expand-file-name ".nix-profile/bin/ls"
                                                   (getenv "HOME"))))
于 2019-10-11T22:18:27.887 回答