OS X上的dired排序错误

时间:2010-11-02 09:30:57

标签: macos emacs dired

在OS X 10.5 Emacs 23.2上,在直接模式下,如果我尝试按dired-sort-toggle-or-edit排序前缀参数--sort=extension-X,我会得到:

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

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

(setq dired-use-ls-dired nil)

但这没有效果。 dired-sort-toggle-or-edit并按扩展名排序似乎在我的Ubuntu框上运行正常。任何人都知道发生了什么事?

5 个答案:

答案 0 :(得分:12)

目前,我还找到了使用ls-lisp

的其他解决方案
(when (eq system-type 'darwin)
  (require 'ls-lisp)
  (setq ls-lisp-use-insert-directory-program nil))

答案 1 :(得分:8)

OS X上安装的ls不支持-X--sort之类的长参数。设置dired-use-ls-dired不会产生任何影响; dired将始终使用ls,但如果该变量为非nil,则会将--dired传递给ls。

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

答案 2 :(得分:7)

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

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

sudo /macports/bin/port install coreutils

这会进入.emacsinit.el

;; sort directories first

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

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

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


希望获得更多控制权的用户的替代安装:

http://ftp.gnu.org/gnu/coreutils/

下载coreutils-8.21.tar.xz

如果您没有解压缩*.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")

答案 3 :(得分: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"))))

答案 4 :(得分:0)

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

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

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

奇怪的是,这在Mojave系统上突然发生了,我从那以后一直定期使用Emacs,并且我确信在过去该系统一直在工作。我猜这是更新造成的事情,使Dired使用了正确的二进制文件,而无需手动设置它。