(let
[api vim.api
fun vim.fn
opt vim.opt
name :Scratch]
(api.nvim_create_user_command
name
(fn [args]
(let
[filetype (if (= args.args "") :markdown args.args)
bufname (.. name " " filetype)
set-buf (partial api.nvim_win_set_buf 0)]
(case (fun.bufnr bufname)
(where bufnr (> bufnr -1)) (set-buf bufnr)
_
(let [bufnr (api.nvim_create_buf true true)]
(api.nvim_buf_set_name bufnr bufname)
(set-buf bufnr)))
(set opt.filetype filetype)
(api.nvim_buf_set_name 0 bufname)))
{:complete :filetype
:force true
:nargs :?})
(api.nvim_create_autocmd
:BufDelete
{:callback
(fn [] ; Deleting and wiping out should be the same
(when (vim.startswith (fun.bufname) name)
(set opt.bufhidden :wipe)))
:group (api.nvim_create_augroup :scratch {:clear true})}))