可能是 Linux 下最丝滑的三指拖拽实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ferstar
V2EX    Linux

可能是 Linux 下最丝滑的三指拖拽实现

  •  2
     
  •   ferstar
    ferstar 2023-01-31 09:18:20 +08:00 8401 次点击
    这是一个创建于 984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    转用 Linux 后一直都比较怀念 macOS 上丝滑的三指拖拽效果,鉴于近几年出的 Windows 本子触控板面积以及跟手性肉眼可见的改善了很多,我觉得是时候在 Linux 上再折腾一下触控板手势了

    一番调研后东拼西凑缝合了一个 rust 实现(我菜求轻喷),效果不错,基本达到预期。

    blog: https://blog.ferstar.org/post/issue-73/

    repo: https://github.com/ferstar/gestures

    理论上支持所有 Linux X11 桌面环境
    第 1 条附言    2023-01-31 21:11:05 +08:00

    感谢大家支持哈,小半天混了四十个star,开心

    配置文件用的是 Lisp 语法,也不复杂,照着改就行,我有附示例

    关于 Wayland,其实也是支持的,不过性能要差一些,见原作者这里的回复:

    https://github.com/riley-martin/gestures/issues/4#issuecomment-1348598354

    第 2 条附言    2023-02-19 20:00:11 +08:00

    更新一下:

    1. 支持 Wayland(其实源作就支持,被我魔改没了而已)
    2. 同步源作代码,更换掉了不是那么直观的 Lisp 风格的配置文件
    3. 修复了 fork shell 进程不会正常退出的问题,也就是避免了僵尸进程
    4. 依赖组件同步到最新,优化了些许性能,保证丝滑(极限测试也不过1.3%的CPU、不到5MB内存占用)
    5. 二进制包Arch、Ubuntu通用
    ~ gestures -h Libinput based touchpad gestures program Usage: gestures [OPTIONS] Options: -v, --verbose... Verbosity, can be repeated -d, --debug Debug mode -w, --wayland-disp Is Wayland desktop env or not (default: Xorg, will use xdotool api directly for better 3-finger-drag performance) -c, --conf <FILE> Path to config file -h, --help Print help -V, --version Print version 
    46 条回复    2023-02-05 10:36:05 +08:00
    duke807
        1
    duke807  
       2023-01-31 09:31:32 +08:00 via Android   4
    linux 下默认:

    n 指单击:
    n = 1:鼠标左键单击
    n = 2:鼠标右键单击,通常是打开右键菜单
    n = 3:鼠标中键单击,通常是复制之前框选的内容

    n 指单击,然后快速切换 1 指拖动:
    n = 1:鼠标左键拖动,譬如移动文件
    n = 2:鼠标右键拖动,譬如画图的时候平移画板
    n = 3:鼠标中键拖动,譬如 3d 画图的时候旋转物件

    n 指滑动:
    n = 1:移动鼠标
    n = 2:scroll 页面


    以上设计比 mac 和 windows 专业且好用很多,好记且不缺失鼠标中键拖动的功能,用 linux 画 3d 我都不需要用鼠标,很方便

    op 应该让 mac 和 windows 实现 linux 触摸板设计,而不是反过来
    loading
        2
    loading  
       2023-01-31 09:31:59 +08:00
    感觉为 linux 生态添砖加瓦。
    duke807
        3
    duke807  
       2023-01-31 09:37:22 +08:00 via Android   2
    而且,linux 下窗口移动,可以拖拽整个窗口范围(按住 alt 或者 win 键),不需要慢慢移动鼠标去找窗口标题栏,所以默认鼠标左键拖动窗口就很好用,而且可以无感把窗口移动超出屏幕顶部,大大提高屏幕利用率。

    只有 mac windows 不支持整个软件窗口范围点击拖动窗口的,才需要用所谓的各种手势来辅助。。。
    ferstar
        4
    ferstar  
    OP
       2023-01-31 09:40:42 +08:00
    @duke807 你说的很对,但开发过程中遇到的问题是 1 ,2 指事件被系统绑定,不好捕获,所以退而求其次选择 3 ,4 指方案,这是个妥协的结果
    swordne
        5
    swordne  
       2023-01-31 09:50:14 +08:00
    同样喜欢 mac 的三指拖拽,不知道 win 上面有没有什么类似的驱动或者软件实现的?
    现在一直在用 TP 的本子,就是因为不适应 win 自带的拖拽方案,退而求其次选择带独立鼠标键的。
    ferstar
        6
    ferstar  
    OP
       2023-01-31 09:55:20 +08:00
    @swordne 同道中人呀,我找了 n 圈了没有
    xuboying
        7
    xuboying  
       2023-01-31 10:03:36 +08:00   2
    我觉得 Mac 的三指拖拽非常非常好用。但是这个功能十分诡异
    1. Windows 下完全找不到一样的实现,难道是 mac 的专利?
    2. 这个功能被苹果自己雪藏了,默认不开启,必须在极其隐藏的地方打开。这是为啥呢。
    novolunt
        8
    novolunt  
       2023-01-31 10:11:31 +08:00
    @xuboying 如果对于没有扩展屏幕的用户,完全没必要,触摸板体验也不好。三指拖拽可能在 mac 支持触摸屏以后才会默认开启。
    debuggerx
        9
    debuggerx  
       2023-01-31 10:16:35 +08:00
    之前在某个地方跟人讨论过这个三指拖拽,结果发现相当比例的人觉得这个好用是因为压根不知道还可以用“轻点一下半”的方式来拖动……
    xuboying
        10
    xuboying  
       2023-01-31 10:21:02 +08:00   1
    @debuggerx 知道也还要三指,明显三指少磨损关节。
    klesh
        11
    klesh  
       2023-01-31 10:23:26 +08:00
    先 star 为敬
    littlewing
        12
    littlewing  
       2023-01-31 10:30:29 +08:00
    为啥我的 macos 上没有三指拖动
    zoharSoul
        13
    zoharSoul  
       2023-01-31 10:32:53 +08:00
    @littlewing 我甚至不知道是什么
    20015jjw
        14
    20015jjw  
       2023-01-31 10:38:13 +08:00 via iPhone
    看着不错
    但老了还是 mac 屎少一点
    duke807
        15
    duke807  
       2023-01-31 11:03:07 +08:00
    @duke807 #1 补充一下,从来不需要按触摸板的实体按钮,我列的表是纯轻触
    kaleido
        16
    kaleido  
       2023-01-31 11:03:56 +08:00
    @littlewing 系统设置辅助功能指针控制触控板选项拖移样式三指拖移( macOS13 ,之前版本也类似)
    zhuisui
        17
    zhuisui  
       2023-01-31 11:30:27 +08:00
    单击或 n 击再按住拖动的问题是,多次单击之间可能点歪,这才是为什么 mac 的三指拖动好用,因为不存在点歪的问题。

    以前我自己用 shell 写了一个读取 pointer dev 的三指拖动,但是很卡。现在我用 fusuma 带的三指拖动,非常流畅,不过相比 mac 的缺点就是,不能拿起其中一根手指。
    zhuisui
        18
    zhuisui  
       2023-01-31 11:33:21 +08:00   1
    另外,现在 mac 有了压感触控板,使得单指按住直接拖动也变得更好用,所以三指拖动对于有些人可能不再需要。而普通触控板需要物理按下触控板面,这个压力对于单指来说还是有点大。
    neptuno
        19
    neptuno  
       2023-01-31 11:39:35 +08:00 via iPhone   1
    三指真的好用,轻点按住拖动太累了
    swordne
        20
    swordne  
       2023-01-31 11:42:18 +08:00
    @ferstar 是啊,不仅没有官方的,国内外也没有自行开发的,甚至个人项目都没有,可惜了。
    ferstar
        21
    ferstar  
    OP
       2023-01-31 11:50:22 +08:00
    @zhuisui 我还是喜欢三指拖拽,fusuma 之前有用,拖拽性能是不如我这个实现的
    hackeru
        22
    hackeru  
       2023-01-31 13:09:59 +08:00
    @ferstar 对比 fusuma 体验如何?现在也在用的 fusuma ,感觉还行
    ferstar
        23
    ferstar  
    OP
       2023-01-31 13:22:08 +08:00
    @hackeru 其实 fusuma 也挺流畅的,但我不喜欢 Ruby ,刚好能抄到一个性能更好的实现,就自己写了
    ferstar
        24
    ferstar  
    OP
       2023-01-31 13:23:20 +08:00   1
    @swordne 等我哪天用回 Windows 实现一下
    zhuisui
        25
    zhuisui  
       2023-01-31 13:51:01 +08:00
    @ferstar 我也试用了你这个,流畅度没问题,并且还支持抬起一根手指重新放下,fusuma 不支持这个的。但是这个特性有时候不正常工作,如果能稳定的话,我就会迁移到你这个。
    xuboying
        26
    xuboying  
       2023-01-31 13:51:57 +08:00
    @ferstar 期待期待!之前想用 ahk 改改的,没成。win 下需要写个驱动么?
    hwdef
        27
    hwdef  
       2023-01-31 14:12:14 +08:00
    楼主用的什么笔记本?
    ferstar
        28
    ferstar  
    OP
       2023-01-31 15:23:14 +08:00   1
    @hwdef 联想小新 Pro13 拯救者 R9000P ThinkBook 14+ AMD4800/5800/6800 yes
    jKpzPv20NjX56i44
        29
    jKpzPv20NjX56i44  
       2023-01-31 15:48:20 +08:00
    有计划支持 wayland 吗
    K8dcnPEZ6V8b8Z6
        30
    K8dcnPEZ6V8b8Z6  
       2023-01-31 16:31:26 +08:00
    @debuggerx Mac 有一下半吗?我竟然不知道
    sinboy1988
        31
    sinboy1988  
       2023-01-31 17:07:01 +08:00
    我用 touchegg 和 libinput-gesture ,怎么换成这个呢?希望有个教程
    yym6868686
        32
    yym6868686  
       2023-01-31 17:58:09 +08:00   2
    @ferstar
    @swordne
    @xuboying

    win 里 fastgestures 这个软件可以实现三指拖移 https://fg.zhaokeli.com/
    ferstar
        33
    ferstar  
    OP
       202301-31 20:57:51 +08:00
    @qwerzl 抱歉,迫于截图、远程会议、远程桌面等支持的硬伤,我还没有转向 Wayland 的打算,所以暂时么有支持计划。
    ferstar
        34
    ferstar  
    OP
       2023-01-31 20:58:35 +08:00
    @debuggerx 我习惯三指了,很舒服
    ferstar
        35
    ferstar  
    OP
       2023-01-31 21:02:25 +08:00
    @zhuisui 这可能是个 bug ,本来期望的场景应该是:你拖拽窗口走到屏幕一半,但是手已经要划出触摸板边缘了,所以添加了一个延迟,允许你的手指暂离触摸板调整好位置后继续之前的拖拽,整体比较丝滑;

    或许我可以考虑某天把这个 bug 肝成 feature ,狗头.gif
    swordne
        36
    swordne  
       2023-02-01 16:10:48 +08:00   1
    @ferstar 加油!
    swordne
        37
    swordne  
       2023-02-01 16:11:02 +08:00
    @yym6868686 试用一下
    xrpbtc
        38
    xrpbtc  
       2023-02-02 11:45:56 +08:00
    @duke807 1 指单击,怎么快速切换 1 指拖动?尝试了下移动不了文件啊
    duke807
        39
    duke807  
       2023-02-02 11:54:15 +08:00
    @xrpbtc

    ```
    ────┐ ┌──┐ ┌──────
    └─┘ └─────────────────┘
    ```
    duke807
        40
    duke807  
       2023-02-02 12:25:12 +08:00
    @duke807

    ------__-----_______________________-------

    这是触摸波形,--- 是不触摸,___ 是手指接触触摸板

    短的 ___ 是 n 手指( 1 ,2 或者 3 ),单击要拖动的文件
    长的 ____________________ 是 1 个手指,期间可拖动文件

    短的 ___ 和普通单击时间一样
    短的 ___ 和长的 _________________ 之间的 ---- 时间要很短才行
    xrpbtc
        41
    xrpbtc  
       2023-02-02 13:33:17 +08:00
    @duke807 跟双击太难区分了,太容易变成双击。
    duke807
        42
    duke807  
       2023-02-02 13:35:03 +08:00 via Android   1
    @xrpbtc
    n = 1 的时候类似双击,只不过最后不松手就行

    跟键盘指法一样,要稍微习惯一下,习惯之后很容易区分
    ferstar
        43
    ferstar  
    OP
       2023-02-03 08:38:33 +08:00   1
    @qwerzl 支持 Wayland 了,不过三指拖拽性能要差个五六倍的样子需要借助 ydotool 的能力
    xrpbtc
        44
    xrpbtc  
       2023-02-03 15:27:06 +08:00
    @duke807 有没有参数可配置两次单击的时间?
    ferstar
        45
    ferstar  
    OP
       2023-02-04 10:12:03 +08:00
    @xrpbtc 点击事件是系统接管的,我干预不了。
    jKpzPv20NjX56i44
        46
    jKpzPv20NjX56i44  
       2023-02-05 10:36:05 +08:00
    @ferstar 感谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2190 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:39 PVG 08:39 LAX 17:39 JFK 20:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86