Как описано в справочном документе для сортировки directory-files
, используется предикат string-lessp
, для которого (string-lessp "100" "9")
возвращает t
.Вы можете написать свой собственный предикат и установить для nosort
значение true и использовать cl-sort
для сортировки содержимого путем извлечения числовой части строк.Если вы находитесь на машине с доступом к sort -V
, вы можете просто обернуть команду оболочки:
(defun my-sort (&optional dir)
(interactive "D")
(with-temp-buffer
(shell-command
(concat "ls " (shell-quote-argument (or dir default-directory)) "| sort -V")
(current-buffer))
(split-string (buffer-string) "\n")))
Использование сортировки версий sort
должно привести к желаемому порядку.