LINUX.ORG.RU

Emacs find-dired и find-name-dired отдают кракозябру вместо кирилицы

 , ,


0

1

Привет, ЛОР. Подскажите как пофиксить или обойти этот «баг». У меня много файлов названы кириллицей, а в emacs когда ищу файл через find-dired или find-name-dired результат отдает в виде кракозябры типо \320\224\320\265\320\273\320\260/06. Тут - https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36085 написано, что это баг find, а не emacs, но когда я через терминал ищу find’ом, там проблемы нет, все отображается как надо. Кодировка везде ru_RU.UTF-8. find в системе один родной (Debian 13). Какие есть фиксы или воркэраунды?

Если задавать свой find-ls-option с -print0 | xargs ..., то имена правильно отображаются на кириллице, но 1) по ним нельзя перейти в файл (File no longer exists), 2) не понятно, насколько это безопасно так делать.



Последнее исправление: Xld (всего исправлений: 1)

Это не то чтоб прям ошибка. Просто find старая, написанная американцами программа. А это такие люди, которые вообще не очень чётко осознают, что есть страны за пределами США и языки помимо английского. Поэтому

   -ls, -fls
	 Unusual characters are always escaped.

Кириллица попадает в категорию «странные и необычные наказания символы». В терминале это работает точно так же, попробуйте find . \( -iname "*" \) -ls.

Отсюда очевидный выход: заменить find на что-нибудь посовременнее. Например на fd. После чего поменять значение переменной find-program и всё должно заработать как ожидается.

ugoday ★★★★★
()

То, что емакс не принимает нормальный человеческий find -print0, а полагается на омерзительный дважды уродливый [1] find -ls - это баг в дизайне.

Просмотрев по диагонали тред по ссылке, увидел там воркараунд с -exec ls, видимо тебе придётся использовать его.

[1] «дважды» потому, что find -ls криво имитирует выхлоп ls, который в принципе не создан и строго не рекомендован [2] для парсинга, а существует только лишь для человеческих глаз.

[2] Why you shouldn’t parse the output of ls(1): http://mywiki.wooledge.org/ParsingLs

legolegs ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария