Использование пункта контекстного меню проводника Windows "Bash prompt here", установленного с пакетом cygwin, chere
не работает, если путь содержит немецкий умлаут в любой позиции. Например: использование его для c:/temp/ö
результатов в приглашении Bash, открытом в c:/temp
, в то время как открытие cmd
приглашения работает также с умлаутами в пути.
Как решить эту проблему?
К вашему сведению:
- созданная запись в реестре
c:\opt\cygwin\bin\mintty.exe -e /bin/xhere /bin/bash.exe "%L"
(в расширенном контекстном меню "%L" заменяется на "%V"; но это тоже не работает) - настройка локали в cygwin:
LANG=de_DE.UTF-8
- Файловая система — NTFS. Поэтому имена файлов, как утверждается, хранятся в «Unicode», что бы это ни значило в соответствующей документации (Описание кодировки имен файлов в Центре разработки Windows)
- Кодовая страница в окне CMD: 850 (согласно команде powershell
[System.Text.Encoding]::Default
) - Кодовая страница Windows: 1252
- Все три программы (windows explorer, cmd.exe, bash в mintty) отображают умлаут одинаково, несмотря на разные кодировки.
- Переименование файлов невозможно, поскольку проблема в основном возникает на сетевых дисках с папками/файлами, которые а) ссылаются на множество ссылок (как символических, так и ярлыков Windows) и б) принадлежат/разделяются несколькими разными пользователями.
решение1
Если кодовая страница в окне CMD — 850, то символ в имени файла — это один байт, который не является допустимой последовательностью UTF-8. Система, вероятно, могла бы отобразитьнеизвестный глиф �но на самом деле не является чем-то странным, неожиданным или необычным то, что вместо этого он вообще ничего не отображает.
Простое решение — игнорировать его. Немного менее простое решение — обновить систему до Unicode везде. Переименуйте все файлы, чтобы у них были правильные имена Unicode, а затем настройте окно CMD на использование cp65001 (я не пользователь Windows, так что не спрашивайте меня, как это сделать. Я не уверен, нужно ли вам также менять кодовую страницу Windows по умолчанию).
решение2
В конце концов мне помог сам разработчик mintty, который любезно указал мне на нужную документацию (mintty-wiki:https://github.com/mintty/mintty/wiki/Tips#creating-a-folder-context-menu-entry-for-mintty). Согласно этому, пункты контекстного меню, созданные chere, НЕ работают с не-ASCII символами в именах каталогов.
Однако проблему можно смягчить, просто предоставив дополнительный параметр команде mintty, которая может справиться с задачей сама по себе, без необходимости в скрипте xhere. Таким образом, запись контекстного меню можно просто заменить на C:\cygwin64\bin\mintty.exe --dir "%1" /bin/bash
. Соответствующая запись теперь работает просто отлично.
решение3
Чтобы избежать этой проблемы и всего, что с ней связано.
Используйте только символы с шестнадцатеричными кодами...
2d, тире
30-39, цифры
41-5a, заглавные буквы AZ
5f, подчеркивание
61-7a, строчные буквы az
... из таблицы ниже в именах файлов.
Все остальное в конечном итоге станет источником проблем, например, если вы в какой-то момент времени перемещаете файлы между разными ОС (... на сетевых ресурсах и переносных дисках).
--- Таблица символов в шестнадцатеричной/десятеричной кодировке --- ECMA-Latin1 ~ ISO 8859-1 0 1 2 3 4 5 6 7 8 9 abcdef - - - - - - - - - - - - - - - - 2/2: ! " # $ % & ' ( ) * + , - . / 3/3: 0 1 2 3 4 5 6 7 8 9 : ; ? 4/4: @ ABCDEFGHIJKLMNO 5/5: PQRSTUVWXYZ [ \ ] ^ _ 6/6: ` abcdefghijklmno 7/7: pqrstuvwxyz { | } ~ 8/8: 9/9: 10/a: ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ 11/б: ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ 12/c: А Б В Г Д Е Ж З И И К Л М Н О П 13/д: Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß 14/e: а б в г д е ж з и й к л м н о п 15/ж: р с т у ф х ц ÷ ш щ щ ы щ е щ е щ