尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

niri 手势完全指南:鼠标、触摸板、触摸屏与数位板交互及 gestures 配置详解

niri 手势完全指南:鼠标、触摸板、触摸屏与数位板交互及 gestures 配置详解 niri 手势完全指南鼠标、触摸板、触摸屏与数位板交互及 gestures 配置详解【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niriniri 是一个可横向滚动的平铺式 Wayland 合成器它的交互设计允许你完全摆脱键盘仅用指点设备完成窗口移动、缩放、视图滚动与工作区切换等操作。本文基于仓库 docs/wiki/Gestures.md 与 docs/wiki/Configuration:-Gestures.md 两篇官方文档结合 niri-config/src/gestures.rs、src/niri.rs 与 src/layout/workspace.rs 等源码实现系统梳理 niri 的全部内置手势及其可配置项。读完本文你将掌握每种手势的触发方式、适用版本、拖放边缘滚动与热角hot corner等高级特性的配置方法并能理解这些手势在合成器内部的判定与执行逻辑。手势总览niri 内置的手势覆盖了四类指点设备外加一类适用于所有指点设备的通用手势鼠标交互式移动、交互式缩放、重置窗口高度、切换全宽、水平视图移动、工作区切换。触摸板三指垂直/水平滑动工作区切换与视图移动、四指垂直滑动开关 Overview。触摸屏单指拖拽移动窗口、第二根手指点按切换浮动/平铺。数位板笔拖拽移动窗口。所有指点设备拖放DnD边缘视图滚动、拖放边缘工作区切换、拖放悬停激活、热角开关 Overview。这些手势与 配置文档Configuration:-Gestures 中的gestures配置节对应其中拖放边缘滚动、拖放边缘工作区切换与热角三类支持精细调参其余手势为内置默认行为。鼠标手势以下鼠标手势均以Mod键默认 Super 键为修饰键触发。交互式移动Interactive Move自 0.1.10 起可用按住Mod并按住鼠标左键拖动即可移动窗口。窗口插入预览的外观可以在insert-hint布局配置 中自定义。自 25.01 起在移动过程中单击鼠标右键可以在放入浮动层与放入平铺层之间切换目标布局。从源码看该功能由 src/input/move_grab.rs 中的MoveGrab实现niri 在 src/input/mod.rs 等处创建该抓取grab将指针输入接管给移动逻辑并依据插入位置提示显示插入预览。交互式缩放Interactive Resize自 0.1.6 起可用按住Mod并按住鼠标右键拖动即可调整窗口大小。实现对应 src/input/resize_grab.rs 的ResizeGrab入口位于 src/input/mod.rs。重置窗口高度Reset Window Height自 0.1.6 起可用在顶部或底部平铺窗口的缩放边缘上双击窗口高度将重置为自动auto。该行为对两类缩放路径均生效窗口自身发起的缩放例如使用客户端装饰 Client-Side Decorations 时niri 发起的Mod 右键缩放。切换全宽Toggle Full Width自 0.1.6 起可用在左侧或右侧平铺窗口的缩放边缘上双击所在的列column将扩展到整个工作区的宽度。同样对窗口自身发起的缩放与 niri 发起的Mod 右键缩放都有效。水平视图移动Horizontal View Movement自 0.1.6 起可用按住Mod并按住鼠标中键或按住中键滚动滚轮水平拖动即可左右滚动平铺视图。这是 niri 可滚动平铺布局的核心操作之一底层由 src/layout/scrolling.rs 的ScrollingSpace计算视图偏移。工作区切换Workspace Switch自 0.1.7 起可用按住Mod并按住鼠标中键或按住中键滚动滚轮垂直拖动即可在上下工作区之间切换。触摸板手势触摸板手势基于多指滑动无需修饰键三指垂直滑动在上下工作区之间切换。三指水平滑动水平移动视图。四指垂直滑动自 25.05 起打开与关闭 Overview。这些手势经由 niri 的触摸板滑动事件通道处理视图偏移手势对应的底层调用为 src/layout/workspace.rs 中的view_offset_gesture_begin/view_offset_gesture_update/view_offset_gesture_end通过is_touchpad参数区分触摸板与鼠标来源。触摸屏手势自 0.1.10 起可用单指拖拽按住Mod并拖动窗口即可移动它。与鼠标一致插入预览外观可在insert-hint布局配置 中定制。拖动平铺窗口时如果方向偏水平将改为滚动视图而非移动窗口。自 25.11 起移动过程中用第二根手指点按屏幕可切换目标布局为浮动或平铺。数位板手势自下一版本next release起可用按住Mod并用数位笔拖动窗口即可移动。拖动平铺窗口时水平拖动会滚动视图。插入预览同样由insert-hint布局配置 控制。所有指点设备通用的手势以下手势无论鼠标、触摸板还是触摸屏均可触发。拖放边缘视图滚动DnD Edge View Scroll自 25.02 起可用拖放Drag-and-Drop过程中将鼠标光标抵住显示器边缘即可滚动平铺视图触摸屏上同样有效。它同时适用于两类拖放场景常规拖放例如从文件管理器拖拽文件窗口交互式移动且目标布局为平铺时。拖放边缘工作区切换DnD Edge Workspace Switch自 25.05 起可用在 Overview 中拖放时将光标抵住显示器上/下边缘即可上下切换工作区触摸屏同样有效。拖放悬停激活DnD Hold to Activate自 25.05 起可用拖放过程中将鼠标悬停在某个窗口上片刻即可激活该窗口例如把浮动窗口带到最上层。在 Overview 中将鼠标悬停在工作区上可以切换过去。热角开关 OverviewHot Corner to Toggle the Overview自 25.05 起可用将鼠标放到显示器的最左上角即可开关 Overview拖放过程中同样有效。该行为可通过gestures.hot-corners配置启用、禁用或指定具体角点详见下文。gestures 配置节详解gestures配置节集中管理上述可调手势参数自 25.02 起引入。快速浏览默认配置如下gestures { dnd-edge-view-scroll { trigger-width 30 delay-ms 100 max-speed 1500 } dnd-edge-workspace-switch { trigger-height 50 delay-ms 100 max-speed 1500 } hot-corners { // off top-left // top-right // bottom-left // bottom-right } }配置文件位于niri的gestures {}节内解析器定义在 niri-config/src/gestures.rs其中GesturesPart使用 knuffel 声明式解码各字段通过MergeWith与默认值/已有配置合并因此你可以在多个配置片段中分别覆盖单个参数。dnd-edge-view-scroll拖放期间光标抵住显示器边缘时滚动平铺视图触摸屏同样有效适用于常规拖放与平铺布局下的窗口交互式移动。可配置项参数默认值含义trigger-width30显示器边缘触发滚动的区域宽度单位为逻辑像素该默认值取自 GTK 4。取值范围 0 到 65535见 niri-config/src/gestures.rs。delay-ms100滚动开始前的延迟毫秒用于避免跨显示器拖拽时产生误滚动。max-speed1500最大滚动速度单位为逻辑像素/秒取值范围 0 到 1,000,000。滚动速度随光标从trigger-width边界移动到显示器最边缘而线性增大。对应实现位于 src/layout/workspace.rs光标位置先被限制在工作区内trigger_width同时被限制不超过工作区宽度的一半光标距左右边缘的距离除以trigger_width归一化到[0,1]后再乘以速度得到本次滚动的增量。当trigger-width小于 0.01 时例如显式设为 0 或窗口过小代码会做防御性处理直接返回 0。实际示例——增大触发区与最大速度gestures { // Increase the trigger area and maximum speed. dnd-edge-view-scroll { trigger-width 100 max-speed 3000 } }dnd-edge-workspace-switch自 25.05 起可用在 Overview 中拖放时光标抵住显示器上/下边缘滚动工作区触摸屏同样有效。可配置项参数默认值含义trigger-height50显示器上/下边缘触发滚动的区域高度单位为逻辑像素取值范围 0 到 65535。delay-ms100滚动开始前的延迟毫秒避免跨显示器拖拽误触发。max-speed1500最大滚动速度1500约等于每秒滚动一个屏幕高度。速度同样随光标从trigger-height边界向显示器最边缘移动而线性增大文档原文为从trigger-width起算实际语义即该触发区。实际示例gestures { // Increase the trigger area and maximum speed. dnd-edge-workspace-switch { trigger-height 100 max-speed 3000 } }两个 DnD 边缘手势的运行时骨架为 src/layout/scrolling.rs 中的dnd_scroll_gesture_begin/dnd_scroll_gesture_scroll/dnd_scroll_gesture_end并在 src/layout/workspace.rs 中读取对应配置后转发给滚动空间。hot-corners自 25.05 起可用将鼠标放到显示器左上角即可开关 Overview拖放过程中同样生效。off用于完全禁用热角// Disable the hot corners. gestures { hot-corners { off } }自 25.11 起可以按名称指定具体角点top-left、top-right、bottom-left、bottom-right。若未显式设置任何角点默认启用top-left// Enable the top-right and bottom-right hot corners. gestures { hot-corners { top-right bottom-right } }还可以在 output 配置 中**按显示器per-output**定制热角实现不同屏幕不同的热角行为。从实现看热角的解析结构位于 niri-config/src/gestures.rs包含off与四个角点布尔字段其判定逻辑在 src/niri.rs 的is_inside_hot_corner()先查找该输出对应的 per-output 覆盖配置未找到则回退到全局config.gestures.hot_cornersoff直接返回 false随后对启用的每个角点用1×1逻辑像素的矩形精确匹配指针位置例如左上角即(0, 0)若四个角点都未显式启用则默认只对左上角生效——这与文档中默认启用 top-left的行为一致。触发开关时src/input/mod.rs 会额外检查当前是否存在不允许热角触发的指针抓取grab_allows_hot_corner见 src/input/mod.rs例如窗口缩放抓取ResizeGrab与空间移动抓取期间热角被屏蔽而窗口移动抓取MoveGrab等场景允许触发从而保证拖拽过程中仍能通过热角切换 Overview。指针是否位于热角的状态记录在niri.pointer_inside_hot_corner字段src/niri.rs用于在指针离开热角时正确复位、避免重复触发。小结niri 的手势体系覆盖了从鼠标、触摸板、触摸屏到数位板的全部主流指点设备并与可滚动平铺布局、浮动/平铺切换、Overview 等核心特性深度联动。其中拖放边缘滚动、拖放边缘工作区切换与热角三类行为可通过gestures配置节精细调参其余手势开箱即用。如果你想进一步调整窗口插入预览的观感可查阅 insert-hint 布局配置如需按显示器定制热角可参考 output 配置。结合本文给出的源码路径你也可以直接深入 niri-config/src/gestures.rs 与 src/layout/workspace.rs 验证配置与运行时的对应关系。【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表