#libinput #i3 #x11 #gestures #touchpad #input-event #gesture

lillinput

将libinput手势连接到i3和其他库的库

4个版本 (2个重大更改)

0.3.0 2022年11月4日
0.2.1 2022年2月15日
0.2.0 2021年11月10日
0.1.0 2021年8月1日

GUI类别中排名第548

每月下载量25
用于lillinput-cli

BSD-3-Clause

52KB
834

lillinput

crates.io

lillinput logo

lillinput库提供了将libinput事件与不同操作连接起来的构建模块。

构建模块

特性和实现

以下特性是库的主要构建模块

特性 描述 实现
action::操作 特定操作的处理器,由应用程序事件触发 actions::I3Action, actions::CommandAction
events::处理器 负责与libinput交互并调度其事件,将它们转换为应用程序事件 events::DefaultProcessor
controllers::控制器 包含将应用程序事件连接到Action的逻辑,并协调 controllers::DefaultController

库还包括主要特性的一些基本Implementations,采用“电池包含”的方法。

枚举

以下枚举表示库中的不同概念

枚举 描述
events::ActionEvent 高级应用程序事件,由Processor发出并由Controller用于将其映射到一个或多个Action
actions::ActionType 特定动作家族的标识符

概述

以下图表示组件之间的流程和关系

flowchart LR
    libinput[fa:fa-external-link-alt libinput]

    subgraph ::controllers
    Controller([fa:fa-code Controller])
    DefaultController
    end

    subgraph ::processor
    Processor([fa:fa-code Processor])
    DefaultProcessor
    end

    subgraph ::actions
    Action([fa:fa-code Action])
    I3Action
    CommandAction
    end

    i3[fa:fa-external-link-alt i3 IPC]
    shell[fa:fa-external-link-alt shell]

    libinput -.-> |input::event::Event| Controller
    Controller --> |::events::ActionEvent | Processor
    Processor --> |executes associated| Action

    DefaultController --> DefaultProcessor
    DefaultProcessor --> I3Action
    DefaultProcessor --> CommandAction

    I3Action -.-> i3
    CommandAction -.-> shell

    classDef trait stroke-dasharray: 5 5;
    class Controller,Processor,Action trait;

其他注意事项

错误处理

组件发出的错误在每个主要模块下的errors模块中可用,基于thiserror的错误Enums重新导出以方便使用。

控制器执行

Controller提供了一个run()方法,该方法进入循环以接收来自Processor的事件并调用根据接收到的事件触发的Action

%%{init: {'sequence': { 'mirrorActors': false, `0.`0.'actorMargin': 100, 'messageFontSize': 14}}}%%

sequenceDiagram
    autonumber

    actor User
    participant Controller
    participant Processor
    participant libinput as <libinput>
    participant Action

    User->>+Controller: run()
    loop

    rect beige
    note right of libinput: Receive events from Controller
    Controller->>+Processor: dispatch()
    Processor->>+libinput: dispatch()
    libinput-->>-Processor: [libinput events]
    Processor->>+Processor: process_event()
    Processor->>-Processor: _end_event_to_action_event()
    Processor-->>-Controller: [ActionEvents]
    end

    rect beige
    note left of Action: Process application events
    loop For each mapped action
    Controller->>+Controller: process_action_event()
    Controller->>Action: execute_command()
    Action-->>Controller: Result
    deactivate Controller
    deactivate Controller
    end
    end

    end

许可证

本项目采用BSD-3-Clause许可协议。

依赖项

约5MB
约88K SLoC