用Mac的三指拖拽选择文本区域,有大概1秒的延迟

在Mac上,通过触摸板三指拖拽选择文本区域,有大概1秒的延迟才出现"mark set"。在这1秒内的增删改命令的表现就会很奇怪。具体来说,增删改命令是对最后cursor的落点进行操作,而不是选择的文本区域。大家有遇到类似的问题吗?可以通过改什么配置规避这个延迟吗?

可能有些hook勾到了比较笨重的函数?Emacs -Q 下有没有这个问题?

也有这个问题。我附上了截图,三指拖拽选择,然后快速点,会先执行光标退格,再mark set。

emacs -q 上也一样,那可能是macos系统层面的问题了,要么是某些特殊设置,要么是bug。

不知道其他 app 上有没有类似表现,比如在 notes.app, safari.app 上拖拽?

如果以前没有这样的问题,这次是突然出现,可能是 bug,也许重启就会好?

Emacs 是什么版本?是自己编译的还是用的某个发行版?这些都有影响的。不行就上mac兼容性好的,比如emacs-mac

应该不是mac系统的问题,原生app没问题,sublime和vscode也没问题,应该是emacs和mac的交互的问题

Emacs Plus的GNU Emacs 29.1

怪了,我没有遇到这问题,macOS13.4

不懂,我猜的啊: 三指拖拽的选择会进入到摸一个特殊的mode,里面的和其他编辑操作都有其他含义,直到等了1秒以后,离开这个mode,mark才被set。 也许解决办法是,让和其他编辑操作都可以触发这个mode的离开?

刚试了emacs-mac,也出现同样的问题

我这里复现成功,楼主描述的有点模糊,大概复现步骤是这样的。

  1. 右手三指放在触摸板上,左手放在删除键上
  2. 右手三指拖动选择某一文本,比如 “Emacs”,然后三指离开触摸板
  3. 左手立刻点击删除
  4. 此时选区为 "Emac ",注意后面有个空格,而期望效果是删除整个 “Emacs” 选区

更直接简单的复现:Emacs 在选区之后会在 echo area 打印 “Mark set”,使用三指选中可以明显观察到 “Mark set” 在离开触摸板一段时间后才打印

是,你说的对, “立刻”删除,会出现删不掉,而是退格的情况。

原因我猜可能是因为 MacOS 三指选取手指离开触摸板的时候会有一定时间系统仍然认为是鼠标按下的状态,这样可以连续选区而不会断掉。估计 Emacs 没有处理好这个短暂的时间,依然认为是鼠标按下的状态。

是,三指选取有300ms延迟,从而可以让连续选区实现。所以只能等版本更新了嘛?

那就不知要等到啥时候了😄

hhhhh 谢谢啦

我找到一个 typescript 的库也曾经遇到过这个问题,他们的解决办法是使用平台原生的区域事件替代鼠标事件

我只能大致看明白他们的逻辑,但是我该怎么操作,已经远远超出我的能力范围了 :joy: