Які символи друкуються при натисканні клавіш Alt + Arrow?


13

Коли я натискаю AltUp, Aдрукується на екран терміналу. Те саме трапилось, коли я натискав, AltDownале Bзамість цього надруковано.

Інші персонажі, які я зрозумів;

AltLeft= Dі AltRight=C

Яке призначення цих команд?

Відповіді:


14

Залежно від того, як налаштований термінал, введення тексту Alt+Keyсхоже на введення послідовних клавіш Escі Key, тому він надсилає символ ESC (ака \eабо ^[або \033), а потім символ або послідовність символів, що надсилаються після натискання на це Key.

Після натискання Upбільшість термінальних емуляторів надсилають або три символи, \033[Aабо \033OAзалежно від того, перебувають вони в режимі клавіатури програми чи ні.

Перший відповідає послідовності евакуації, яка при виході в термінал переміщує курсор вгору. Якщо ти зробиш:

printf '\nfoo\033[Abar\n\n'

Ви побачите barнаписане після fooодного ряду вгору. Якщо ти зробиш:

stty -echoctl; tput rmkx; read foo

Ви побачите, що клавіші зі стрілками переміщують курсор навколо.

Коли програма любить zshабо viчитає цю послідовність символів з терміналу, вона інтерпретує її як дію "Вгору", оскільки з бази даних терміно ( kcuu1здатності) вона знає, що це послідовність виходу, що надсилається при натисканні Up.

Тепер, для Alt-Up, деякі термінали , як rxvtі її похідні , такі як etermпосил , \033за яким слід послідовність для Up(тобто \033\033[Aабо \033\033OA), в той час як деякі інші , подібні xtermабо gnome-terminalмають окремі послідовностей для цих типів ключів при використанні комбінованих ключів , таких як Alt, Shift, Ctrl.

Ті, як правило , відправити \033[1;3Aна Alt-Up.

Після надсилання в термінал ця послідовність також перемістить курсор вгору (другий параметр (3) ігнорується). Немає відповідної клавішної клавіатури , тому це та сама послідовність, яку надсилається Alt-Upв режимі клавіатури програми чи поза ним .

Тепер, чи це, \033\033[Aчи \033[1;3Aбагато додатків не знають, для чого ці послідовності. База даних terminfo їм не допоможе, оскільки немає такої можливості, яка б визначала, які символи надсилають ці комбінації клавіш.

Вони постараються інтерпретувати цю послідовність. bashнаприклад, інтерпретуватиме \033[1;3як послідовність втечі, нічого про це не знає, тому нічого не робить A. zsh, перестане читати, як тільки дізнається, що немає відомої послідовності відповідних символів. Немає послідовності евакуації, яку вона знає, що починається з, \033[1тому вона пропустить це і прочитає решту: ;3Aі вставимо її в редактор рядків.

Багато додатків , такі як vi, zshабо на readlineоснові з них , як gdbі bash(хоча остерігайтеся bashвикористовує модифіковану версію readline) дозволяють додавати прив'язки для будь-якій послідовності символів.

Наприклад, у zsh, можливо, ви захочете зв’язати Alt-Up, Alt-Downяк-от:

bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward

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


3

Ви можете використовувати Crtl+ vдля повернення вхідних кодів вашої клавіатури. Якщо ви зробите це для клавіш зі стрілками, ви отримаєте [[D^, [[C^, [[A^і [[Bзначення. Не існує жодних прив'язок за замовчуванням для Altклавіш зі стрілками, тому, схоже, що виконувана дія - це друк лише буквеного коду. Hovewer, якщо ви створюєте локальну версію файлу конфігурації бібліотеки читання:

$ cp /etc/inputrc ~/.inputrc

І додайте рядок:

"\e[1;3C": "sometexthere"

Де [1;3Cвводиться код Alt+ (ви можете отримати його так само, як раніше, ніж використовувати Crtl+ vярлик) і перезапустіть свій термінал, тоді Crtl+ ярлик поверне вам текст "деякийтекст", а інші Alt+ ярлики стрілок перестануть повертати символи.

Замість тексту ви можете передати bindable команду з http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands, як

"\e[1;3C": unix-line-discard

мати такий же ефект, як Crtl+ u(видалити рядок).

Більше інформації тут: http://cnswww.cns.cwru.edu/php/chet/readline/readline.html


3

AltКлюч часто використовується в якості мета - модифікатора. Курсорні та функціональні клавіші називаються спеціальними клавішами, оскільки вони можуть надсилати кілька символів - і надіслані символи можуть бути змінені.

Деякі користувачі, наприклад, bashочікують, що натискання Altнадішле клавішу з префіксом символу втечі. Документована "мета" функція (див. terminfo(5)) Стосується восьмого біта:

Якщо в терміналі є "мета-клавіша", яка виконує функцію клавіші зсуву, встановлюючи 8-й біт будь-якого переданого символу, цей факт можна вказати за допомогою km. В іншому випадку програмне забезпечення передбачає, що 8-й біт є паритетом, і він зазвичай буде очищений. Якщо рядки існують, щоб увімкнути та вимкнути цей "мета режим" , їх можна надати як smmі rmm.

bashпро це теж знає (див. Ncurses FAQ ), але мало хто з його користувачів цікавиться функцією. Тим не менш, вони звикли називати Alt"мета", навіть якщо мета-режим вимкнено. І rxvt, і xterm мали цю особливість з (принаймні) початку 1990-х.

Інші користувачі (з моменту xtermвведення функції у патчі № 94, 1999 ) можуть очікувати, що інформація модифікатора буде закодована як параметр у послідовності символів, яку надсилатиме спеціальний ключ. Документація XTerm називає ці модифіковані клавіші функціональними клавішами "стиль ПК", щоб відрізнити їх від "VT220-стилю" (у яких не було модифікаторів). Немодифікований ключ курсору може надіслати ESC[A, але також законним є параметр , наприклад ESC[5A, який програма повинна розуміти як повторення цього п'яти разів. Перша версія xterm«S PC-стиль ключів використовується , що" 5 "для позначенняcontrol, а пізніша версія змінила його, щоб уникнути плутанини з повторним підрахунком. Так...

ESC[5A

пропонує програмі перемістити курсор вгору на 5 рядків, поки

ESC[1;5A

пропонує перейти вгору на один рядок, повідомляючи програмі, що controlнатиснута клавіша.

Корисні комбінації містяться в базі даних ncurses terminfo з 2004 року :

# 2004-07-17
#       * add xterm-pc-fkeys -TD

База даних terminfo показує поточну версію xterm + pcfkeys з коментарем, що показує, як модифікуються модифікатори:

# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
#    Code     Modifiers
#  ---------------------------------
#     2       Shift
#     3       Alt
#     4       Shift + Alt
#     5       Control
#     6       Shift + Control
#     7       Alt + Control
#     8       Shift + Alt + Control
#  ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.

(Alt і meta не обов'язково є одним і тим же ключем). Це будівельний блок (у свою чергу складається з інших будівельних блоків), з якого складається xtermтермінальний опис. Він використовує розширення, яке надається в ncurses з 1999 року, що дозволяє визначати користувачі імена. Оскільки termcap підтримує лише 2-символьні імена та 1023-байтні описи, не було підстав робити ці розширені імена доступними через інтерфейс termcap . Вони легко доступні програмам, що використовують інтерфейс terminfo .

Тепер виникає складність: є кілька способів програми визначити, що таке ключова послідовність:

  1. проаналізуйте послідовність символів повністю
  2. частково проаналізуйте його та викиньте controlмодифікатор, якщо не потрібен
  3. просто порівняйте послідовність символів зі словником, сподіваючись визначити значення таким чином.

Мало хто з програм зробив би першу; деякі текстові редактори будуть робити другий ( на самом деле, я зробив це для dedв кінці 1980 - х років ). Розробники таких додатків, як bashобрали третій маршрут, припускаючи, що більшість інформації знаходиться у терміні cap . Крім того, вони могли вирішити скласти таблицю з інформацією termcap / terminfo та використовувати інтерфейс, який дає найкращу інформацію. xtermробить це для функції tcap-запиту , надаючи vimфактичні призначення функціональної клавіші.

Оскільки жодна з рядків, яка bashпорівнюється з відповідними рядкам, які вона отримує, вона може заплутатися, влаштувавшись на часткові збіги (наприклад, сам символ втечі).

Подальше читання:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.