怎样给Dired开个"按键提示文档"

Dired按键太多记不住。已知的查键方法:

  1. 按? (dired-summary) 在minibuffer显示一行提示,缺点是提示太少,不够用
  2. C-h m 看mode文档,缺点是文档太多,一页看不过来,而且要转换焦点,操作麻烦
  3. which-key-show-major-mode 这个提供的信息量差不多可以,请教各位道友,能否把它设置成 1) dired-mode时一直显示 2)且可配置文档内容?

期望达到的效果:

  1. 能和Dired同时显示,不需要命令呼出。 (显示位置最好和dired同buffer)
  2. 可以自定义显示哪些项,最好能自己配置中文描述

我用hydra

用hydra不能只写文档吧?dired的按键都要重新绑定一次吗?

常用的也就那么几个。不常用的我就直接输命令。

我一般是这么去找快捷键

Peek 2021-02-02 16-12

用hydra折腾了一下,效果这样,替换了dired原来的?键: image

hydra参数:foreign-keys run,表示hydra未绑定的按键,按过之后不影响hydra的显示。这样就 不用绑定 dired的任何按键,hydra函数体几乎为空,只用它的docstring。

写hydra docstring时,用%s()调用lisp,返回一个格式化、着色的文本。

(defun formated-docs ()
  (let ((docs-plist
	 '("X/!" "执行shell命令" "B" "编译el文件" "Z" "压缩文件\n"
	   "C" "复制" "D" "删除" "R" "移动/重命名\n"
	   "d" "标记删除" "u" "取消标记" "U" "取消所有标记" "x" "执行动作")))
     (cl-loop for (key doc) on docs-plist by 'cddr
	      concat
	      (format "  %s: %s" (propertize key 'face '(:foreground "pink")) doc))))

(defhydra hydra-dired-doc (:foreign-keys run :hint nil)
  "
%s(formated-docs)
  _?_ 打开/关闭此文档
"
  ("?" nil))

(define-key dired-mode-map (kbd "?") 'hydra-dired-doc/body)

不足之处:

  1. 文档格式化太死板了,不能自适应宽度、自动对齐;
  2. 不能跟着dired出现、消失;
  3. 用minibuffer还是不如跟在dired自己的buffer里好看,尤其多window的时候,或许能用popup / header-line / overlay之类的实现?
1 个赞