V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ferstar
V2EX  ›  Linux

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

  •  2
     
  •   ferstar ·
    ferstar · 2023-01-31 09:18:20 +08:00 · 6656 次点击
    这是一个创建于 422 天前的主题,其中的信息可能已经有所发展或是发生改变。
    转用 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😂
    qwerzl
        29
    qwerzl  
       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
       2023-01-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 点击事件是系统接管的,我干预不了。
    qwerzl
        46
    qwerzl  
       2023-02-05 10:36:05 +08:00
    @ferstar 感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   974 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.