Skip to content

0.9.0 --- the keystrokes this console keeps for itself are a position now - #25

Merged
Sunrisepeak merged 1 commit into
mainfrom
openkal-0.14
Sep 20, 2026
Merged

Sunrisepeak merged 1 commit into
mainfrom
openkal-0.14

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

跟随 openkal 0.14(mcpplibs/openkal#38):模式字第三个位 KAL_TERM_PASS_CONTROL 的读写,以及规范在 set_mode 旁新增的两条规则。

  • 位的映射取本环境保留按键机制的全集(termios: ISIG|IXON|IEXTEN;console: ENABLE_PROCESSED_INPUT),否则同一个模式字在两个系统上含义不同。
  • 请求值与当前值相同的位不写。
  • 关行组装时确立「读至少等一个字节」,否则 kal_stream_read 会报出一个不是输入结束的 0(条款 7.4)。

依赖:openkal 0.14.0。各仓库同名分支 openkal-0.14,CI 会检出同名规范分支。端到端验证(^C 以 0x03 到达、^S 不冻结、恢复后终端回到原样)在 openkal-musl 的 pty 探针里与宿主 C 库对照。

… now

openkal 0.14 adds KAL_TERM_PASS_CONTROL, and this implementation reads and
writes it as ENABLE_PROCESSED_INPUT, inverted.

This environment keeps the keystrokes it reserves --- the interrupt, and the
pair that stops and starts output --- behind one flag, where the two termios
environments spread the same reservation over three of their own. The
position asks one question on either side: does the environment reserve
anything at all. That is why it is one position and not one per class of
keystroke, which this environment could not answer (clause 6.4).

The rule the specification states beside set_mode --- that a position whose
requested value is the one in effect is not written --- binds an
implementation whose position stands for several mechanisms. Here it stands
for one, and assigning it from the mode word is the same act as leaving it
alone.
@Sunrisepeak
Sunrisepeak merged commit e15ddb3 into main Sep 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant