--============================================================================= -- spinners.lua --- spinners api -- Copyright (c) 2016-2022 Wang Shidong & Contributors -- Author: Wang Shidong < wsdjeg@outlook.com > -- URL: https://spacevim.org -- License: GPLv3 --============================================================================= local M = {} local log = require('spacevim.logger').derive('spinners') M._data = { dot1 = { frames = { '⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏' }, strwidth = 1, timeout = 80, }, } M._id = 0 function M.Onframe(...) if M.index < #M.spinners then M.index = M.index + 1 else M.index = 1 end if type(M.func) == 'function' then local ok, err = pcall(M.func, M.spinners[M.index]) if not ok then log.debug('failed to call spinners functions:\n') log.debug(err) end end end function M.stop() if M.timer_id then vim.fn.timer_stop(M.timer_id) M.timer_id = nil end end -- if var is a function, then the function will be called with one argv function M.apply(name, var) local data = M._data[name] if not data then log.debug('faile to apply spinners, no data named ' .. name) return end local time = data.timeout or 80 M.index = 1 M.spinners = M._data[name].frames if type(var) == 'function' then M.func = var M.func(M.spinners[M.index]) end M.timer_id = vim.fn.timer_start(time, M.Onframe, { ['repeat'] = -1 }) return { M.timer_id, M._data[name].strwidth } end function M.get_str() return M.str end return M