怎么为一个命令设置默认参数?

动机是 org-ql-search 这个命令, 它的参数情况如下:

(org-ql-search BUFFERS-FILES QUERY &key NARROW SUPER-GROUPS SORT TITLE (BUFFER
org-ql-view-buffer))

每次我都要重复选择 SORT, SUPER-GROUPS 等参数, 大概就像这样:

我希望每次它只问我 query, 也就是: image

其它的都用我设定的默认值.

我能想到一种办法, 就是改 org-ql-search 的代码, 想请教道友, 有没有比这个更好的做法?

你可以自己定义个函数, 函数内容就是运行带默认值的 org-ql-search

理清楚需求和后果。

  1. 想要修改 org-ql-search 以及所有调用该函数的函数的行为,就用 advice :around 替换默认参数。
  2. 只想修改某个特定情形下的 org-ql-search 行为,就按 #2 楼说的,自定义一个新的函数。
(defun my/org-ql-search-in-org-directories(query)
(interactive (list (read-string "Query: " (when org-ql-view-query
                                              (format "%S" org-ql-view-query)))))
(org-ql-search (org-ql-view--expand-buffers-files "all") query)
  )

本来我以为是重写 org-ql-search, 结果发现加一个包装函数就好.