From a7b2e9a6f3ff689aeb1d92cce72f6efb4d9d8b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=C5=9Fk=C4=B1n=20Gedik?= Date: Wed, 30 Dec 2015 13:55:14 +0200 Subject: [PATCH] init --- README.md | 20 ++++++++++++-------- examples/all.cr | 8 ++++++++ examples/color.cr | 11 +++++++++++ examples/pavyon.cr | 12 ++++++++++++ examples/simple.cr | 19 +++++++++++++++++++ images/all.gif | Bin 0 -> 85869 bytes src/spinner.cr | 37 +++++++++++++++++++++++++++++++++++-- src/spinner/charset.cr | 32 ++++++++++++++++++++++++++++++++ 8 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 examples/all.cr create mode 100644 examples/color.cr create mode 100644 examples/pavyon.cr create mode 100644 examples/simple.cr create mode 100644 images/all.gif create mode 100644 src/spinner/charset.cr diff --git a/README.md b/README.md index 9de936f..b2c4c68 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ -# spinner +# Spinner -TODO: Write a description here +Terminal Spinner for Crystal Programming Language + +![All](/images/all.gif) ## Installation - Add this to your application's `shard.yml`: ```yaml @@ -13,20 +14,23 @@ dependencies: github: askn/spinner ``` - ## Usage ```crystal require "spinner" + +sp = Spin.new +sp.start +sleep 3 +sp.stop ``` +## Options -TODO: Write usage instructions here +`delay`: `default = 0.1` -## Development - -TODO: Write development instructions here +`chars`: you can choose charset from [CHARSET](src/spinner/charset.cr) `default = CHARSET[:pipe]` ## Contributing diff --git a/examples/all.cr b/examples/all.cr new file mode 100644 index 0000000..e843557 --- /dev/null +++ b/examples/all.cr @@ -0,0 +1,8 @@ +require "../src/spinner" + +CHARSET.values.each do |chars| + sp = Spin.new(0.1, chars) + sp.start + sleep 2 + sp.stop +end diff --git a/examples/color.cr b/examples/color.cr new file mode 100644 index 0000000..76583bd --- /dev/null +++ b/examples/color.cr @@ -0,0 +1,11 @@ +require "../src/spinner" +require "colorize" + +chars = CHARSET[:arrow].map do |c| + c.colorize(:light_green) +end + +spin = Spin.new(0.2, chars) +spin.start +sleep 3 +spin.stop diff --git a/examples/pavyon.cr b/examples/pavyon.cr new file mode 100644 index 0000000..e303f05 --- /dev/null +++ b/examples/pavyon.cr @@ -0,0 +1,12 @@ +require "../src/spinner" +require "colorize" + +colors = {:red, :light_red, :yellow, :green, :light_blue, :blue, :magenta} +chars = colors.map do |color| + ".xXx.".colorize(color) +end + +spin = Spin.new(0.01, chars) +spin.start +sleep 3 +spin.stop diff --git a/examples/simple.cr b/examples/simple.cr new file mode 100644 index 0000000..1a43138 --- /dev/null +++ b/examples/simple.cr @@ -0,0 +1,19 @@ +require "../src/spinner" + +puts "starting..." +sp = Spin.new(0.1) +sp.start +sleep 3 +sp.stop +puts "end!" + +sp1 = Spin.new(0.1, CHARSET[:three_dots]) +sp1.start +sleep 3 +sp1.stop + +sp1 = Spin.new(0.1) +sp1.chars = CHARSET[:arrow] +sp1.start +sleep 3 +sp1.stop diff --git a/images/all.gif b/images/all.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f998c9e9e47c67bf27fc8fcdb9c985a3a28b928 GIT binary patch literal 85869 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 NxSoL|;Sj)re*-ozcpm@& literal 0 HcmV?d00001 diff --git a/src/spinner.cr b/src/spinner.cr index 4b0c6f3..d2811e3 100644 --- a/src/spinner.cr +++ b/src/spinner.cr @@ -1,5 +1,38 @@ require "./spinner/*" -module Spinner - # TODO Put your code here +class Spin + property delay, chars + + CL = STDOUT.tty? ? "\u001b[0G" : "\u000d \u000d" + CLEAR = STDOUT.tty? ? "\u001b[2K" : "\u000d" + + def initialize(@delay = 0.1, @chars = CHARSET[:pipe]) + @state = true + end + + def stop + @state = false + print CLEAR + end + + private def clear(count) + print CL * count + end + + def start + spawn do + i = 0 + while @state + chars = @chars[i % @chars.size] + + print "#{chars}" + # to_s for colorize + clear(chars.to_s.size) + + sleep @delay + + i += 1 + end + end + end end diff --git a/src/spinner/charset.cr b/src/spinner/charset.cr new file mode 100644 index 0000000..5bce012 --- /dev/null +++ b/src/spinner/charset.cr @@ -0,0 +1,32 @@ +CHARSET = { + arrow: {"←", "↖", "↑", "↗", "→", "↘", "↓", "↙"}, + fan: {"┤", "┘", "┴", "└", "├", "┌", "┬", "┐"}, + fan1: {"+", "x"}, + fan2: {"v", "<", "^", ">"}, + triangle: {"◢", "◣", "◤", "◥"}, + square: {"◰", "◳", "◲", "◱"}, + circle: {"◴", "◷", "◶", "◵"}, + big_circle: {"◐", "◓", "◑", "◒"}, + boom: {".", "o", "O", "@", "*"}, + pipe: {"|", "/", "-", "\\"}, + alphabet: {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}, + three_dots: {". ", ".. ", "..."}, + eyes: {"◡◡", "⊙⊙", "◠◠"}, + dots: {"⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"}, + snake: {"⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"}, + snake1: {"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}, + snake2: {"⠋", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋"}, + square1: {"■", "□", "▪", "▫"}, + square2: {"▖", "▘", "▝", "▗"}, + square3: {"▁", "▃", "▄", "▅", "▆", "▇", "█", "▇", "▆", "▅", "▄", "▃", "▁"}, + square4: {"▉", "▊", "▋", "▌", "▍", "▎", "▏", "▎", "▍", "▌", "▋", "▊", "▉"}, + square5: {"▁", "▂", "▃", "▄", "▅", "▆", "▇", "█", "▉", "▊", "▋", "▌", "▍", "▎", "▏", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█", "▇", "▆", "▅", "▄", "▃", "▂", "▁"}, + thin_arrow: {"←", "↑", "→", "↓"}, + big_arraw: {"⇐", "⇖", "⇑", "⇗", "⇒", "⇘", "⇓", "⇙"}, + baloon: {".", "o", "O", "°", "O", "o", "."}, + progress: {"[ ]", "[= ]", "[== ]", "[=== ]", "[==== ]", "[===== ]", "[====== ]", "[======= ]", "[======== ]", "[========= ]", "[==========]"}, + progress1: {"(*---------)", "(-*--------)", "(--*-------)", "(---*------)", "(----*-----)", "(-----*----)", "(------*---)", "(-------*--)", "(--------*-)", "(---------*)"}, + progress2: {"█▒▒▒▒▒▒▒▒▒", "███▒▒▒▒▒▒▒", "█████▒▒▒▒▒", "███████▒▒▒", "██████████"}, + progress3: {"[ ]", "[=> ]", "[===> ]", "[=====> ]", "[======> ]", "[========> ]", "[==========> ]", "[============> ]", "[==============> ]", "[================> ]", "[==================> ]", "[===================>]"}, + fish: {">))'> ", " >))'> ", " >))'> ", " >))'> ", " >))'>", " <'((<", " <'((< ", " <'((< ", " <'((< ", "<'((< "}, +}