CLI UI一个用于生成漂亮命令行用户界面的小型框架

网友投稿 1337 2022-10-14

CLI UI一个用于生成漂亮命令行用户界面的小型框架

CLI UI一个用于生成漂亮命令行用户界面的小型框架

CLI UI

CLI UI is a small framework for generating nice command-line user interfaces

Master DocumentationDocumentation of the Rubygems versionRubygems

Installation

gem install cli-ui

or add the following to your Gemfile:

gem 'cli-ui'

In your code, simply add a require 'cli/ui'. Most options assume CLI::UI::StdoutRouter.enable has been called.

Features

This may not be an exhaustive list. Please check our documentation for more information.

Nested framing

To handle content flow (see example below)

CLI::UI::StdoutRouter.enableCLI::UI::Frame.open('Frame 1') do CLI::UI::Frame.open('Frame 2') { puts "inside frame 2" } puts "inside frame 1"end

Interactive Prompts

Prompt user with options and ask them to choose. Can answer using arrow keys, vim bindings (j/k), or numbers (or y/n for yes/no questions).

For large numbers of options, using e, :, or G will toggle "line select" mode which allows numbers greater than 9 to be typed and f or / will allow the user to filter options using a free-form text input.

CLI::UI.ask('What language/framework do you use?', options: %w(rails go ruby python))

Can also assign callbacks to each option

CLI::UI::Prompt.ask('What language/framework do you use?') do |handler| handler.option('rails') { |selection| selection } handler.option('go') { |selection| selection } handler.option('ruby') { |selection| selection } handler.option('python') { |selection| selection }end

Note that the two examples provided above are identical in functionality

Free form text prompts

CLI::UI.ask('Is CLI UI Awesome?', default: 'It is great!')

Spinner groups

Handle many multi-threaded processes while suppressing output unless there is an issue. Can update title to show state.

spin_group = CLI::UI::SpinGroup.newspin_group.add('Title') { |spinner| sleep 3.0 }spin_group.add('Title 2') { |spinner| sleep 3.0; spinner.update_title('New Title'); sleep 3.0 }spin_group.wait

Text Color formatting

e.g. {{red:Red}} {{green:Green}}

puts CLI::UI.fmt "{{red:Red}} {{green:Green}}"

Symbol/Glyph Formatting

e.g. {{*}} => a yellow ⭑

puts CLI::UI.fmt "{{*}} {{v}} {{?}} {{x}}"

Status Widget

CLI::UI::Spinner.spin("building packages: {{@widget/status:1:2:3:4}}") do |spinner| # spinner.update_title(...) sleep(3)end

Progress Bar

Show progress of a process or operation.

CLI::UI::Progress.progress do |bar| 100.times do bar.tick endend

Frame Styles

Modify the appearance of CLI::UI both globally and on an individual frame level.

To set the default style:

CLI::UI.frame_style = :box

To style an individual frame:

CLI::UI.frame('New Style!', frame_style: :bracket) { puts 'It's pretty cool!' }

The default style - :box - is what has been used up until now. The other style - :bracket - looks like this:

CLI::UI.frame_style = :bracketCLI::UI::StdoutRouter.enableCLI::UI::Frame.open('Frame 1') do CLI::UI::Frame.open('Frame 2') { puts "inside frame 2" } puts "inside frame 1"end

Example Usage

The following code makes use of nested-framing, multi-threaded spinners, formatted text, and more.

require 'cli/ui'CLI::UI::StdoutRouter.enableCLI::UI::Frame.open('{{*}} {{bold:a}}', color: :green) do CLI::UI::Frame.open('{{i}} b', color: :magenta) do CLI::UI::Frame.open('{{?}} c', color: :cyan) do sg = CLI::UI::SpinGroup.new sg.add('wow') do |spinner| sleep(2.5) spinner.update_title('second round!') sleep (1.0) end sg.add('such spin') { sleep(1.6) } sg.add('many glyph') { sleep(2.0) } sg.wait end end CLI::UI::Frame.divider('{{v}} lol') puts CLI::UI.fmt '{{info:words}} {{red:oh no!}} {{green:success!}}' sg = CLI::UI::SpinGroup.new sg.add('more spins') { sleep(0.5) ; raise 'oh no' } sg.waitend

Output:

Development

Run tests using bundle exec rake test. All code should be tested.No code, outside of development and tests needs, should use dependencies. This is a self contained library

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/cli-ui.

License

The code is available as open source under the terms of the MIT License.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:验证码图片生成
下一篇:面向对象_什么时候定义成员变量
相关文章

 发表评论

暂时没有评论,来抢沙发吧~