Клавиатура, повторно отображающаяся с большим количеством модификаторов

От Paul Vick блог:

  • Это удаляет любые инструкции по NOP, что мы иначе испустили бы для помощи в отладке. Когда оптимизация выключена (и отладочная информация включена), компилятор испустит инструкции по NOP для строк, которые не имеют никакого фактического IL связанным с ними, но которые Вы могли бы хотеть поставить точку останова. Наиболее распространенным примером чего-то вроде этого был бы “End If“ оператора “If” - нет никакого фактического IL, испускаемого для Конца, Если, таким образом, мы не испускаем NOP, отладчик не позволит Вам установить точку останова на нем. Включение оптимизации вынуждает компилятор не испустить NOPs.

  • Мы делаем простой анализ базисного блока сгенерированного IL для удаления любых блоков мертвого кода. Таким образом, мы разбиваем каждый метод на блоки IL, разделенного командами перехода. Путем выполнения быстрого анализа того, как блоки находятся во взаимосвязи, мы можем определить любые блоки, которые не имеют никаких ответвлений в них. Таким образом мы можем выяснить блоки кода, которые никогда не будут выполняться и могут быть опущены, делая блок немного меньшим. Мы также делаем некоторую незначительную оптимизацию ответвления в этой точке также - например, если Вы GoTo другой Оператор перехода, мы просто оптимизируем первый GoTo для перехода к цели второго GoTo.

  • Мы испускаем DebuggableAttribute с набором IsJITOptimizerDisabled ко Лжи. В основном это позволяет JIT во время выполнения оптимизировать код, как это считает целесообразным, включая переупорядочение и встраивание кода. Это произведет более эффективный и меньший код, но это означает, что попытка отладить код может быть очень сложной (как любой, кто попробовал его, скажет Вам). Фактический список того, что оптимизация JIT, является чем-то, что я не знаю - возможно, кто-то как Chris Brumme вмешается в какой-то момент на этом. Длинное и за исключением него - то, что переключатель оптимизации включает оптимизацию, которая могла бы сделать точки останова установки и продвижение через Ваш код тяжелее.

7
задан Bill the Lizard 14 October 2009 в 12:15
поделиться

1 ответ

Для каждого определения ключевого кода вы можете иметь до восьми символов клавиш. Они организованы попарно в четыре группы. Существует семейство символов клавиш ISO_Next_Group , ISO_Prev_Group , ISO_First_Group и ISO_Last_Group , которые при нажатии циклически циклически выводят символы клавиш, нажимая ключевой среди ключевых групп. С помощью этих клавиш можно получить несколько макетов.

В качестве примера предположим, что ISO_Next_Group привязана к коду клавиши и назначена модификатору, затем для этого определения:

keycode 53 = x X   Greek_xi Greek_XI   multiply U2297   U24E7 U24CD

нажатие клавиши на клавиатуре с меткой «X» при вводе «x». После нажатия клавиши ISO_Next_Group я получаю «ξ». Нажав ее еще раз, я получаю «×». Повторное нажатие «ⓧ». Наконец, четвертое нажатие кнопки вернет все в норму.


Проведя несколько дней (потому что у Xkb¹ ужасная документация; наконец нашел хорошее руководство здесь ), вы можете создать файл определения символа с записями вот так:

    key <SPCE> {
// Level  I      II       III    IV
        [ space, space,   U2395, U2592 ],    // Group 1
        [ U2423, emspace, U2420, hairspace ] // Group 2
    };

    key <RALT> {
        [ Mode_switch, Mode_switch ]
    };

    key <RCTL> {
        [ ISO_Level3_Shift, ISO_Level3_Shift ]
    };

Скобки заключают одну группу. Обычно активна первая группа. Группа может быть временно увеличена на единицу с помощью ISO_Group_Shift , также известного как Mode_switch . Внутри группы испускаемые символы определяются на возрастающих уровнях. Уровень I с простым нажатием клавиш. Shift добавляет единицу к текущему уровню. ISO_Level3_Shift устанавливает уровень на III.

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

пробел ⟨⟩ U + 0020 ПРОБЕЛ
Shift + пробел ⟨⟩ U + 0020 ПРОБЕЛ
R. Alt + пробел ⟨␣⟩ U + 2423 ОТКРЫТЬ КОРОБКУ
R. Alt + Shift + пробел ⟨⟩ U + 2003 EM SPACE
R. Ctl + пробел ⟨⎕⟩ U + 2395 APL ФУНКЦИОНАЛЬНЫЙ СИМВОЛ QUAD
R. Ctrl + Shift + пробел ⟨▒⟩ U + 2592 СРЕДНИЙ ОТТЕНК
R. Alt + R. Ctl. + Пробел ⟨␠⟩ U + 2420 СИМВОЛ ДЛЯ ПРОСТРАНСТВА
R. Alt + R. Ctrl + Shift + пробел ⟨⟩ U + 200A HAIR SPACE

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

11
ответ дан 6 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: