This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-goldedplus/contrib/Unix/ged-vttest-lite.py

131 lines
6.3 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# vim:set sw=4 ts=8 et fileencoding=utf8::Кодировка:UTF-8[АБЁЪЯабёъя]
#
# Авторское право (с) 2015, Сергей Леонтьев, leo@sai.msu.ru
#
# Разрешается повторное распространение и использование как в виде
# исходника так и в двоичной форме, с модификациями или без, при
# соблюдении следующих условий:
#
# 1. При повторном распространении исходного кода должно оставаться
# указанное выше уведомление об авторском праве, этот список условий и
# нижеследующий отказ от гарантий.
#
# 2. При повторном распространении двоичного кода должно
# воспроизводиться указанное выше уведомление об авторском праве, этот
# список условий и нижеследующий отказ от гарантий в документации
# и/или в других материалах, поставляемых при распространении.
#
# 3. Ни название Крипто-Про, ни имена его сотрудников не могут быть
# использованы в качестве поддержки или продвижения продуктов,
# основанных на этом ПО без предварительного письменного разрешения.
#
# ЭТО ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ
# И/ИЛИ ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА
# ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ
# ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И
# ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ
# СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В УСТНОЙ ФОРМЕ, НИ ОДИН
# ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ
# ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО
# ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ,
# СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ
# ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО
# НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ
# НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ,
# ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
# ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О
# ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
#
#
# Простое тестирование терминала на соответствие terminfo
#
import curses, traceback
from curses import *
def test(y, x, ukey, ckeys, lckey=1):
m = 2
of = 13
mysc.addstr(y,x,ukey+": ");
mysc.addstr(y+m,m,"Press character 'n' twice with pause to next test")
n = 0
while n < 2:
key = mysc.getkey()
for i in range(lckey):
mysc.timeout(300)
try:
key += mysc.getkey()
except:
pass
mysc.timeout(-1)
found = False
for k in ckeys:
if k == key:
found = True
if found:
mysc.addstr(y,x+of," ")
mysc.addstr(y,x+of,"Ok: " + key)
break
elif "n" == key:
n += 1
else:
mysc.timeout(300)
keys = "'" + key
try:
while 1:
key = mysc.getkey()
keys += key
except:
pass
keys += "'"
mysc.timeout(-1)
mysc.addstr(y,x+of," ")
mysc.addstr(y,x+of,"Fail: " + keys)
mysc.addstr(y+m,m," ")
#==========================================================
# MAIN LOOP
#==========================================================
try:
mysc = initscr()
noecho()
term = termname().decode("ascii")
shift = 12
shift2 = 12
for t in [ "xterm-old", "xterm-r5", "xterm-r6", "screen.xterm-r6",
"rxvt", "screen.rxvt", "putty", "screen.putty", "linux",
"screen.linux" ]:
if t == term[0:len(t)]:
shift = 10
mysc.keypad(1)
mysc.clear()
mysc.border(0)
mysc.addstr(1,8,term + " " + str(mysc.getmaxyx()))
test(3,3,"F3",["KEY_F(3)"])
test(3,40,"Shift+F3",["KEY_F(" + str(3+shift) + ")"])
test(4,3,"F5",["KEY_F(5)"])
test(4,40,"Ctrl+F5",["KEY_F(" + str(5+shift+shift2) + ")"])
test(5,3,"F9",["KEY_F(9)"])
test(5,40,"Alt-F9",["KEY_F(" + str(9+2*(shift+shift2)) + ")"])
test(6,3,"Left",["KEY_LEFT"])
test(6,40,"Ctrl+Left",["kLFT5"])
test(7,3,"Up",["KEY_UP"])
test(7,40,"Shify+Up",["KEY_SR"])
test(8,3,"PgUp",["KEY_PPAGE"])
test(8,40,"Shift+PgUp",["KEY_SPREVIOUS"])
test(9,3,"Shift+Tab",["KEY_BTAB"])
test(9,40,"Alt+TAB",["\033\t"], 2)
test(10,3,"Alt+BackSpace",["\033\b","\033KEY_BACKSPACE"],2)
test(10,40,"Alt+Enter",["\033\n","\033KEY_ENTER"],2)
test(11,3,"Alt+Z",["\033z","\033Z"],2)
test(11,40,"Alt+\312",["\033q","\033Q","\033\312","\033\352"],2)
mysc.addstr(23,2,"Press <CR> to exit")
mysc.getch()
finally:
endwin()
traceback.print_exc()