local M = {}

function M.getchar(...)
  if vim.fn.empty(vim.g._spacevim_input_list) == 0 then
    local input_list = vim.g._spacevim_input_list
    local input_timeout = vim.g._spacevim_input_timeout or 0
    if input_timeout > 0 then
      vim.cmd('sleep ' .. input_timeout .. 'm')
    end
    local char = table.remove(input_list, 1)
    vim.g._spacevim_input_list = input_list
    return char

  end
  local status, ret = pcall(vim.fn.getchar, ...)
  if not status then
    ret = 3
  end
  if type(ret) == 'number' then
    return vim.fn.nr2char(ret)
  else
    return ret
  end
end

function M.setbufvar(buf, opts)
  
end

function M.getchar2nr(...)
  local status, ret = pcall(vim.fn.getchar, ...)
  if not status then
    ret = 3
  end
  if type(ret) == 'number' then
    return ret
  else
    return vim.fn.char2nr(ret)
  end
end

function M.empty(expr)
  return vim.fn.empty(expr) == 1
end

function M.executable(bin)
  return vim.fn.executable(bin) == 1
end

function M.is_qf_win(winnr)
  
end

return M