diff options
Diffstat (limited to 'xmake/modules/utils')
| -rw-r--r-- | xmake/modules/utils/progress.lua | 56 | ||||
| -rw-r--r-- | xmake/modules/utils/waiting_indicator.lua | 83 |
2 files changed, 83 insertions, 56 deletions
diff --git a/xmake/modules/utils/progress.lua b/xmake/modules/utils/progress.lua index 60066ddc5..9cc4c53ac 100644 --- a/xmake/modules/utils/progress.lua +++ b/xmake/modules/utils/progress.lua @@ -20,61 +20,17 @@ -- imports import("core.base.option") -import("core.base.object") import("core.base.colors") import("core.base.tty") import("core.base.scheduler") import("core.theme.theme") import("core.project.project") --- define module -local progress = progress or object { _init = { "_RUNNING", "_INDEX", "_STREAM", "_OPT" } } - -- cache color strings local COLOR_SUPERSLOW = "${color.build.progress_superslow}" local COLOR_VERYSLOW = "${color.build.progress_veryslow}" local COLOR_SLOW = "${color.build.progress_slow}" --- stop the progress indicator, clear written frames -function progress:stop() - if self._RUNNING ~= 0 then - self:clear() - self._RUNNING = 0 - self._INDEX = 0 - end -end - -function progress:_clear() - if self._RUNNING == 1 then - tty.erase_line_to_end() - self._RUNNING = 2 - return true - end -end - --- clear previous frame of the progress indicator -function progress:clear() - if self:_clear() then - self._STREAM:flush() - end -end - --- write next frame of the progress indicator -function progress:write() - local chars = self._OPT.chars[self._INDEX % #self._OPT.chars + 1] - tty.cursor_and_attrs_save() - self._STREAM:write(chars) - self._STREAM:flush() - tty.cursor_and_attrs_restore() - self._INDEX = self._INDEX + 1 - self._RUNNING = 1 -end - --- check if the progress indicator is running -function progress:running() - return self._RUNNING and true or false -end - -- is scroll output? function _is_scroll() local is_scroll = _g.is_scroll @@ -475,15 +431,3 @@ function text(progress, format, ...) end end --- build a progress indicator --- @params stream - stream to write to, will use io.stdout if not provided --- @params opt - options --- - chars - an array of chars for progress indicator -function new(stream, opt) - stream = stream or io.stdout - opt = opt or {} - if opt.chars == nil or #opt.chars == 0 then - opt.chars = theme.get("text.spinner.chars") - end - return progress {_OPT = opt, _STREAM = stream, _RUNNING = 0, _INDEX = 0} -end diff --git a/xmake/modules/utils/waiting_indicator.lua b/xmake/modules/utils/waiting_indicator.lua new file mode 100644 index 000000000..afa5cfb6d --- /dev/null +++ b/xmake/modules/utils/waiting_indicator.lua @@ -0,0 +1,83 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, Xmake Open Source Community. +-- +-- @author ruki +-- @file waiting_indicator.lua +-- + +-- imports +import("core.base.object") +import("core.base.tty") +import("core.theme.theme") + +-- define module +local waiting_indicator = waiting_indicator or object { _init = { "_RUNNING", "_INDEX", "_STREAM", "_OPT" } } + +-- stop the waiting indicator, clear written frames +function waiting_indicator:stop() + if self._RUNNING ~= 0 then + self:clear() + self._RUNNING = 0 + self._INDEX = 0 + end +end + +function waiting_indicator:_clear() + if self._RUNNING == 1 then + tty.erase_line_to_end() + self._RUNNING = 2 + return true + end +end + +-- clear previous frame of the waiting indicator +function waiting_indicator:clear() + if self:_clear() then + self._STREAM:flush() + end +end + +-- write next frame of the waiting indicator +function waiting_indicator:write() + local chars = self._OPT.chars[self._INDEX % #self._OPT.chars + 1] + tty.cursor_and_attrs_save() + self._STREAM:write(chars) + self._STREAM:flush() + tty.cursor_and_attrs_restore() + self._INDEX = self._INDEX + 1 + self._RUNNING = 1 +end + +-- check if the waiting indicator is running +function waiting_indicator:running() + return self._RUNNING and true or false +end + +-- build a waiting indicator +-- @params stream - stream to write to, will use io.stdout if not provided +-- @params opt - options +-- - chars - an array of chars for waiting indicator +function new(stream, opt) + stream = stream or io.stdout + opt = opt or {} + if opt.chars == nil or #opt.chars == 0 then + opt.chars = theme.get("text.spinner.chars") + end + return waiting_indicator {_OPT = opt, _STREAM = stream, _RUNNING = 0, _INDEX = 0} +end + +return {new = new} + |
