function inserttemplate(n,delsel)
    if (delsel) then
        local mode = vim.fn.mode()
        print("mode is " .. mode)
        local vis = vim.fn.getpos("v")
        sl = vis[2] - 1
        sc = vis[3] - 1
        local cpos = vim.api.nvim_win_get_cursor(0)
        el = cpos[1] - 1
        ec = cpos[2]
        if ((el < sl) or ((el == sl) and (ec < sc))) then
            sl, sc, el, ec = el, ec, sl, sc
        end
        if (mode == "V") then
            vim.api.nvim_buf_set_lines(0,sl,el+1,false,{})
        else
            vim.api.nvim_buf_set_text(0,sl,sc,el,ec,{})
        end
    end
    local ft = vim.opt_local.filetype:get()
    local fn = vim.env.HOME .. '/.config/nvim/templates/' .. ft ..
        tostring(n) .. '.template'
    if (vim.fn.filereadable(fn) == 0) then
        vim.api.nvim_err_writeln(ft .. tostring(n) .. 
            '.template not found')
        return
    end
    local file = io.open(fn,"r")
    local templatelines = {}
    for line in file:lines() do
        table.insert(templatelines, line);
    end
    file:close()
    vim.api.nvim_buf_set_lines(0,0,0,false,templatelines)
    vim.api.nvim_win_set_cursor(0,{1,0})
end

return inserttemplate