wiki:MercurialWindowsConsole

Проблемы с кодовой страницей консоли под Windows

Как делать комментарии (messages) к пакетам изменений на русском языке

При выполнении операции commit можно указывать комментарий/сообщение с помощью опции -m:

hg commit -m "Это мой комментарий"

Внутри репозитория сообщения храняться в Юникоде, поэтому их можно писать хоть по-русски, хоть по-японски: их потом можно будет прочитать и под Юниксом, и под Windows.

Можно также задать сообщение и через файл:

hg commit -l message.txt

При этом, вроде бы, можно задать сообщение из нескольких строчек? Или будет воспринята только первая строчка из файла?

Проблемы при вводе сообщений через консоль

К сожалению, под Windows, консоль работает не в Юникоде, а в соответствии с некоторой кодовой страницей. При этом, если в Windows установлена "русская" локаль, для консоли по умолчанию устанавливается "досовская" кодовая страница 866. А для программ устанавливается по умолчанию кодовая страница 1251.

Поэтому, если, например, создать текстовый файл hello.txt, содержащий русские буквы, с помощью Notepad, а потом попытаться распечатать его через консоль

type hello.txt

то русские буквы напечатаются в виде "козявок".

Также и при работе с Mercurial через команду hg возникают проблемы. Если задать сообщение через командную строку, оно будет отправлено в hg в кодировке 866, но сам hg проинтерпретирует его как сообщение в кодировке 1251, перекодирует его в Юникод, и запишет в репозиторий в извращенном виде. И при попытке прочитать это сообщение под Юниксом, будут видны "козявки".

И наоборот, если репозиторий содержит нормальные сообщения на русском языке, то при попытке из посмотреть командой

hg log

под Windows будут видны "козявки".

Установка кодовой страницы 1251 для консоли

Можно поменять кодовую страницу консоли на страницу 1251 с помощью команды chcp. И тогда тексты в 1251 будут отображаться правильно. Например:

chcp 1251
type hello.txt

или

chcp 1251
hg log

Однако, выполнять команду chcp 1251 каждый раз в момент начала работы с консолью - неудобно (можно и забыть). При этом, в настоящее время, очень редко приходится работать из командной строки с текстами в кодировке 866.

Поэтому представляется целесообразным использовать радикальное решение: сделать так, чтобы команда chcp выполнялась автоматически при каждом открытии консоли. Для этого достаточно прописать в реестре следующее:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="chcp 1251 >nul"

Кстати, это может быть полезным не только для работы с командой hg, но и при работе с другими командами (вроде type).

Выбор шрифта для консоли

Есть ещё одна тонкость, которая может "попортить много крови", если о ней не знать!

А именно, чтобы русские буквы правильно отображались в окне консоли для любой кодовой страници, отличающейся от 866, следует выбрать не "растровый" шрифт (установленный по умолчанию), а шрифт типа True Type. При этом, Windows почему-то предлагает "выбор" только из одного шрифта типа True Type: Lucida Console.

Почему - непонятно... Ведь существует ещё несколько моношрифтов?

Last modified 13 years ago Last modified on Dec 31, 2007, 2:51:26 PM