2010-11-02 6 views
10

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

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

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

(setq dired-use-ls-dired nil) 

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

+0

Благодарим вас за создание такого полезного вопроса, который породил ответы и комментарии, которые приводят к решению. – lawlist

ответ

8

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

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

+0

А, вот в чем проблема ... странно, что у FreeBSD не было такого типа сортировки. И я думал, что Финк мертв, но на самом деле выглядит активным ... интересно, почему я подумал об этом. Благодарю. – hatmatrix

+6

Я установил 'coreutils' через Homebrew, и он, по-видимому, устанавливает'/usr/local/bin/gls'. Я 'ln -s''d это для'/usr/local/bin/ls', а затем я больше не получил ошибку в Emacs. – duma

+4

@duma: Это не сработало для меня в Йосемити 10.10.3. Затем я использовал, кроме того, '(setq insert-directory-program"/usr/local/bin/gls); используйте надлежащий GNU ls' в '.emacs', и он сработал –

10

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

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

Вы также можете использовать eshell, встроенный интерфейс которого понимает -X. –

+2

Можно ли установить 'insert-directory-program' как' ls' eshell? – hatmatrix

+0

thanks @crippledlambda Я объединил этот ответ и комментарий duma от предыдущего, чтобы установить мою программу-каталог-каталог в gls, и теперь все работает для меня сейчас на Mac OSX – mcheema

7

Вот шаги для 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")