
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),僅供參考