在 Emacs 中,你无需改变任何操作就能产生拖拽事件。 每当用户按下鼠标按键,并在释放按键前将鼠标移动到不同的字符位置时, 就会产生一个 拖拽事件(drag event)。与所有鼠标事件一样,拖拽事件在 Lisp 中以列表表示。 这些列表会同时记录鼠标的起始位置和结束位置,格式如下:
(event-type start-position end-position)
对于拖拽事件,符号 event-type 的名称包含前缀 ‘drag-’。
例如,按住鼠标按键 2 并拖动鼠标会产生 drag-mouse-2 事件。
事件的第二个和第三个元素,即上例中的 start-position 和 end-position,
会被设置为拖拽的起始和结束位置(以鼠标位置列表的形式,see 点击事件)。
你可以用同样的方式访问任何鼠标事件的第二个元素。
但是,拖拽事件可能在最初选中的框架边界之外结束。
在这种情况下,第三个元素的位置列表会使用该框架代替窗口。
‘drag-’ 前缀位于修饰键前缀(如 ‘C-’ 和 ‘M-’)之后。
如果 read-key-sequence 接收到一个没有按键绑定的拖拽事件,
而对应的点击事件存在绑定,它会将该拖拽事件转换为拖拽起始位置处的点击事件。
这意味着除非你需要,否则不必区分点击事件和拖拽事件。