#events #input-event #ratatui #input

rat-event

ratatui 小部件事件处理特质

20 个版本 (5 个重大更改)

0.14.6 2024 年 7 月 2 日
0.14.5 2024 年 6 月 24 日
0.14.1 2024 年 5 月 30 日
0.13.3 2024 年 5 月 30 日
0.9.0 2024 年 5 月 8 日

#829 in 命令行界面

Download history 114/week @ 2024-05-02 79/week @ 2024-05-09 547/week @ 2024-05-16 413/week @ 2024-05-23 908/week @ 2024-05-30 228/week @ 2024-06-06 261/week @ 2024-06-13 158/week @ 2024-06-20 170/week @ 2024-06-27 102/week @ 2024-07-04 30/week @ 2024-07-11 14/week @ 2024-07-18 6/week @ 2024-07-25

每月 52 次下载
用于 8 个 Crates(5 个直接使用)

MIT/Apache

34KB
542

Rat-Event

理由

此 crate 定义了一个通用的事件处理特质,可用于创建 ratatui 小部件。

这里的想法不是试图统一不同的事件源。

相反,提供一种特质,可以针对每种事件类型实现一次。由于关于正确键绑定的意见似乎存在很大分歧,我们添加了一个修饰类型,允许有多个键绑定。

如果小部件是以这种方式设计的,即每个键绑定只需调用一个或两个函数,代码重复是可以忽略不计的。

这实现了以下功能

  • 小部件作者可以支持不同的事件类型。
  • 小部件作者可以提供多个键绑定。
  • 应用程序作者可以定义自己的键绑定,并且由于小部件是以这种方式设计的,因此可以做到这一点。
  • 由于存在此类特质,因此可以泛型地组合小部件。

有关示例,请参阅 rat-input

组合

为了允许不同返回类型的最小组合级别,存在特质 ConsumedEvent。这允许提前返回,即使不知道返回类型的详细信息。

已知修饰符

这些是预定义的修饰符

  • FocusKeys - 此类事件处理器处理具有输入焦点的所有与事件相关的事件。'具有输入焦点'的精确定义在此处未定义,但每个应用程序/框架可以有自己的定义。有关示例,请参阅 rat-focus
  • MouseOnly - 没有输入焦点的所有与事件相关的事件处理器。通常这里只有鼠标事件,但也可以有热键。
  • Popup - 专门为在其它小部件之上绘制覆盖/弹出窗口的小部件的事件处理器。当两个小部件声称相同的区域时,鼠标交互会变得复杂。我的看法如下
    • 将常规小部件行为和弹出行为分开。
    • 首先调用所有弹出事件处理器。
    • 稍后调用常规事件处理器。
    • -> 这种划分有点不幸,但按照这种顺序至少是可行的。有关示例,请参阅 rat-input:MenuBar

工具

ct_event!

一个小巧的生成鼠标事件模式匹配的工具。它的语法比组合结构模式更简洁。

选择器

函数 row_at_clickedcolumn_at_clickedrow_at_dragcolumn_at_drag 可以更轻松地识别矩形的哪个部分实际上是要表示的。

结果

事件处理的参考结果类型。这只是一个基本的起点。您可以自由定义自己的;也许可以添加到 Outcome 的转换。

鼠标标志

识别双击和鼠标拖拽并不简单。这个结构体有助于此,将其添加到您的小部件状态中。

依赖关系

~6–12MB
~120K SLoC