?

Log in

No account? Create an account
не ожидал дожить до этого - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

не ожидал дожить до этого [май. 10, 2018|01:25 pm]
Anatoly Vorobey
[Tags|]

Господи, что творится-то, люди добрые.

Introducing extended line endings support in Notepad

Notepad теперь поддерживает юниксовский маркер конца строки.

Наверное, конец света действительно близок.
СсылкаОтветить

Comments:
[User Picture]From: zumba
2018-05-10 10:51 am
Примерно то же самое я почувствовал когда увидел в cmd Windows 10 нормальный selection flow. Раньше был исключительно прямоугольник.
(Ответить) (Thread)
[User Picture]From: ak_47
2018-05-10 12:35 pm
Там ещё и ANSI коды для 256 цветов теперь поддерживаются. Нет, это не сон. :)
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2018-05-10 12:39 pm
Aaaaaa!!!
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-10 04:14 pm
Таладна. Когда я обнаружил, что ресайз работает по-человечески, вот это был shock and awe. Осталось только дождаться поддержки UTF-8 из коробки.
(Ответить) (Parent) (Thread)
[User Picture]From: vels
2018-05-10 11:02 pm

Ну вы палку-то не перегибайте.
UTF-8 это уже уровень армагедона

(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-11 05:39 pm
Он поддерживается, но не по умолчанию. Интуитивная юзер-френдли команда chcp 65001 включает поддержку. Ну и шрифт нужно не абы какой выбрать, а чтобы нужные буковки в нем были.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-12 09:43 am
К сожалению, никакой «поддержки» Юникода не появляется, это всего лишь хак, задающий интерпретацию символов во вводе и выводе интерпретатора, и справляющийся разве что с листингом непредставимых в одной кодировке имён файлов.

Как известно, в Windows никакого UTF-8 нет, а есть юникодное API, работающее с двухбайтными (ну, для начала) символами в UTF-16LE, и ANSI API, работающее с однобайтными символами в текущей системной кодировке. После "chcp 65001" функции _A не перекомпилируются магически в функции _W, и мы имеем все те радости, глюки и падения, которые получает человек, решивший по-быстрому пихнуть в char[] строку UTF-8 без глобального пересмотра всех используемых библиотек.

ANSI-кодировки символов с переменной шириной (MBCS) в Windows тоже существуют, в версиях для азиатских и других языков, но в них как раз-таки система и приложения пересобраны с библиотеками, переписанными для работы с такими кодировками. UTF-8 не является одной из поддерживаемых локалей.

В Powershell есть юникод (поскольку это никакая не консоль, а REPL для C#, работающий с его объектами), в UNIX-подсистеме, по идее, тоже должны были что-то нормальное для работы программ придумать (не совместимое со старой консолью, очевидно).
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-13 05:43 pm
Вы меня, похоже, неправильно поняли. chcp отвечает за преобразование байтов, отправляемых в консоль, в видимые пользователю на экране буковки (и обратно, из нажимаемых кнопочек в байты). Все. chcp 65001 делает так, что это преобразование преобразует из/в UTF-8. Я имел в виду только это и больше ничего. Ни о каких локалях и W и A APIs и библиотеках речи нет, это из другой оперы совсем.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-14 04:27 pm
…А в результате данных операций в указанные функции попадает поток в UTF-8, с переменной шириной символа и сложными правилами кодирования и декодирования, хотя там его никто не ждёт.

В результате, например, привычный .bat-файл в однобайтной кодировке может не запуститься в кодовой странице 65001, поскольку содержит последовательности символов, не разрешённые в UTF-8. Или программа упадёт из-за того, что в файле (не консоли), который она честно читает в соответствии с заданными настройками окружения, будут символы, которых нет в шрифте (В ШРИФТЕ!) консоли. Последнее, впрочем, и без Юникода можно было организовать.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-14 06:04 pm
> сложными правилами кодирования и декодирования

А зачем его кодировать и декодировать? В задачу большинства программ это не входит. Байты нужно хранить и пересылать как есть, а декодированием занимаются специально обученные сущности (консоль, например).

Консольные программы под вендой, которым таки да нужно понимать символы, либо читают wchar_t (и тогда им все равно, что там за code page в любом случае), либо рассчитаны на какую-то одну legacy code page (и тогда они подлежат утилизации в биореакторе).

> хотя там его никто не ждёт

Кто включил 65001, тот именно UTF-8 и ждет. Вот я, например. Включил 65001, жду UTF-8, его получаю, и ничего такого катастрофического не происходит.

> может не запуститься в кодовой странице 65001

Он может не запуститься и в любой другой странице, отличной от той, в которой головотяп его писал. В большинстве страниц есть коды, не соответствующие никаким символам. Вывод такого кода в консоль приводит к всяческим неприятностям.

> в файле (не консоли), который она честно читает в соответствии с заданными настройками окружения, будут символы, которых нет в шрифте

Это какая-то фантазия. Если легального символа нет в шрифте консоли, консоль его заменяет на квадратик, вопросительный знак или какую другую кракозябру, это раз. Чтение из файла совершенно никак с этим не связано, это два. Я проверял.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-14 06:47 pm
> Байты нужно хранить и пересылать как есть

Переслал тебе length(s) байтов, у одного результата строка обрывается посреди символа, у другой функции стек мусором затёрт, куда сам сядешь, куда мать посадишь?

> Это какая-то фантазия.

Невероятно, но факт: замена шрифта на растровый 256-символьный делает больно даже программам уровня «прочесть строку из файла 1 — записать строку в файл 2».

> Если легального символа нет в шрифте консоли, консоль его заменяет на квадратик, вопросительный знак или какую другую кракозябру, это раз.

Это три разных подмены, и как минимум две из них происходят совсем не в коде вывода на экран данных консоли; отнюдь не «раз».
(Ответить) (Parent) (Thread)
From: (Anonymous)
2018-05-11 02:52 pm
Юникод? В консольной подсистеме Windows? Чтобы программы перестали падать, даже не взаимодействуя с консолью? Никогда!
(Ответить) (Parent) (Thread)
[User Picture]From: dmitrmax
2018-05-10 12:01 pm
> Наверное, конец света действительно близок.

А он будет кончаться на 0xA или 0xD, 0xA? ))
(Ответить) (Thread)
[User Picture]From: livelight
2018-05-10 05:08 pm
Лучший коммент :)
(Ответить) (Parent) (Thread)
[User Picture]From: spamsink
2018-05-10 06:17 pm
Или "А он будет кончаться на ^Z или ^D?"
(Ответить) (Parent) (Thread)
From: ext_1745607
2018-05-10 12:55 pm
Вау! Да так он уже скоро с Notepad++ конкурировать будет ;)
(Ответить) (Thread)
From: once_for_all
2018-05-10 07:51 pm

Да уж

(Ответить) (Parent) (Thread)
[User Picture]From: aosypov
2018-05-10 01:31 pm
Ну Яблы же перешли на Юникс, чому бы Окнам не?

Вот когда он синтаксис красить начнет - тогда и я поверю ;)
(Ответить) (Thread)
[User Picture]From: tsetsefly
2018-05-10 01:44 pm
Это пока только в insider build?
(Ответить) (Thread)
[User Picture]From: avva
2018-05-10 03:31 pm
Кажется, да, я запутался уже с их терминологией.
(Ответить) (Parent) (Thread)
[User Picture]From: ilya_dogolazky
2018-05-10 02:43 pm
Ну после того как винда щетай из коробки заражена убунтой... уже сложно удивить
(Ответить) (Thread)
From: (Anonymous)
2018-05-11 11:34 pm
Это вы про что? Я пропустил совсем...
(Ответить) (Parent) (Thread)
From: bakabaka
2018-05-12 07:30 am

Microsift Linux давно уже не шутка

Собственно, поэтому и блокнот стали чинить
(Ответить) (Parent) (Thread)
[User Picture]From: amigofriend
2018-05-10 03:49 pm
Пора заводить таг "муравей"?
(Ответить) (Thread)
[User Picture]From: rav_erev
2018-05-10 04:29 pm
После такой новости я не удивлюсь даже, если Notepad станет строчки нумеровать.
(Ответить) (Thread)
From: bopstr
2018-05-10 05:52 pm
"Extended" - это в смысле, notepad теперь распознает ситуацию, когда «новая строка» есть, а «возврата каретки» нет.

Мрачно лезу в Википедию:

The Unicode standard defines a number of characters that conforming applications should recognize as line terminators:[5]
LF: Line Feed, U+000A
VT: Vertical Tab, U+000B
FF: Form Feed, U+000C
CR: Carriage Return, U+000D
CR+LF: CR (U+000D) followed by LF (U+000A)
NEL: Next Line, U+0085
LS: Line Separator, U+2028
PS: Paragraph Separator, U+2029

Есть над чем работать...
(Ответить) (Thread)
From: (Anonymous)
2018-05-10 06:23 pm
Program Files/Sublime Text/uninstall.exe
(Ответить) (Thread)
From: pesec
2018-05-10 07:46 pm
Так всё логично: сначала нативные драйвера для SQL Server-а из линукса, потом отсутствие претензий к Mono, потом Linux Subsystem в Windows 10, потом и Visual Studio Core в линукс...
(Ответить) (Thread)
From: (Anonymous)
2018-05-11 05:16 pm
Here is an even more ominous sign: https://opensource.microsoft.com/?keyword=linux
(Ответить) (Thread)