Почему важен порядок, в котором используются сочетания клавиш?

Поведение программы ls не зависит от вызывающей ее оболочки. Если вы наблюдаете разное поведение ls в bash и в zsh, это потому, что у вас есть псевдоним (или функция) с именем ls в одной из оболочек, но нет в другой. Поведение, которое вы наблюдаете в zsh, соответствует тому, что делает ls , поэтому вы должны вызывать его с дополнительными параметрами в bash.

Вы могли использовать псевдонимы с ls до ls -H или ls -L , чтобы разыменовать символические ссылки. Это плохая идея, потому что тогда вы не сможете получить информацию о самих символических ссылках, кроме как обойдя псевдоним ( \ ls ).

Если файл представляет собой символическую ссылку на каталог, вы можете воздействовать на каталог, а не на файл, добавив косую черту в конце: ls -l symboliclink / эквивалентно ls -l символическая ссылка /. . См. Когда символическая ссылка рассматривается как объект, на который она ссылается, и как символическая ссылка?

2
13.09.2017, 11:15
2 ответа

Поскольку действия, не являющиеся модификаторами -, активируются при нажатии клавиши.

На самом деле это почти не связано с аппаратной частью клавиатуры. Клавиатуры USB и PS/2 в этом отношении работают одинаково. В оборудовании нет ничего , что делало бы так -так называемые "клавиши-модификаторы" особенными. Любая клавиша , за одним исключением, может быть клавишей-модификатором или нет.

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

Например, в раскладке клавиатуры FreeBSD можно найти такие строки, как эта:

#                                                         alt
# scan                       cntrl          alt    alt   cntrl lock
# code  base   shift  cntrl  shift  alt    shift  cntrl  shift state
# ------------------------------------------------------------------
…
029   lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl  lctrl   O
…
042   lshift lshift lshift lshift lshift lshift lshift lshift  O
…
054   rshift rshift rshift rshift rshift rshift rshift rshift  O
…
056   lalt   lalt   lalt   lalt   lalt   lalt   lalt   lalt    O
…
083   del    '.'    '.'    '.'    '.'    '.'    boot   boot    N
…

029, 042, 054 и 056 — это коды клавиатуры (, приведенные в общую систему из номеров использования USB HID и номеров скан-кодов PS/2 ), но это lctrl, lshift, rshiftиlaltдействия на карте, определяющие эти клавиши как клавиши-модификаторы. Определите их с другими действиями и переместите эти действия в другое место, как это действительно делают некоторые из -из -карт -коробки FreeBSD, а совершенно другие ключи являются модификаторами.

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

Действие , когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора ,который (просто говоря )представляет собой набор флагов, записанных в операционной системе, которые фиксируют, какие модификаторы в данный момент «включены». Как видно из заголовков столбцов на карте клавиатуры, текущее состояние модификатора — с точки зрения флагов «включено» для состояний «shift», «altgr», «control» и «alt» — влияет на действие дальнейшие нажатия клавиш сопоставляются.

В строке с кодом ключа 083, который выгравирован . del на цифровой клавиатуре, вы можете видеть, что только если текущее состояние модификатора не ниже «alt cntrl», сопоставленное действие будет boot.

Драйверы клавиатуры активируют действия-модификаторы при получении события нажатия клавиши или отпускания клавиши . Однако другие действия вступают в силу только после нажатия клавиши нажатия или автоповтора . Так обстоит дело, например, с действием boot. Только если происходит нажатие клавиши или автоповтор для клавиши 083 и , текущее состояние модификатора уже "alt cntrl"/"alt cntrl shift", происходит действие boot.

Из этого должно быть очевидно, что для перевода текущего состояния модификатора операционной системы в это состояние, в первую очередь, действия laltи lctrl/ rctrlдолжны уже произойти . ], с помощью первого нажатия клавиш, которые им назначены. (Система FreeBSD также позволяет модификатор блокировать в дополнение к обычной системе модификаторов сдвигов , хотя только две раскладки клавиатуры из -из -поля -использовать их вообще. Стандарт клавиатуры ISO также допускает защелки-модификаторы , но FreeBSD не предоставляет этот механизм.)

FreeBSD, как я уже сказал, является здесь примером. Но большинство операционных систем с устройствами PS/2 или USB HID,от MS/PC -DOS (, где текущим состоянием модификатора является хорошо -известный байт в памяти )до Windows NT (, где раскладки клавиатуры представляют собой библиотеки DLL режима ядра -, содержащие код и данные ), работают примерно так.

Дополнительная литература

7
27.01.2020, 21:52

Точно так же, как нажатие a , а затем Shift не дает вам A, нажатие Delete перед Alt и Ctrl не отправляет правильные коды клавиш.

Клавиши-модификаторы необходимо нажимать перед клавишей, которую они модифицируют. Клавишами-модификаторами в данном случае являются Alt и Ctrl , тогда как Delete не является клавишей-модификатором.

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

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

2
27.01.2020, 21:52

Теги

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