如何使Emacs鼠标拖动时不突出显示或设置标记

如何使Emacs鼠标拖动时不突出显示或设置标记,emacs,elisp,Emacs,Elisp,当我按住鼠标1并在缓冲区中移动它时,我只希望光标跟随鼠标。试试这个 (全局取消设置键[drag-mouse-1]) (全局取消设置键[down-mouse-1]) 注意:此方法存在鼠标不跟随鼠标的问题。尽管当你松开鼠标时光标会移动 期待更好的解决方案 要回答原来的问题: (defun my-move-cursor (event) (interactive "e") (mouse-set-point event) (let (event ov) (track-mouse

当我按住鼠标1并在缓冲区中移动它时,我只希望光标跟随鼠标。

试试这个

(全局取消设置键[drag-mouse-1])

(全局取消设置键[down-mouse-1])

注意:此方法存在鼠标不跟随鼠标的问题。尽管当你松开鼠标时光标会移动


期待更好的解决方案

要回答原来的问题:

  (defun my-move-cursor (event)
  (interactive "e")
  (mouse-set-point event)
  (let (event ov)
    (track-mouse
      (while (progn
               (setq event (read-event))
               (or (mouse-movement-p event)
                   (memq (car-safe event) '(switch-frame select-window))))
        (mouse-set-point event)
        (if ov (move-overlay ov (point)  (1+ (point)))
          (setq ov (make-overlay (point) (1+ (point))))
          (overlay-put ov 'face 'match))))
    (when ov (delete-overlay ov))))

我最后做的有点不同。我修改了正常功能,使其不启用瞬态标记模式,并制作了一个恒定的覆盖,突出显示鼠标所在的字符。

伊恩·凯林解决方案的一个细微变化,不使用覆盖,但控制光标闪烁,禁用当前活动的任何瞬态标记,并避免鼠标移出Emacs窗口时出现问题:

(defun my-move-cursor (event)
  (interactive "e")
  (deactivate-mark)
  (mouse-set-point event)
  (let ((blinking (if blink-cursor-mode 1 0)))
    (blink-cursor-mode 0)
    (let (event)
      (track-mouse
    (while (progn
         (setq event (read-event))
         (mouse-movement-p event))
      (ignore-errors (mouse-set-point event)))
    ))
    (blink-cursor-mode blinking))
  )
我将此定义与init文件中的以下鼠标重新映射相结合:

; Set up mouse 1 movement
(global-set-key [drag-mouse-1] 'mouse-set-point)
(global-set-key [down-mouse-1] 'my-move-cursor)

; Set up mouse 3 behavior to emulate standard mouse 1 behavior
(global-set-key [down-mouse-3] 'mouse-drag-region)
(global-set-key [drag-mouse-3] 'mouse-set-region)