Какой $TERM использовать, чтобы иметь как 256 цветов, так и события перемещения мыши в проклятиях Python?

В настоящее время, если я установил переменную среды TERM на «xterm-1003», я могу получать события перемещения мыши, но я получаю дрянные цвета и curses.can_change_color() == False

os.environ['TERM'] = 'xterm-1003'
...
curses.mousemask(curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION)
...
while True:
    event = screen.getch()
    if event == curses.KEY_MOUSE:
        # I get nice events whenever I move the mouse (no click required)
        _, mx, my, _, _ = curses.getmouse()

и если я установлю TERM env var на «xterm-256color», я получу красивую цветовую палитру плюс curses.can_change_color() == True, однако я не получаю события мыши, пока не нажму кнопку!

>ls /usr/share/terminfo/x/ 

отчеты

xfce           xterm-256color  xterm-hp      xterm-r5     xterm-xf86-v32   xterm-xfree86
xterm          xterm-88color   xterm-new     xterm-r6     xterm-xf86-v33   xterm-xi
xterm-1002     xterm-8bit      xterm-nic     xterm-sco    xterm-xf86-v333  xterms
xterm-1003     xterm-basic     xterm-noapp   xterm-sun    xterm-xf86-v40
xterm-16color  xterm-bold      xterm-old     xterm-vt220  xterm-xf86-v43
xterm-24       xterm-color     xterm-pcolor  xterm-vt52   xterm-xf86-v44

Ни один из тех, что я пробовал, не поддерживает события curses.can_change_color() == True и перемещения мыши. Есть ли способ получить их оба, установив соответствующее значение $TERM или каким-либо другим способом?

Благодарю вас!


person Wulfire    schedule 12.03.2015    source источник


Ответы (1)


Вы всегда можете сделать свой собственный, используя infocmp (чтобы показать содержимое запись) и tic (для составления записи). Если у вас нет разрешения на запись в системную область, она переходит в $HOME/.terminfo

Начните со сравнения xterm-1003 и xterm-256color:

> infocmp -x xterm-1003 xterm-256color
comparing xterm-1003 to xterm-256color.
    comparing booleans.
        ccc: F:T.
    comparing numbers.
        colors: 8, 256.
        pairs: 64, 32767.
    comparing strings.
        initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
        setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
        setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
        setb: '\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.
        setf: '\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m', NULL.
        XM: '\E[?1003%?%p1%{1}%=%th%el%;', NULL.

По сути, все, что вас интересует, это добавить возможность XM к копии xterm-256color.

So...

  1. infocmp -x xterm-256color >foo
  2. отредактируйте foo, добавив строку XM
  3. tic -x foo

Параметр "-x" необходим для tic для компиляции возможности XM, которая является расширенной (определяемой пользователем) возможностью, которую ncurses распознает, как указано в комментариях для терминальная база данных.

person Thomas Dickey    schedule 13.03.2015
comment
Почему этот ответ никогда не был принят? У меня есть точная проблема (хотя и с другим языком программирования), и она решает проблему, детализирована и содержит ссылки на ссылки для исследований. - person Norman B. Lancaster; 01.01.2017