mumu-lhl / eaf-pyqterminal

A terminal written in PyQt6 for the Emacs Application Framework.
GNU General Public License v3.0
47 stars 3 forks source link

支持鼠标或者键盘对终端输出内容进行拷贝 #15

Closed manateelazycat closed 11 months ago

mumu-lhl commented 1 year ago

c2857aa 中实现了一个 cursor move mode,按 M-c 开启,开启后按 vC-SPC 对终端内容进行标记,再按 M-wy 拷贝。 还没支持鼠标对终端内容进行拷贝

manateelazycat commented 1 year ago

@mumu-lhl 试了一下不错, 提供几个线索:

  1. 键盘可以直接拷贝光标处的单词, 就是根据 virtual_cursor 的位置左右移动后, 探测移动后的光标处的字符, 如果字符是空白字符就是拷贝的左右边界, 这样可以可以快速拷贝光标处的 symbol。 同样原理也可以实现不选中来拷贝 word
  2. 鼠标选中的实现主要是对 widget 控件先添加 self.installEventFilter(self) 来监听事件, 然后在 widget 的 eventFilter 函数中来监听鼠标按下相对于 widget 的 x 和 y 坐标, 然后再结合现在的键盘选择逻辑就可以实现拷贝了。
  3. 鼠标选中比较复杂的是, 当光标拖拽超过控件边缘时, 要滚动终端的内容, 同时更新选择的y坐标, 重新绘制选中区域。
manateelazycat commented 12 months ago

如果用鼠标选中文本后, 执行 Alt + w 命令后可以考虑自动退出光标模式, 这样比较符合传统终端的使用习惯。

mumu-lhl commented 12 months ago

上面提到的都已经实现了,不过还有点小瑕疵,今晚作业还没写完,明天再看看

manateelazycat commented 11 months ago

刚才试了一下, 功能实现的很好, 手动点赞。