Ошибка в сортировке по умолчанию на 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"))))