проблемы xmodmap и несоответствия больше чем с 4 альтернативными символами на ключ

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

calc () {
  emulate -L zsh; setopt extended_glob
  local line
  bc <<EOF |
scale=3
$@
EOF
    while read line; do
      if [[ $line = *.* ]]; then
        print -r -- ${${${line%%0##}/#%0#./0}%.}
      else
        print -r -- $line
      fi
    done
}

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

  • ${…%%0##} удаляет самое долгое суффиксное соответствие 0##, т.е. конечные нули.
  • ${…/#%0#./0} устанавливает строку на 0 если это состоит только (#% префикс к шаблону в ${VAR/PATTERN/REPLACEMENT}) из дополнительного продвижения обнуляет (0#) и .
  • ${…%.} снимает изоляцию с запаздывания . если таковые имеются.

Я думаю, разделяя шаги, более ясно.

if [[ $line = *.* ]]; then line=${line%%0##}; fi
if [[ $line = . ]]; then line=0; else line=${line%.}
print -r -- $line
7
01.04.2014, 09:46
1 ответ

I ' Я лучше отвечу на свой вопрос для дальнейшего использования.

После небольшого углубленного исследования я обнаружил, что xmodmap на самом деле устарел и в основном исправлен для клавиатуры xkb модель.Модель xkb не использует линейный массив альтернатив, но разбивает макеты на группы , причем каждая группа имеет пару символов с разными уровнями сдвига. Определения xmodmap заполняют записи в очень забавном порядке: группа 1, уровень 1,2, группа 2, уровень 1,2, группа 1, уровни 3 .... "макеты" и обычно не доступны с модификаторами, а с переключением. Исключением является символ Mode_switch , который я использовал, но он обращается только к группе 2.

Все было бы хорошо, за исключением того, что ключи имеют типы . Каждый ключ определяется макетом как TWO_LEVEL , FOUR_LEVEL , FOUR_LEVEL_ALPHANUMERIC и т. Д., И каждый уровень может иметь различное представление о том, какие модификаторы соответствуют каким уровням. . Я предполагал, что поведение (8 уровней, все комбинации) было на самом деле LOCAL_EIGHT_LEVEL , которое вообще не использовалось макетом. Таким образом, в случае кода клавиши 51 , значение по умолчанию было фактически TWO_LEVEL , и xmodmap заполнил 3 группы 6 клавишами вместо добавления 6 уровней к 1-й группе. В 3-ю группу не попал модификатор Mode_switch . Использование другого ключа привело к другому поведению, поскольку предопределенный тип отличался.

Как и в случае с повторениями в распечатке xmodmap , я не совсем уверен, что происходит (я распечатал определения xkb , и все было в порядке), но я не удивлен тем, что ошибки возникают при отображении многомерного массива переменной длины в один список симкодов. Выходные данные в любом случае не отражают фактическое состояние.

В заключение, xmodmap - это зло . Никогда не используйте это. Его поведение в лучшем случае неустойчиво и неопределенно. Он не делает того, что говорит. Создавайте свои собственные карты xkb . Повторно используйте большую часть макета , включая -ing и добавьте необходимые изменения.

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


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


Материалы для чтения:

6
27.01.2020, 20:18

Теги

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