classification
Title: Add support for extended color functions in ncurses 6.1
Type: enhancement Stage: commit review
Components: Extension Modules Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Jeffrey.Kintscher, hpj, lukasz.langa, ned.deily, serhiy.storchaka, yan12125
Priority: critical Keywords: patch

Created on 2019-05-21 02:43 by Jeffrey.Kintscher, last changed 2020-08-04 03:51 by ned.deily.

Pull Requests
URL Status Linked Edit
PR 13534 closed Jeffrey.Kintscher, 2019-05-24 05:30
PR 17536 merged python-dev, 2019-12-09 16:59
Messages (5)
msg342974 - (view) Author: Jeffrey Kintscher (Jeffrey.Kintscher) * Date: 2019-05-21 02:43
ncurses 6.1 adds extended color functions to support terminals with 256 colors (e.g. xterm-256color). The extended functions take color pair values that are signed integers because the existing functions only take signed 16-bit values.

My goal with this issue is to transparently use the ncurses extended color functions when compiling with ncurses 6.1 or newer. This should be straightforward and transparent to curses module users because the short int restrictions are in the ncurses library and not in the curses module API.

This will fix the problems observed in issue #36630 but is broader, which is why I created a separete issue. I will work on this and post a PR whit it is ready.
msg343336 - (view) Author: Jeffrey Kintscher (Jeffrey.Kintscher) * Date: 2019-05-24 02:17
A new function called curses.has_extended_color_support() will indicate whether the linked ncurses library provides extended color support. It returns true if curses.h defines NCURSES_EXT_COLORS and NCURSES_EXT_FUNCS, indicating that the extended color functions are available. This seems more useful to developers than using an indirect method like trying to set a color-pair greater than 0x7fff and checking for an exception to indicate lack of support.

At first glance, has_extended_color() seems like a better name because it is similar to has_colors(), but the two functions have very different semantics that could confuse developers. has_extended_color_support() indicates available functionality in the underlying ncurses library that is set when the interpreter is compiled and linked, while has_curses() indicates available functionality of the current terminal at run-time.
msg343338 - (view) Author: Jeffrey Kintscher (Jeffrey.Kintscher) * Date: 2019-05-24 02:36
Corrected typos in msg343336 for clarity:

At first glance, has_extended_colors() seems like a better name because it is similar to has_colors(), but the two functions have very different semantics that could confuse developers. has_extended_color_support() indicates available functionality in the underlying ncurses library that is set when the interpreter is compiled and linked, while has_colors() indicates available functionality of the current terminal at run-time. The name has_extended_colors() would imply that it indicates run-time terminal functionality and not static library functionality.
msg374527 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2020-07-28 20:56
PR 17536 was based on the original PR 13534 and has now gone through a couple of rounds of code review. Other than a missing doc change, everything in PR 13534 is covered (and updated) in PR 17536 so I've closed the original PR.  Other than adding the doc change and a final core developer review of the last requested changes, this *should* be good to go.

We really need to get this merged since, without it, Python builds fail with the newer versions of ncurses now in most distributions.  Once it is merged into master for 3.10, Ɓukasz can provide direction about whether and when it should be backported to 3.9 and/or 3.8.
msg374791 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2020-08-04 03:51
New changeset da4e09fff6b483fe858997da5599c25397107ca1 by Hans Petter Jansson in branch 'master':
bpo-36982: Add support for extended color functions in ncurses 6.1 (GH-17536)
https://github.com/python/cpython/commit/da4e09fff6b483fe858997da5599c25397107ca1
History
Date User Action Args
2020-08-04 03:51:43ned.deilysetmessages: + msg374791
2020-07-28 21:11:34ned.deilylinkissue36630 superseder
2020-07-28 20:56:00ned.deilysetpriority: normal -> critical
versions: + Python 3.9, Python 3.10
nosy: + ned.deily, serhiy.storchaka, lukasz.langa, hpj

messages: + msg374527

stage: patch review -> commit review
2019-12-09 16:59:31python-devsetpull_requests: + pull_request17013
2019-05-24 09:29:43Jeffrey.Kintschersetcomponents: + Extension Modules, - Library (Lib)
2019-05-24 05:32:21Jeffrey.Kintschersettype: enhancement
2019-05-24 05:30:41Jeffrey.Kintschersetkeywords: + patch
stage: patch review
pull_requests: + pull_request13448
2019-05-24 03:31:16yan12125setnosy: + yan12125
2019-05-24 02:36:12Jeffrey.Kintschersetmessages: + msg343338
2019-05-24 02:17:55Jeffrey.Kintschersetmessages: + msg343336
versions: - Python 3.9
2019-05-21 02:43:51Jeffrey.Kintschercreate