LINUX.ORG.RU

termcap, странные значения


0

0

Доброго времени суток народ. Сталкнулся с проблемой при работе с termcap. Имеется простая программка, которая для начала просто выводит ескейп последовательности для таких клавиш как up, down, left, right, home

tgetent (term_buffer, termtype);

char *tmp = tgetstr («up», &here); int i = 0; printf(«up\n»); for (i =0 ; i < strlen (tmp); i++) { printf («%d\n», tmp); }; printf(«left\n»); tmp = tgetstr («le», &here);

for (i =0 ; i < strlen (tmp); i++) { printf («%d\n», tmp); }; printf(«home\n»); tmp = tgetstr («ho», &here);

for (i =0 ; i < strlen (tmp); i++) { printf («%d\n», tmp); }; printf(«right\n»); tmp = tgetstr («nd», &here);

for (i =0 ; i < strlen (tmp); i++) { printf («%d\n», tmp); };

printf(«down\n»); tmp = tgetstr («do», &here);

for (i =0 ; i < strlen (tmp); i++) { printf («%d\n», tmp); };

получаю странные значения для left и down вывод получается следующий: up 27 91 65 left 8 home 27 91 72 right 27 91 67 down 10

Ктонить может объяснить почему для left и down такие значение, не похожие ни разу на эскейп последовательность? и как получить правильные, для того-же down должно быть 27, 91, 66, а не 10.

Куда хоть копать?

$ echo -ne 'asdf\x8'; sleep 5

и посмотри где курсор, он будет под 'f'. таким образом код 8 передвигает курсор влево

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot

Это хорошо, но я хотел добиться несколько другого.

Программа будет работать на куче разных терминалов. Пользователь нажимает к примеру клавишу down (у меня в xterm 27 91 66) и мне требуется соответствующим образом на неё реагировать. Я хотел получить эти самые сканкоды для текущего терминала, чтобы с ними сравнивать нажатую клавишу и правильно реагировать.

Или я вообще не туда копаю?

zed-chaos
() автор топика

>И как получить правильные, для того-же down должно быть 27, 91, 66, а не 10.

А как вы определили, что для down должна быть 27, 91, 66 ?

mky ★★★★★
()
Ответ на: комментарий от mky

Кажется вместо «do» надо использовать «kd».

«do» это _команда_ перемещающая курсор вниз «kd» это _код клавиши_ «стрелка вниз», но у меня он например не совпадает с тем что на терминал шлётся при нажатии стрелки, termcap возвращает для kd - 1b 4f 42 а на терминал шлётся:

$ cat | hexdump -e '1/1 "%02x "'
^[[B
1b 5b 42

хз...

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot

>на терминал шлётся

в смысле «с терминала приходит»?

Это в xterm не совпадает, а в текствой консоли совпадает. \E[B это стандартный ANSI терминал, а почему в xterm'e должно быть \EOB, а шлётся \E[B --- непонятно.

mky ★★★★★
()
Ответ на: комментарий от mky

если поставить в настройках Konsole (Настройка — Клавиатура: XTerm (XFree 3.x.x)) то будет так как описано в terminfo \EOB (по умолчанию стоит (XFree 4.x.x))

mc понимает и такой код и такой, хз....

Eshkin_kot ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.