Emacs error 'ls не поддерживает --dired'

С момента обновления до emacs 24.x я видел эту ошибку всякий раз, когда открываю каталог. Вся ошибка:

ls does not support --dired; see `dired-use-ls-dired' for more details.

Глядя на переменную, можно найти:

dired-use-ls-dired is a variable defined in `dired.el'.
Its value is nil
Original value was unspecified

Documentation:
Non-nil means Dired should pass the "--dired" option to "ls".
The special value of `unspecified' means to check explicitly, and
save the result in this variable.  This is performed the first
time `dired-insert-directory' is called.

Note that if you set this option to nil, either through choice or
because your "ls" program does not support "--dired", Dired
will fail to parse some "unusual" file names, e.g. those with leading
spaces.  You might want to install ls from GNU Coreutils, which does
support this option.  Alternatively, you might want to use Emacs's
own emulation of "ls", by using:
  (setq ls-lisp-use-insert-directory-program nil)
  (require 'ls-lisp)
This is used by default on MS Windows, which does not have an "ls" program.
Note that `ls-lisp' does not support as many options as GNU ls, though.
For more details, see Info node `(emacs)ls in Lisp'.

You can customize this variable.

Я работаю на FreeBSD; поэтому по умолчанию ls не является GNU'ish и не предлагает параметр --dired. На самом деле, я действительно не хочу устанавливать GNU-ядра на всех моих серверах.

Кто-нибудь имеет опыт использования альтернативы lisp ls, упомянутой выше?

Предположительно dired.el устанавливает dired-use-ls-dired что-то не-nil при загрузке, и я постоянно сжимаю его при первом просмотре каталога? И установка dired-use-ls-dired на nil в моем .emacs затихнет сообщение?

Есть ли у кого-то мнение, что отказ от работы на работу может представлять проблему безопасности? т.е. имена файлов, составленные из пробелов, остаются невидимыми?

Возможно, мне нужно проверить некоторые из вышеперечисленных...

Ответ 1

в macOS ls не поддерживает параметр --dired, в то время как в Linux он поддерживается.

(when (string= system-type "darwin")       
  (setq dired-use-ls-dired nil))

Ответ 2

Предположительно, dired.el устанавливает dired-use-ls-dired для чего-то не-nil при загрузке, и я постоянно сжимаю его при первом просмотре каталога? И установка dired-use-ls-dired на nil в моих .emacs затихнет сообщение?

Я думаю, что вы говорите правильно. Настройте значение nil. (Если это не поможет, вы всегда можете удалить свою настройку.)

Ответ 3

В этом случае вы также можете попробовать использовать gnu-ls, вы можете установить эти утилиты, посмотрите здесь, как заменить mac-os-x-utilities-with-gnu-core-utilities

В моем случае я поддерживаю обе утилиты gnu с префиксом "g".

Если вы используете gls, аргумент --dired включен

man gls

NAME ls - список содержимого каталога

ОПИСАНИЕ ls [ОПЦИЯ]... [ФАЙЛ]...

ОПИСАНИЕ Выводит информацию о ФАЙЛАХ (текущий каталог по умолчанию). Сортируйте записи в алфавитном порядке, если не указано ни -cftuvSUX, ни --sort.

   Mandatory arguments to long options are mandatory for short options too.


                             .... 
   -d, --directory
          list directories themselves, not their contents

                              ....
which gls                                                                                                                                                                
/usr/local/bin/gls

Тогда мы все тоже настроим emacs:

(when (string= system-type "darwin")
  (setq dired-use-ls-dired t
        insert-directory-program "/usr/local/bin/gls"
        dired-listing-switches "-aBhl --group-directories-first"))

Тогда вы можете использовать это: