pmma
1
dired,设置在当前buffer打开目录和文件,回车没问题,但是鼠标的话,因为鼠标位置和光标位置不在一起,所以鼠标点到的位置,打开的位置是错的,如图
dev_init 是 键盘光标,golang 是鼠标位置
从结果看,鼠标点击打开的目录是错的
代码如下
; 在当前窗口打开
(defun custom-dired-setting ()
(put 'dired-find-alternate-file 'disabled nil)
(define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file)
(define-key dired-mode-map (kbd "M-<left>") (lambda ()
(interactive)
(find-alternate-file "..")
))
(local-set-key [down-mouse-1] 'dired-find-alternate-file)
)
(add-hook 'dired-mode-hook 'custom-dired-setting)
如果不改鼠标,默认的鼠标打开的文件,不需要键盘位置和鼠标位置一致,只是它会在新buffer打开
mouse需要通过点击的地方判断,不能简单的绑定[down-mouse-1]
我这试了一下,点击文件时会调用到 dired-mouse-find-file-other-window
方法,它调用了dired-mouse-find-file
,入参是 find-file-other-window
和 dired-other-window
,导致会新开一个buffer
那么advice
一下,传入 find-alternate-file
方法即可
不能使用 dired-find-alternate-file
,它应该是自己获取光标处的文件,然后用 find-alternate-file
打开
代码如下:
(defun my/dired-mouse-find-file (event)
(interactive "e")
(dired-mouse-find-file event 'find-alternate-file 'find-alternate-file))
(advice-add 'dired-mouse-find-file-other-window :override 'my/dired-mouse-find-file)
pmma
3
请教一下,点击文件时候调用的方法和参数是怎么找到的?有没有什么比较好的调试方式?
解决路径如下(debug-on-entry
方法很好用):
-
describe-key
,然后点击鼠标,查看其绑定的方法,是 mouse-drag-region
方法,和 dired
没有关系,其他地方点击也是这个方法
- 猜测最终会调用dired中的一个方法,
describe-symbol
然后用 dired mouse
搜索了一下,找到 dired-mouse-find-file
方法
-
debug-on-entry
设置断点,选择该方法,然后在dired中点击一个文件,发现确实会调用到,在debug窗口可以查看调用栈 (用cancel-debug-on-entry
可以取消这个断点)
- 然后就是简单看看这些方法的源码
- 最后写个
advice
验证一下