Проблема, которую я пытаюсь решить, состоит в том, чтобы получить пару ch
,att
, представляющую символ и связанный с ним атрибут, отображаемый в данный момент в некоторой заданной позиции.
Теперь, когда отображаемый символ не является широким (т. е. символом ASCII), метод .inch
выполняет работу вплоть до корректной маскировки результатов. Проблема возникает, когда отображаемый символ широкий. Точнее я знаю, как получить данный символ через .instr
, однако эта функция не возвращает никакой информации об атрибуте.
Поскольку, насколько мне известно, не существует специальной функции для получения одного только атрибута, моей первой попыткой было использовать .inch
, отбросить 8 младших бит и интерпретировать результат как атрибут. Казалось, что это сработало до некоторой степени, но перепроверив, я понял, что чтение греческих букв (например, u"u\03b1"
) без атрибута таким образом возвращает att = 11.0000.0000
вместо 0
. Есть ли лучший способ подойти к проблеме?
РЕДАКТИРОВАТЬ, минимальный пример для Python3
import curses
def bin(x):
out = ''
while x > 0:
out = str(x % 2) + out
x = x // 2
return out
def main(s):
s.addstr(1, 1, u'\u03b1')
s.refresh()
chratt = s.inch(1, 1)
att = chratt & 0xFF00
s.addstr(2, 1, bin(att))
s.refresh()
while True:
pass
curses.wrapper(main)