Привет, Хабр!

Отсылка к прошлому посту

Этот пост является, отчасти, переосмыслением прошлой статьи, со своими дополнениями и улучшениями.

Дело в том, что в прошлой статье я допустил одну критичную ошибку, которая сказалась на всём повествовании – я хотел рассказать о проекте дополняющем клавиатурную раскладку, а сам, невольно, сместил всё внимание на буквенную часть, которую зачем-то стал навязывать к использованию, как основу всего проекта. С неё всё началось, с ней связаны многие детальные части проекта, но обязательной она не является. Потому она была справедливо вынесена из проекта, и теперь мы можем полноценно поговорить о прочих аспектах, без оглядки на буквенную часть.

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

Спасибо всем комментаторам. Я учёл все замечания и предложения к вынесенной буквенной части, и ещё попробую посмотреть, как можно её улучшить. Не знаю, получится ли правильно всё реализовать, но так или иначе, это уже не имеет никакого отношения к текущему посту.

Без предысторий. О чём этот проект?

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

Основная идея – использование одной раскладки для всей письменности и символьного набора, без каких-либо ограничений.

Возможно вы также слышали (а может даже и используете) о типографской раскладке Ильи Бирмана. Она добавляет многим клавишам два дополнительных слоя, с модификаторами AltGr и Alt-Shift, под которыми расположен расширенный набор символов, в числе которых символы "корректного ввода", кавычки всех видов, некоторые специфичные языковые символы, а также прочие потенциально востребованные символы и немного диакритики. Общее количество уникальных символов около 75. За 15 лет данная раскладка приобрела немалую известность, в основном среди медиакомпаний, что служит определённым показателем востребованности.

В самом базовом представлении, данный проект следует тем же положениям – дополнительные символы на дополнительных слоях под модификаторами, для упрощения набора. Но самое интересное в деталях, ведь так? О них и поговорим ниже, благо, есть о чём.

Символьные слои

Модификаторы

Первым делом стоит определиться с модификаторами доступа к символьным слоям.

Не хотелось прибегать ни к идее отдельного переключения слоёв, ни к двойным зажимаемым модификаторам, ни к специфичному модификатору AltGr, из-за его неоднозначного использования. Все эти варианты не представляются достаточно удобными для повседневного использования.

Из оставшихся стандартных модификаторов оставался лишь обычный Alt, но его, конечно, недостаточно. Потому были опробованы различные "нестандартные" модификаторы, один из которых оказался настолько удобным в использовании, что в итоге стал основным (под ним расположен самый востребованный, он же базовый, набор символов). Этот модификатор – "длинные" или "долгие" нажатия. Вам может прийти аналогия со вводом на современных мобильных клавиатурах, но ощущаются они весьма по-разному. Также не стоит слишком акцентироваться на слове "долгие", ведь на деле эти нажатия занимают от 0.15с (базовая конфигурация) до 0.11с (оптимальное значение, после привыкания к модификатору), и могут быть в любой момент переопределены на более комфортное значение.

После длительного использования данного модификатора, могу уверить, что ввод символов с длинным нажатием едва ли отличается по ощущениям от базового ввода буквенных символов. Shift никак не влияет на ввод символов с данным модификатором, что позволяет набирать их одним и тем же образом в потоке буквенных символов равно как нижнего, так и верхнего регистров.

Третьим модификатором, для сверх-дополнительных символов, выступает комбинация двух озвученных. Обращаясь к прошлому абзацу – эта комбинация ощущается как одинарный модификатор, и не эквивалентна двойным зажимаемым модификаторам.

Основной символьный слой

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

Символы сгруппированы по категориям (пунктуация, базовая математика, валюты, скобки с зеркальным положением вокруг домашнего ряда).

Наиболее востребованные категории (пунктуация и базовая математика) расположены на домашних позициях пальцев, для максимально удобного доступа к ним.

Некоторые графически близкие символы расположены на вертикально смежных позициях.

В правом верхнем углу расположен самый востребованный диакритический комбинируемый символ – аку́т, в первую очередь, как маркер основного ударения.

В цифровом ряду, на месте бывших символьных клавиш -_ и =+, расположены две новые клавиши-команды – уменьшение и увеличение выделенного числа на 1. Данные клавиши определены на базовом слое (без каких-либо модификаторов) и не имеют варианта с модификатором длинного нажатия, для возможности повторения команды через удержание, потому отображены на данном слое в базовом виде. Данные клавиши могут быть переопределены отдельным пользователем в конфигурации реализации.

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

Альтернативный слой

Основу слоя, расположенного под Alt, составили альтернативные отображения символов с прошлого слоя или их логические вариации на тех же позициях – минус вместо дефиса, длинное тире на месте среднего, символ цента вместо символа доллара, гравис (как побочное ударение) вместо акута, двойные кавычки-«ёлочки» на месте одинарных угловых, …

Данный слой был дополнен базовыми навигационно-управляющими командами (стрелки, вперёд/назад, отменить/повторить), для минимизации отрыва рук от домашних позиций.

В цифровом ряду расположились все минимально востребованные символы надстрочной комбинируемой диакритики.

Расположение данного набора символов в цифровом ряду позволяет использовать их только тогда, когда они нужны, и только те, которые нужны, никоим образом не сказываясь на прочих аспектах набора и не "занимая полезное место". Ведь в зависимости от языка, у пользователей может возникнуть необходимость всего в 1-3 диакритических символах (у каждого своих), а значит, "ненавязчивое" расположение актуально как для пользователей вовсе не использующих диакритику, так и для использующих её на 4-12%, в зависимости от потребностей.

Диакритический ряд не является реализацией упомянутой ранее мультиязычности, хотя и вносит в неё свой вклад. О полноценной мультиязычности мы поговорим отдельно.

Дополнительный слой

Данный слой содержит наименее востребованные, но всё ещё представляющие интерес символы.
Следование категориям и позициям прошлых слоёв по возможности соблюдено, хотя на данном слое и не так заметно.

Навигационно-управляющие клавиши представлены в Alt варианте, и не имеют AltLong варианта, для сохранения возможности повторения команды через удержание.
Цифровой ряд содержит 10 подстрочных комбинируемых диакритических символов (все минимально востребованные). Описание, которое было дано надстрочной диакритике, является общим и для над- и для подстрочной диакритики.
Оставшиеся два места в цифровом ряду были отданы дополнительным символам.

Итог раздела

Суммарно на трёх слоях расположились 83 вспомогательных символа + 24 символа комбинируемой диакритики + 8 навигационно-управляющих команд + 2 вспомогательные команды.
Данные символы и команды объединены в логические группы.
Группы и отдельные вариации символов наследуют своё положение между слоями.
Позиционирование выполнено с ориентацией на удобство набора наиболее востребованных символов, с дополнительным вертикально-смежным или зеркальным позиционированием логически связанных символов в отдельных случаях.

Мультиязычность

Мультиязычность реализована посредством введения дополнительного языкового блока. Его основная идея состоит в том, что он выступает в роли открывающего доступ к набору на любом языке письменности, без привязки раскладки к конкретному языку, без каскадных ограничений набора и никак не сказывается на удобстве набора для тех пользователей, которые им не пользуются, хотя и у последних когда-никогда может возникнуть редкая потребность в нём.

В рамках этого блока нас интересует всего одно различие между языками одной письменности – набор символов (как закреплённый алфавитом, так и используемый на практике). Конечно, отдельные языковые особенности также учтены, но они будут рассмотрены отдельно для каждого случая.

Итак, как же могут различаться символы между языками? Тут существует две категории:

  • графически уникальные символы/лигатуры;

  • символы с добавочной диакритикой, или им эквивалентные.

Наличие символов первой категории является обязательным условием для базовой возможности набора на конкретном языке, и именно добавление подобных символов – основная причина создания множества отдельных языковых буквенных раскладок. Которые теперь нам не понадобятся.

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

Стоит дополнительно отметить, что символы второй категории могут быть закреплены официальным алфавитом и восприниматься носителями как уникальные (как й или ё в русском, к примеру), а могут быть общеизвестно комбинируемыми. Чем богаче на диакритику язык, тем скорее подобные буквы будут восприниматься именно в комбинируемом варианте.

Наборы символов

Конечно, специфичных языковых символов куда больше, чем мы можем разместить на клавиатуре, и уж тем более, если мы хотим сделать это удобным образом. Потому нам стоит разделить все специфичные языковые символы на наборы, которые позволят использовать их с максимальным охватом и удобством. Наборы составлены отдельно для кириллицы и латиницы, а текущий набор символов в языковом блоке будет зависеть от текущей активной раскладки, предлагая ко вводу только актуальные символы. Переключение между наборами одной письменности, при необходимости, может осуществляться "на лету", хотя это и редкий случай, ведь достаточно единожды выбрать тот набор (для каждой письменности), который потенциально может пригодиться.

Располагается наш языковой блок в "ненавязчивом" цифровом ряду под модификатором Shift (ShiftLong для вариантов в верхнем регистре), что даёт нам 12 позиций в каждом наборе.
Возможно смещение блока на модификаторы Long и Shift.

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

Базовый набор – ł đ ı ß ø æ œ.

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

Изменяемая часть наборов состоит из упомянутых ранее символов упрощённого ввода.
В некоторых локально востребованных наборах могут встречаться и уникальные графические символы, которые было нецелесообразно выносить в базовый набор. Подобные наборы символов можно категоризировать как "позволяющие", так как без их использования ввод текста на конкретном языке не является полноценным. К таким наборам относятся некоторые языки Африки, а также исландский, казахская латиница, азербайджанский и мальтийский.
Все остальные наборы не имеют подобного ограничения, и категоризируются как "упрощающие", т.е. содержащие в изменяемой части исключительно символы упрощённого ввода.

Давайте для примера взглянем на основной набор языкового блока для латиницы:
ñ å ä ö ü ł đ ı ß ø æ œ

Здесь к базовому набору были добавлены 5 символов упрощённого ввода, и в таком виде набор открывает полноценный доступ к следующим языкам: испанский, немецкий, французский, вьетнамский, шведский, датский, финский и норвежский.

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

Здесь также не перечислено множество языков, доступных ко вводу (как на базовой письменности, так и через диакритику) без использования языкового слоя – их поддержка подразумевается сама собой.

Таким образом, всего с одной вариацией языкового блока открывается полноценный доступ к 76.78% языков интернета (по используемости) и базовый к дополнительным 4.42% языков, из общих 82.16% языков латинской письменности. Суммарно же, все языковые наборы охватывают все языки письменности.

Здесь и далее используется статистика использования языков в интернете с сервиса w3techs.com за 01.12.2021.

Для языков, чья письменность отличается от латинской и кириллической, предусмотрены варианты романизации. Из 9.86% подобных языков для 9.84% поддерживаются все версии романизаций, большая часть которых недоступна на базовой раскладке письменности. Для оставшихся – предусмотрены только некоторые варианты романизации.

Отдельные уточнения и учёт языковых особенностей
  • в наборах, основанных на турецком варианте латиницы предусмотрено небольшое опциональное перепозиционирование символов iI и ıİ, для более логичного ввода – (в буквенной части) и ıI (языковой блок). Переключаемая опция;

  • при выборе румынского языкового набора предусмотрена опциональная замена диакритической седили на кому, для исправления распространённого ошибочного использования первой. Переключаемая опция;

  • в наборах "исландский/древнеанглийский" и "мосси" символ đĐ заменён на варианты начертания, использующиеся в данных языках – ðÐ и ɖƉ, соответственно;

  • в наборы, в которых количество динамических символов ограничилось 4, была добавлена ñ, даже не относясь к основному языку набора, в качестве символа с максимальным расширением охвата, без зависимости от прочих символов;

  • в некоторых отдельных наборах, в которых количество динамических символов потребовало 6 позиций, дополнительное место было пожертвовано от ł;

  • в наборах для польского, литовского, латышского и венгерского языков, ввиду крайне широкого использования диакритики в данных языках, охватить все символы упрощённого ввода не представляется возможным. Упрощённый ввод, по возможности, охватывает символы с разной диакритикой, оставляя на комбинированный ввод буквы с единым диакритическим знаком (обычный акут для польского и венгерского, огонэк для литовского);

  • в зависимости от потребностей пользователя (переключаемая настройка), символы упрощённого набора могут подаваться на ввод как в комбинированном виде, так и в виде цельного юникод-символа;

  • одинаковые динамические символы, встречающиеся в разных наборах, расположены на одних и тех же позициях, где это было возможно.

Все варианты латинских наборов (31)

Main

ñ å ä ö ü ł đ ı ß ø æ œ

Turkish

ç ş ğ ö ü ł đ ı ß ø æ œ

Polish

ñ ą ę ż ó ł đ ı ß ø æ œ

Romanian

î ă â ș ț ł đ ı ß ø æ œ

Hungarian

ñ ő ű ö ü ł đ ı ß ø æ œ

Slovene, Croatian, …

č š ǵ ž ć ł đ ı ß ø æ œ

Lithuanian

č š ž ė ū ł đ ı ß ø æ œ

Luxembourgish, Uyghur

é ë ä ö ü ł đ ı ß ø æ œ

Kurdish (Hawar alphabet)

ç ş ê î û ł đ ı ß ø æ œ

Twi, Yoruba (Benin), …

ñ ŋ ɲ ɛ ɔ ł đ ı ß ø æ œ

Hausa

ɓ ɗ ƙ r̃ ƴ ł đ ı ß ø æ œ

Latvian, Maori, …

ā ē ī ō ū ł đ ı ß ø æ œ

Igbo

ñ ṅ ị ọ ụ ł đ ı ß ø æ œ

Irish, Luba-Katanga, Sundanese

á é í ó ú ł đ ı ß ø æ œ

Venda

ṅ ḓ ḽ ṋ ṱ ł đ ı ß ø æ œ

Old English, Icelandic

þ ƿ ſ ö ᵹ ł ð ı ß ø æ œ

Mossi

ɓ ɩ ʋ ɛ ɔ ł ɖ ı ß ø æ œ

Fula

ɓ ɗ ŋ ɲ ƴ ł đ ı ß ø æ œ

Maltese

ñ ċ ġ ż ħ ł đ ı ß ø æ œ

Northern Sotho, Albanian

ç š ê ô ë ł đ ı ß ø æ œ

Kazakh

ñ ŋ ş ğ ū ł đ ı ß ø æ œ

Southern-Berber, Kanuri

ǝ ŋ ɣ ʕ ɍ ł đ ı ß ø æ œ

Haitian, Javanese, Kikuyu

é è ò ĩ ũ ł đ ı ß ø æ œ

Uzbek

ç ş ḡ ō ñ ł đ ı ß ø æ œ

Azerbaijani, (Turkish)

ç ş ğ ö ü ə đ ı ß ø æ œ

Estonian

š ž ä ö ü õ đ ı ß ø æ œ

Urdu (Roman script)

ū ṛ ṣ ṭ ẓ z̤đ ı ß ø æ œ

Esperanto

ĉ ŝ ĝ ĥ ĵ ǔ đ ı ß ø æ œ

Western Frisian

â ê é ô û ú đ ı ß ø æ œ

Northern Sami

č š ž á ŋ ŧ đ ı ß ø æ œ

Volta-Niger languages

ṅ ṣ ẹ ọ ụ ị đ ı ß ø æ œ

Перейдём к кириллическим наборам.
Здесь положение несколько иное, так как, за редким исключением, добавочная диакритика крайне некорректно отображается с кириллическим набором символов на подавляющем большинстве шрифтов, что вынуждает нас относиться ко всем символам данной письменности как к уникальным, хотя, справедливости ради, большая часть из них и так принадлежит к уникальной категории.
Ввиду этого факта, все наборы являются "позволяющими", и у них нет базового набора – все символы являются изменяемыми из набора в набор. Однако это положительно сказалось на количестве наборов – их всего 5, один из которых принадлежит единственному языку.
Символы кириллических наборов, по озвученной ранее причине, передаются на ввод исключительно в едином, предкомбинированном виде (за исключением з́ и с́, вовсе не имеющих цельного представления).

Основной, по потенциальной востребованности, кириллический набор:
ґ є і ї ӏ ў ѣ ѵ ѳ ӂ ӕ ӧ

Данный набор символов открывает доступ к полноценному набору текста на украинском, белорусском, молдавском, русинском, осетинском, языке коми, диалекте руска рома, ряде кавказских языков, дореволюционном русском.

Все варианты кириллических наборов (5)

Основной

ґ є і ї ӏ ў ѣ ѵ ѳ ӂ ӕ ӧ

Сербский, боснийский, македонский, черногорский, интерславик

ѓ ќ ђ ћ љ њ ѣ џ ј ѕ з́ с́

Казахский, монгольский, узбекский, киргизский, таджикский

ғ қ ң ҷ ҳ ү ә һ ө і Ұ ӯ

Башкирский, чувашский, татарский

ғ ҡ ң ӑ ӗ ү ә һ ө җ ҙ ҫ

Абхазский

ӷ қ ҟ ҷ ҳ ҩ ә ҵ ӡ ҭ ҽ ҿ

Из 7.98% кириллических языков интернета 7.68% доступны к полноценному вводу на основном наборе, а оставшиеся 0.3% – посредством 4 прочих наборов.

Текущие активные наборы символов также отображены в GUI.

С полным распределением, алфавитами, наборами, процентами, поддержкой, категориями и письменностями можно ознакомиться в файле languages.xlsx

Итог раздела

Языковой блок, расположенный под Shift и динамически изменяющийся, в зависимости от активной раскладки, содержит в себе 31+5 наборов специфичных языковых символов, которые открывают доступ к набору текста на любом языке кириллической и латинской письменностей. Из 90.14% кириллических и латинских языков интернета:

  • полностью поддерживаемые языки на любом наборе – 77.64% (89.16% без упрощённого ввода);

  • полностью поддерживаемые языки на основных наборах – 6.82%;

  • полностью поддерживаемые языки на дополнительных наборах – 5.40%;

    • 5.02% – на упрощающих, 0.38% – на позволяющих;

  • диакритически поддерживаемые языки – 0.28%.

Романизированные версии языков прочих письменностей: все версии – 9.84%, некоторые – 0.02%.

Дополнительный функционал / реализация

С POC-реализацией для Windows можно ознакомиться и опробовать на гитхабе.
Большая часть настроек, включая длительность срабатывания "длинных" нажатий и выбор языковых наборов, доступна в меню скрипта в трее.

Буквенные раскладки

Данный проект не является отдельной раскладкой и не требует никаких изменений в этой части. Использование происходит поверх вашей раскладки, какой бы она ни была.

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

Адаптация заключается в очистке раскладки от небуквенных символов и размещении буквенных символов в буквенной части клавиатуры, в случае, если в оригинальном виде они расположены за её пределами. Никаких прочих изменений – это те же буквенные раскладки, как они представлены в оригинальном виде.

Также приведение раскладок в адаптированный вид продолжает идею модульности – каждый блок слоя клавиатуры отвечает за собственный функционал: буквы в буквенной части на базовых нажатиях, символы на символьных слоях, цифровые символы в цифровом ряду, языковые символы в языковом блоке, диакритика в собственных слоях в цифровом ряду. В существующих же раскладках всё это переплетено между собой, и малейшее изменение влечёт за собой ряд каскадных переназначений, что мы можем наблюдать сегодня в бесчисленных вариантах раскладок, разнящихся зачастую всего парой символов, однако уже так представляющих собой отдельную раскладку.

Но так или иначе, проект не зависит от вашей раскладки и использование адаптированной версии является исключительно опциональным.

Опциональные/переключаемые функциональности

Парные скобки/кавычки – aвтоматически закрывает скобки и кавычки <>, «», "", “”, (), [] и {}, устанавливая позицию каретки между ними.
Aвтоматическое закрытие одинарных кавычек не предусмотрено, так как данный символ часто используется в значении апострофа, где парная кавычка будет нежелательной.

Комбинированный упрощённый ввод символов языкового блока – базово на ввод отправляются "цельные" символы, даже если они эквивалентны комбинированным. С данной опцией, они будут отправляться в виде буква+диакритика, где это возможно.

Переназначения управляющих клавиш – дополнительное перепозиционирование клавиш Backspace, Enter, CapsLock и Esc, для их более комфортного использования. Подобное расположение является более эргономичным и позволяет минимизировать движения, отрывающие пальцы от домашних позиций. Предлагаемое назначение:

  • Enter выполняет функцию Backspace; с зажатым ShiftDelete;

  • Backspace выполняет функции управления медиа (нажатие – воспроизведение/пауза; с Shift – увеличить громкость; с Alt – уменьшить громкость; с ShiftLong – следующий медиа-элемент; с AltLong – предыдущий медиа-элемент);

  • Tilde выполняет функцию Esc;

  • CapsLock выполняет функцию Enter;

    • Функция CapsLock может быть назначена на Esc отдельной настройкой.

Пользовательские назначения – для клавиш уменьшения/увеличения числа в цифровом ряду, а также для "опустевших" клавиш адаптированных латинских раскладок предусмотрены дополнительные назначения, которые прописываются пользователем в config.ini файле скрипта.

Там же могут быть назначены дополнительные клавиши для переключения между окнами процессов сочетанием LWin-<назначенная_клавиша>.

Автоматическое отключение скрипта в отдельных приложениях – отлов длинных нажатий может быть нежелательным в некоторых приложениях, сказываясь на их работе. Такие приложения вносятся в файл config.ini в секцию BlackList, после чего действие скрипта в данных приложениях будет автоматически приостанавливаться.

Дополнительные горячие клавиши реализации

Изменение регистра
выделенного текста
(переключаемая функциональность)

[Alt/Ctrl]-DoubleShift

Неразрывный пробел (переключаемая функциональность)

Shift-Space

Заменить выделенный текст, текстом из буфера обмена, с сохранением заменяемого текста в буфер

Ctrl-Shift-v

Навигация "стрелками"

[Shift/Ctrl]-Alt-[hjkl]

Перемещение окон

[Shift]-LWin-[hjkl]

Свернуть/[восстановить] все окна

LWin-Enter[Long]

Пауза/возобновление скрипта

Shift-Tilde

Перезапуск скрипта

Ctrl-Shift-Tilde

GUI

Скрипт имеет минимальный подсказывающий GUI, в котором отображены все символьные слои, базовая раскладка, выбранные языковые наборы, некоторые переключаемые опции и переназначения.

Все скриншоты выше взяты из него.

Дополнительно присутствуют: вкладка скан.кодов (как подсказка для добавления назначений в config.ini), список языковых наборов (с возможностью смены активного двойным нажатием) и список горячих клавиш.

Отображение GUI переключается кликом по иконке в трее или сочетанием Alt-F1.
Пока GUI активен, переключение между вкладками может быть осуществлено клавишами F1-F7.
Нажатие клавиши в буквенной части клавиатуры выделят данную клавишу на "слоевых" вкладках.

Пример отображения основного символьного слоя с включённым переназначением управляющих клавиш, дополнительными переназначениями в цифровом ряду и включённой опцией парных скобок:

Заключение

Данный проект дополняет клавиатурную раскладку предоставляя единый доступ к более чем 100 уникальным символам и 10 командам, языковому блоку, охватывающему все языки кириллической и латинской письменностей, с их особенностями, а также к различному вспомогательному функционалу и пользовательским назначениям.

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


Спасибо, что дочитали. Буду рад всем комментариям, предложениям, замечаниям.
Если вы носитель языка, отличного от основного языка письменности, буду отдельно рад отзывам и предложениям по поддержке конкретных языков.

Комментарии (10)


  1. AndreyDmitriev
    02.12.2021 12:51
    +1

    Я как раз этим летом размышлял на тему коррекции кириллической раскладки, но элегантного решения не нашёл.

    Дело в том, что у меня основная раскладка немецкая (к которой я очень привык), а кириллическая используется эпизодически и вот если их сравнить, то все знаки типа ? ( ) + * - _ и так далее перескакивают на другие клавиши при смене раскладки:

    Особенно скобки достают, которые "съезжают" на одну клавишу.

    Я было вооружился редактором клавиатуры и озадачился универсальной раскладкой, в которой все знаки препинания, скобки и т.д. оставались бы на своих местах, независимо от языка. И всё бы ничего, но вот буквы "Б", "Ю" и "Ъ" явно не вписываются в эту концепцию, поскольку на этих клавишах запятая, точка и плюс. Я пробовал было их в верхний ряд поместить, либо знаки через AltGr вводить, но как-то не прижилось.


    1. TLHE Автор
      02.12.2021 14:44

      Да, это одна из основных проблем, даже между раскладками одной письменности, не говоря уже о разных, где базовое количество буквенных символов разнится на 20%+ (в случае сравнения кириллица-латиница), из-за чего "нужно" или освобождать позиции в одной, или заполнять пустующие места во второй.

      Некоторые буквенно-символьные раскладки подходят к этой проблеме как раз с той позиции, что вы описали в конце – убирают "редкие" буквы из основной части, в угоду вспомогательным символам, по примеру обделённой «ё» в стандартном «йцукене». А в отдельных случаях даже разносят прописные и строчные варианты одной буквы на разные клавиши.
      Совсем не разделяю этот подход, и вполне понимаю, почему опробованные вами позиционирования не прижились.

      Наверное, располагая небуквенные символы в буквенной части, решить эту проблему и не представляется возможным, потому я и пошёл другим путём, который позволяет унифицировать небуквенный ввод.


      1. seraz
        08.12.2021 03:48
        +1

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

        пусть будет и трудно всегда точно клацать 10 разных уровней. но точно не разницу между чуть-чуть нажал и ближе к крайним положениям и середине...

        сейчас, вроде бы, даже низкопрофильные оптические появляются.


        1. TLHE Автор
          08.12.2021 16:35

          Спасибо за наводку, очень интересная вещь.

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

          Было бы интересно совместить подобные свитчи с разными эргономическими клавиатурами. Ну и, конечно, нужно пробовать, как это ощущается. Хотя звучит отлично.


  1. kvaps
    02.12.2021 15:48

    Я использую три раскладки: английскую, русскую и чешскую.
    Первые две переключаю по капслоку, постоянно.

    А вот с чешской раскладкой всё немного сложнее. По умолчанию она как стандартная QWERTZ, но с дополнительным рядом букв вместо цифр.

    Добавлять ещё одну раскладку в систему и переключать мне очень не хотелось. Поэтому решил замапить чешские символы на английскую раскладку. Таким образом Caps Lock стал для меня своего рода вторым шифтом для ввода чешских символов:

    https://github.com/kvaps/dotfiles/blob/24b6407e90aedd1a762c98485d95a2fd981b94b2/skhd/.config/skhd/skhdrc#L8-L38


    1. Jofr
      04.12.2021 08:00
      +1

      О, знакомая история. Я, правда, наоборот оставил чешскую раскладку qwerty, но допилил ее до совместимости с английской. Также сделал alt-связки, но основной набор оставил на цифровой, для слепой печати гораздо удобнее. Сейчас думаю, чтобы режимы чешская vs цифровая сделать переключаемыми по §, сделав субрежимы в раскладке.


      1. kvaps
        04.12.2021 09:56

        Неплохая идея!

        Скажите, а вы как-то решили проблему словарей? Ведь проверка правописания, как правило, работает только для одной раскладки - текущей.


        1. Jofr
          04.12.2021 10:49

          Хм, интересный вопрос, я об этом серьезно не задумывался. Для английской у меня в фоне висит Grammarly, а раскладка как раз доработанная чешская, т.е. оно тоже включено, по идее. Как граммарли с чешским не ссорится — не знаю, it just works.


  1. berez
    04.12.2021 20:30

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

    Базовый набор – ł đ ı ß ø æ œ.

    Два раза перечитал и все равно не понял. Кем составлен? По какому принципу составлен?

    Окей, у нас есть символ ł — перечеркнутое L. Используется только в польском языке. Сможем ли мы набирать тексты на польском? Нет, не сможем, т.к. так еще используются другие диакритики (ą ę ń и т. д.).
    Или вот у нас есть символ I ı — «i без точки». Используется в тюркских языках. Сможем ли мы набирать тексты, скажем. на турецком? Нет, не сможем: к символу ı идет парный символ İ i (и с точкой), который отличается от стандартного I i в латинице.
    Почему в вашем «базовом наборе» есть I ı, но нет парного ему İ i — абсолютно непонятно.


    1. TLHE Автор
      05.12.2021 13:14

      Всё перечисленное вами доступно. Моё упущение, что не смог правильно описать.

      В начале раздела мультиязычности я разделил языковые символы, отличные от базовой письменности, на две категории:

      • уникальные символы, доступные ко вводу только посредством специального символа;

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

      Раздел описывается в два этапа, в которых рассматриваются две ступени поддержки:

      • базовая возможность ввода;

      • упрощённая возможность ввода.

      В рамках рассмотрения предоставления базовой возможности нас интересуют исключительно графически уникальные символы, так как символы второй категории уже доступны ко вводу посредством комбинируемой диакритики, которая в описываемом проекте покрывает все минимально используемые языки мира.
      Из подобных уникальных символов и была составлена основа латинских языковых наборов. В основу вошли символы из первых 30 языков, по используемости в интернете.
      Соответственно, использование данной основы во всех наборах открывает именно базовую возможность ввода для всех этих языков.

      Уточнение:
      Уникальные символы, относящиеся к языкам на более низких позициях, пришлось вынести в отдельные языковые наборы, которые я честно обозначил как "позволяющие", т.к. только они, в рамках проекта, предоставляют доступ к полноценному набору текста на данных языках.
      К этой категории поддержки относятся только лишь азербайджанский, исландский (в наборе с древнеанглийским) и некоторые африканские языки. В посте я также причислял к этой категории текущий пересмотр казахской латиницы, но сейчас обнаружил, что в апреле текущего года ŋ была заменена на ñ, что меняет категорию поддержки данного языка на "упрощающую", а сам набор требует пересмотра.

      –––

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

      Уточнение:
      Для некоторых языков, с богатой диакритикой в алфавитных символах, попросту не хватило места, потому пришлось выбрать для их поддержки наиболее используемые и уникальные символы. К этим языкам относится затронутый вами польский, вместе с венгерским, латышским, литовским, чешским и словацким.
      Сейчас это решение мне не кажется правильным, и стоит пересмотреть поддержку таких языков, пожертвовав охватом "основы" в пользу данных языков.

      Но даже на текущий момент польский язык доступен к базовому вводу на 24/31 наборах, благодаря łŁ в "основе", а также имеет собственный частично-упрощающий набор с ąężó, оставляющий на комбинированный ввод только наименее используемые символы, с единственным комбинируемым акутом – ćńśź.

      –––

      ıİ, также относящийся к "основе", поддерживается во всех наборах, и в базовом виде присутствует именно в виде, противоположном ISO basic Latin. На базовой письменности у нас iI, в языковом блоке ıİ, что покрывает базовую возможность ввода.
      Дополнительные языковые наборы, относящиеся к языкам, основанным на турецком варианте латиницы, помимо возможностей упрощённого ввода также содержат опциональный переключатель, доступный на данных наборах, который выполняет небольшое перепозиционирование – iİ в буквенной части клавиатуры, ıI в языковом блоке. Работает для наборов турецкого, азербайджанского и казахской латиницы. Таким образом "основа" предоставляет базовую возможность ввода из любого набора, а специальный упрощающий набор оптимизирует ввод, с дополнительным перепозиционированием для большего удобства и согласованности символов разных регистров.

      Надеюсь, смог корректно прояснить эти моменты.