coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Unset ICRNL in CBREAK mode in stty(1) following X/Open Curses


From: Pádraig Brady
Subject: Re: Unset ICRNL in CBREAK mode in stty(1) following X/Open Curses
Date: Sun, 21 Jan 2024 14:02:23 +0000
User-agent: Mozilla Thunderbird

On 21/01/2024 04:01, Soumendra Ganguly wrote:
Respected maintainers,

In X/Open Curses, Issue 7 (
https://pubs.opengroup.org/onlinepubs/9699909599/toc.pdf), the following is
mentioned about the cbreak mode:

This mode achieves the same effect as non-canonical-mode, Case B input
processing (with
MIN set to 1 and *ICRNL cleared*) as specified in the XBD specification.

For example, ncurses does this in NCURSES_SP_NAME(cbreak):
https://github.com/mirror/ncurses/blob/87c2c84cbd2332d6d94b12a1dcaf12ad1a51a938/ncurses/tinfo/lib_raw.c#L177

My question is this: I understand that the standard linked above is NOT a
specification for stty but rather for curses, and therefore the Coreutils
implementation of stty need not follow it. *But*, would this be a welcome
change in stty for the sake of sticking to *some* standard? Or could this
potentially break lots of existing projects?

---------------------------------------------

Some context: I had made some changes in the tty library of Python to make
it more standard compliant: https://github.com/python/cpython/pull/101832

This is a part of a series of changes:
https://github.com/python/cpython/issues/85984

The particular change of concern is that in `tty.setcbreak()`, I unset
ICRNL. Because of this change , some old behavior is broken:
https://github.com/python/cpython/issues/114328

Sincerely,
Soumendra

cbreak is a mode between raw and cooked.
I.e. input _is_ sent character at a time rather than line at a time,
though there is still some processing done on some input chars.
Being somewhere between the raw/cooked extremes makes the cbreak "definition"
somewhat fuzzy as you've seen.

If I was implementing from scratch I _would_ have cbreak
clear line oriented settings like icrnl.

However given that the unix stty implementations (and python) agree
that cbreak doesn't touch icrnl, I wouldn't change it at this stage.
Also one generally has the control to easily set icrnl independently from 
cbreak,
so it's not too onerous to do that where needed.

thanks,
Pádraig.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]