Что печатаются символы, когда клавиши Alt+Arrow нажаты?

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

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

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

13
25.04.2013, 23:11
3 ответа

В зависимости от того, как настроен терминал, введение Alt+Key похоже на ввод Esc, и Key вводит последовательность, таким образом, это отправляет символ ESC (иначе \e или ^[ или \033) сопровождаемый символом или последовательностью символов, отправленных после нажатия той Клавиши.

На нажатие Up большинство эмуляторов терминала отправляет любому эти три символа \033[A или \033OA в зависимости от того, являются ли они в режиме вспомогательной клавиатуры приложения или нет.

Первый действительно соответствует escape-последовательности, которая, когда произведено к терминалу, переместите курсор вверх. Если Вы делаете:

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

Вот увидишь bar записанный после foo одна строка. Если Вы делаете:

stty -echoctl; tput rmkx; read foo

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

Когда приложение как zsh или vi чтения, что последовательность символов от терминала, это интерпретирует его как действие, потому что это знает от terminfo базы данных (kcuu1 возможность), что это - escape-последовательность, отправленная на нажатие Up.

Теперь, для Alt-Up, некоторых терминалов как rxvt и его производные как eterm отправить \033 сопровождаемый escape-последовательностью для (который является \033\033[A или \033\033OA), в то время как некоторые другие как xterm или gnome-terminal имейте отдельные escape-последовательности для тех типов ключей при использовании с ключами комбинации как Высокий звук, Сдвиг, Ctrl.

Они будут обычно отправлять \033[1;3A на Alt-Up.

При отправке в терминал та последовательность также переместит курсор вверх (второй параметр (3) проигнорирован). Нет никакой соответствующей клавиши клавиатуры, таким образом, это - та же последовательность, отправленная на Alt-Up в или из режима вспомогательной клавиатуры приложения.

Теперь, ли это \033\033[A или \033[1;3A, много приложений не знают то, для чего те последовательности. terminfo база данных не поможет им, потому что нет такой возможности, которая определяет, какие символы те сочетания клавиш отправляют.

Они будут стараться изо всех сил интерпретировать ту последовательность. bash например, интерпретирует \033[1;3 в то время как escape-последовательность, ничего не знает об этом, также - ничто, сопровождаемое A. zsh, прекратит читать, как только это узнает, что нет никакой известной последовательности символов соответствия. Нет никакой escape-последовательности, что это знает, что запускается с \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

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

14
27.01.2020, 19:53

Можно использовать Crtl+v для возврата входных кодов клавиатуры. Если Вы сделаете это для клавиш со стрелками, то Вы доберетесь [[D^, [[C^, [[A^, и [[B значения. Нет никакой привязки по умолчанию для ключей Alt+arrow, таким образом, кажется, что выполненное действие печатает один только алфавитный код. Hovewer, если Вы создаете свою локальную версию readline конфигурационного файла библиотеки:

$ cp /etc/inputrc ~/.inputrc

И добавьте строку:

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

Где [1;3C входной код Высокого звука + (можно получить его тот же путь как перед использованием ярлыка Crtl+v), и перезапустите терминал затем, Crtl + ярлык возвратит Вас, текст "sometexthere" и другие ярлыки Alt+arrow прекратят возвращать символы.

Вместо этого текст можно передать связываемую команду из 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
27.01.2020, 19:53

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

Некоторые пользователи, например, для bash ожидают, что нажатие Alt пошлет клавишу с префиксом символа escape. Документированная функция "meta" (см. terminfo(5)) имеет дело с восьмым битом:

Если терминал имеет "meta key", которая действует как клавиша shift устанавливая 8-й бит любого передаваемого символа, этот факт может быть указан с помощью km. В противном случае программное обеспечение будет считать, что 8-й бит является битом четности, и он обычно будет очищен. Если существуют строки для включения и выключения этого "мета-режима" и выключения, они могут быть заданы как smm и rmm.

bash тоже знает об этом (см. ncurses FAQ), но мало кто из его пользователей интересуется этой возможностью. Тем не менее, они привыкли называть Alt "meta", даже если режим meta выключен. И rxvt, и xterm имеют эту возможность с (по крайней мере) начала 1990-х годов.

Другие пользователи (с тех пор как xterm представил эту возможность в патче #94, 1999) могут ожидать, что информация о модификаторе будет закодирована как параметр в последовательности символов, которые посылает специальная клавиша. В документации XTerm эти модифицированные клавиши назывались "PC-style" функциональными клавишами, чтобы отличить их от "VT220-style" (которые не имели модификаторов). Немодифицированная курсорная клавиша может посылать ESC[A, но также законно иметь параметр, например, ESC[5A, что приложение должно понимать как повторение этого пять раз. В первой версии xterm клавиши в стиле ПК использовали эту "5" для обозначения управления, а более поздняя версия изменила ее, чтобы избежать путаницы с количеством повторений. Итак...

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, выбрали третий путь, полагая, что большая часть информации находится в termcap. В качестве альтернативы они могли бы составить таблицу с информацией termcap/terminfo и использовать интерфейс, дающий наилучшую информацию. xterm делает это для функции tcap-query , предоставляя vim фактические назначения функциональных клавиш.

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

Дальнейшее чтение:

3
27.01.2020, 19:53

Теги

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