Here’s an Idea how one can implement recent files in Kakoune:
hook global BufOpenFile .* recentf-add-file
hook global BufWritePost .* recentf-add-file
declare-option str recentf_file "%val{config}/.recentf"
declare-option int max_recentf_files 45
define-command -hidden recentf-add-file %{ nop %sh{
if ! grep -q "${kak_buffile}" "${kak_opt_recentf_file}"; then
printf "%s\n%s\n" "${kak_buffile}" "$(cat ${kak_opt_recentf_file})" > ${kak_opt_recentf_file}
printf "%s\n" "$(head -${kak_opt_max_recentf_files} ${kak_opt_recentf_file})" > ${kak_opt_recentf_file}
fi
}}
define-command recentf -params 1 -shell-script-candidates %{ cat ${kak_opt_recentf_file} } %{ edit -existing %arg{1} }
The only thing I don’t really like about this implementation is that -shell-script-candidates
sorts candidates and most recent files are no longer at the top of the list. I could use -shell-script-completion
as it doesn’t do sorting, but it doesn’t allow fuzzy matching.