Ошибка в сортировке по умолчанию на OS X

В OS X 10.5 Emacs 23.2, в режиме dired-mode, если я попытаюсь сортировать по dired-sort-toggle-or-edit с аргументом префикса --sort=extension или -X, я получаю:

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

и перезагруженный буфер становится пустым. Я попытался установить

(setq dired-use-ls-dired nil)

но это не имело эффекта. dired-sort-toggle-or-edit и сортировка по расширению, похоже, работает нормально в моем поле Ubuntu. Кто-нибудь знает, что происходит?

Ответ 1

ls, установленный в OS X, не поддерживает -X или любые длинные аргументы, такие как --sort. Настройка dired-use-ls-dired не будет иметь никакого эффекта; dired всегда будет использовать ls, но если эта переменная не равна nil, она передаст --dired в ls.

Если вы хотите этот тип сортировки, вы, вероятно, можете использовать что-то вроде fink для установки coreutils, что будет больше похоже на то, с чем вы привыкли в Ubuntu.

Ответ 2

В настоящее время я также нашел другое решение, используя ls-lisp

(when (eq system-type 'darwin)
  (require 'ls-lisp)
  (setq ls-lisp-use-insert-directory-program nil))

Ответ 3

Ниже приведены шаги для запуска Emacs на Snow Leopard 10.6.8 с использованием coreutils, установленного через macports:

ПРИМЕЧАНИЕ. Моя установка macports отличается от общей (/opt/...), т.е. я использую /macports в качестве корня. Изменение настройки корня не требуется, это только личное предпочтение. Для установок с настройкой ванильного макпорта или альтернативных настроек отрегулируйте путь соответственно.

sudo /macports/bin/port install coreutils

Это находится внутри .emacs или init.el:

;; sort directories first

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

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

ПРИМЕЧАНИЕ. Использование символической ссылки для gls/ls не рекомендуется, так как оно нарушает функциональность с установкой macports и, скорее всего, с другими.


Альтернативная установка для пользователей, которым требуется больше контроля:

Загрузить: 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

Вставьте их в ваш файл .emacs или init.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")

Ответ 4

Это не сильно отличается от хорошего ответа lawlist, но содержит немного иную информацию и рассчитано на тех, кто использует менеджер пакетов Nix:

(use-package dired
  :custom
  ;; See http://stackoverflow.com/info/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/info/4076360/error-in-dired-sorting-on-os-x][macos - error in dired sorting on OS X - Qaru]]
  ;; To fix the
  ;; (error "Listing directory failed but 'access-file' worked")
  ;; error. Emacs needs to use gnu 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"))))