Приложение «Блокнот» для Windows 11

  • Категория: Windows 11
  • Дата: 24-02-2022, 21:41
  • Просмотров: 11 324


Новое приложение «Блокнот» для Windows 11 использует RichEdit и работает на последних установках Windows 11. В дополнение к внешнему виду Windows 11 со скругленными углами и опцией темной темы, новое приложение включает в себя несколько стандартных улучшений редактирования RichEdit, таких как Alt+x для ввода символов Unicode, Ctrl+} для переключения между совпадающими скобками/круглыми скобками, многоуровневая отмена, перетаскивание, цветные эмоджи, выбор блока и автоматическое определение URL. Вы можете догадаться, что использование простого текстового элемента управления RichEdit в приложении было бы беспроигрышным вариантом. RichEdit имеет элементы управления с открытым текстом еще со времен Office 97. И они использовались бесчисленное количество раз. Но эти простые текстовые элементы управления были небольшими и обычно находились в диалоговых окнах. Блокнот часто используется для просмотра больших файлов, поэтому важна высокая производительность, а строки могут быть невероятно длинными. И классическое приложение было улучшено различными способами, такими как более высокая производительность, обнаружение конца строки (CR, LF, CRLF) и параметр «Показать управляющие символы Unicode». Соответственно, потребовались значительные усилия, чтобы использовать RichEdit в качестве движка редактирования нового приложения. Этот пост описывает некоторые дополнения и детали реализации.

Дополнения к RichEdit

В классическом блокноте есть две удобные функции, которые не были реализованы в RichEdit: обнаружение конца строки (CR, LF, CRLF) и режим «Показать управляющие символы Unicode». В течение многих лет приложение «Блокнот» не нарушало условные строки Unix, которые заканчивались символом LF (U+000A) вместо CRLF (U+000D U+000A). Чтобы решить эту проблему, приложение пошло еще дальше: оно проверяло, какое окончание строки идет первым, а затем делало эту строку окончанием по умолчанию для файла. Таким образом, файл с LF-окончанием строк остается LF-окончательным и отображается корректно. Внутренне RichEdit следует примеру Word и Mac в завершении абзацев с помощью CR и преобразовании LF и CRLF в CR при чтении файла или сохранении текста с помощью API, такого как WM_SETTEXT или ITextRange2::SetText2. Это по-прежнему так, но вы можете указать RichEdit распознавать тип завершения строки в файле и использовать этот выбор для сохранения/копирования файла, отправив сообщение EM_SETENDOFLINE с параметром wparam = EC_ENDOFLINE_DETECTFROMCONTENT.

Показать режим управляющих символов Unicode и эмоджи

Блокнот уже много лет имеет опцию «Показать управляющие символы Unicode» в контекстном меню. В этом режиме управляющие символы нулевой ширины двунаправленного текста отображаются с использованием характерных глифов «zero-width». Это очень ценно, например, для выявления кодов Bidi RLO (U+202E) и LRO (U+202D), которые переопределяют обычные направления символов и иногда используются для подделки файлов в гнусных целях. Он также отображает соединение zero-width (ZWJ—U+200D) с вертикальной линией «zero-width», над которой стоит крестик. Но внутри последовательностей эмоджи ZWJ, таких как семейные эмоджи, режим не разбивает последовательность на части ZWJ и не показывает ZWJ с помощью глифа ZWJ zero-width. А классическое приложение не отображает последовательности ZWJ и эмоджи в целом в цвете.

В новом режиме «Показать управляющие символы Unicode» последовательности ZWJ разбиваются на части ZWJ, а ZWJ отображаются глифом ZWJ zero-width. Вы можете перемещаться внутри последовательности ZWJ, используя клавиши ← и → и нажимая Alt+x, чтобы увидеть коды символов, составляющих последовательность ZWJ. Это позволяет понять, как строится последовательность ZWJ.

Выпадающее диалоговое окно «Найти/Заменить»

Visual Studio Code имеет отличное диалоговое окно «Найти/Заменить», которое выпадает в правом верхнем углу текстовой области. Если диалоговое окно перекрывает начальный текст, пользователь может перетащить текст вниз прямо под нижнюю часть диалогового окна. Новое приложение имитирует это поведение. Было немного сложно заставить RichEdit обеспечить соответствующую функциональность. В форматировании расширенного текста свойства space-before и space-after используются для добавления интервала между абзацами. Поскольку RichEdit — это редактор расширенного текста, он поддерживает эти свойства, и было естественно реализовать выпадающее пространство как «пространство документа перед». Значение space-before включается в восхождение первой строки в документе. Хитрости заключались в удалении или замене первой строки и в правильной прокрутке дисплея с ненулевым значением space-before документа.

Улучшения пользовательского интерфейса для работы с обычным текстом

Microsoft решила согласовать пользовательский интерфейс Visual-Studio для выбора и отказа от выбора символа EOP в конце строки. Это отличается от пользовательского интерфейса Word, который имеет тенденцию автоматически выбирать символ EOP, если вы перемещаетесь рядом с ним. В частности, в элементах управления с обычного текста Microsoft не позволяет мыши расширять выделение, чтобы включить EOP в строку, или позволять Shift+End выбирать EOP. Это соответствует тому, что удаляется, если вы нажмете клавишу Delete после выделения текста. Вы по-прежнему можете выбрать символ EOP, используя Shift+→ и расширив выделение до следующей строки. Кроме того, если перенос слов отключен, курсор точки вставки теперь следует за любыми пробелами, которые вы вводите, а не игнорирует пробелы.

Некоторые детали реализации

Приложение «Блокнот» для Windows 11 использует окно для редактирования холста, а окна обычно используют GDI для отображения текста и изображений. В GDI нет функций для отображения цветных шрифтов в цвете, в отличие от DirectWrite. Чтобы иметь возможность использовать DirectWrite для цветных эмоджи и других улучшений, новое приложение создает окно RichEDitD2DPT, которое использует DirectWrite для текста и GDI для объектов OLE (Блокнот не вставляет объекты OLE).

Сборка RichEdit, используемая в «Блокноте», происходит из тех же источников, что и RichEdit, который загружается с приложениями Microsoft 365, такими как Word, PowerPoint, Excel и OneNote. Это не Windows RichEdit в msftedit.dll. Следовательно, приложение имеет последние улучшения RichEdit.

Microsoft исправила ошибки, которые не проявлялись в элементах управления RichEdit с обычным текстом на протяжении многих лет, отчасти потому, что перед блокнотом экземпляры обычного текста были небольшими.

Блокнот использует классическую привязку шрифта RichEdit вместо привязки шрифта IProvideFontInfo, которая используется в текстовых элементах управления XAML и в элементах управления RichEdit, появляющихся в приложениях Microsoft 365. Блокнот не хочет загружать библиотеки mso, используемые в последнем, так как эти библиотеки довольно большие. Классическая привязка шрифта была улучшена, но необходимо добавить поддержку других скриптов.

Microsoft улучшила производительность RichEdit для больших файлов ASCII, например для дампов памяти. Одной из функций, которая может замедлить чтение в большом файле, является автоматическое определение URL. При чтении в обычном тексте LF и CRLF транслируются в CR для внутреннего использования, а в процессе текст проверяется на наличие комбинации «:/». Если эта комбинация не найдена и включен только AURL_ENABLEURL, автоматическое обнаружение URL игнорируется.

Будущее

Представьте, что можно добавить с помощью RichEdit. Элементы управления простого теста RichEdit имеют только один формат абзаца, но они могут иметь значительное форматирование символов. Последнее необходимо, потому что 1) Unicode имеет более 144000 символов, а один шрифт ограничен 65535 глифами, и 2) Input Method Editors (IMEs) и средства проверки орфографии требуют подчеркивания и/или окрашивания текста. Таким образом, хотя пользовательский интерфейс предоставляет только один формат символов, объектная модель TOM предоставляет доступ ко многим другим свойствам (см. ITextFont2). Соответственно, можно было бы предложить подсветку синтаксиса программного кода, используемую, например, в Visual Studio и Visual Studio Code. Но, вероятно, это должно быть областью интерактивных сред разработки компиляторов. Другим вариантом может быть отображение XML-файлов с отступом и переключением между начальными и конечными тегами XML/HTML, как это делает Ctrl+} для выражений в квадратных скобках. Производительность больших файлов требует большего улучшения.

Илья Источник:
devblogs.microsoft.com
  • +4




  • Комментарии
ger_neufeld
Посетители | 24 февраля 2022 22:06
  • 0
Самое замечательное, что на скриншоте в магазине изображена старая версия блокнота.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Пользователи онлайн
Всего на сайте: 17
Пользователей: 0
Гостей: 17
Роботы: Yandex Google
+0  
Новостей: 6411
+0  
Комментариев: 1520
+0  
Пользователей: 5016
Опрос Все опросы

Нравится ли вам название Windows 11?


Youtube Подписывайся!