Кажется, как будто расположение не может обработать [0x1b]
- символ перед [
.
Первая строка осмеливается:
echo -e "\x1b[1m bold"
echo -e "\x1b[30m black"
echo -e "\x1b[31m red"
echo -e "\x1b[32m green"
echo -e "\x1b[33m yellow"
echo -e "\x1b[34m blue"
echo -e "\x1b[35m mag"
echo -e "\x1b[36m cyan"
echo -e "\x1b[37m white"
Для общего типа я только знаю
echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"
и из комментариев, manatwork спасибо и GypsyCosmonaut:
echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"
и не знайте различие между io-std и нормальный.
Я не видел курсив или маленький в оболочке.
Можно ввести их (благодаря manatwork также) Ctrl + v ESC в Bash, где он будет отображен как ^[
. Это означает, что целая последовательность ANSI будет похожа ^[[1m bold
или ^[[1mbold
(для предотвращения пробела прежде 'полужирный').
У многих редакторов есть проблемы с (символом) 0x1b. Альтернативы: скопировать/вставить это от где-нибудь, или использование
echo -e "\x1b[1m bold"
в ударе или Hex-редакторе.
Я предполагаю, что Вы пытаетесь сделать это в оболочке или подобный (еще, Вы просто пользовались бы этими X библиотеками непосредственно). Если так, можно найти xinput --test «device-name»
намного легче проанализировать.
К сожалению, это действительно не пишущая сценарий оболочки товарищеская встреча. Но можно заставить его работать с stdbuf
. Это работает, пока Вы не уничтожаете его, но Ваш сценарий оболочки мог передать его по каналу к read
.
Так, можно сделать что-то вроде этого:
stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
| perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
| for key in q w e r t y; do
echo -n "Please press $key: "
read -r keycode
echo "key $key = $keycode"
done
stty echo
Необходимо будет использовать корректное название клавиатуры вместо "В Переведенном Наборе 2 клавиатуры". Можно найти его с xinput list
:
anthony@Zia:~$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB-PS/2 Optical Mouse id=8 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
К сожалению, необходимо использовать определенное устройство — Вы не можете использовать базовую клавиатуру.
(Кроме того, необходимо будет найти способ уничтожить xinput в вышеупомянутом или просто содержание сами для удара Ctrl-C при вводе всех ключей. И Вы, вероятно, захотите перечислить больше ключей, чем стандартное расположение букв на клавиатуре.)
id
из клавиатуры вместо ее имени, потому что у меня были конфликты с 2 теми же именами. Такxinput test 18
где 18 идентификатор моей клавиатуры. – xavier.seignard 01.07.2013, 13:58test.c
, похож на соответствующую функцию,print_events
. Возможно, Xorg взял бы патч для добавления флага для остановки после n события? – derobert 03.07.2013, 18:07xinput --query-state
дает текущее состояние и сразу выходит. Вы могли занятый цикл это. – derobert 09.07.2013, 03:59