cli-talky-talk 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/bin/speak +26 -1
- data/config/preferences.yml +51 -0
- data/lib/cli-talky-talk.rb +55 -40
- data/lib/cli_talky_talk/version.rb +1 -1
- metadata +3 -3
- data/speak +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76dcd913db3f96743a0436b6a10294d3d9ea026c
|
4
|
+
data.tar.gz: 35f5808942746b3826925b539af1af5475d2e12b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60ec7e91d34a5af615fb42388b6ed993c313a8288e2c28c9a1396d931dd57635403efeb478908e5b2009fbb066b1ae9ed540d5857ba45e2f6edc21e1b126db91
|
7
|
+
data.tar.gz: ad0fbb9375a4ba31545c7e79203f58c365831a839a40bb5270ac7600a7fb15d07f5e54b6e48d8623a3d7616eb5a00d22dcc66222d7d1643586b89375adc42cb3
|
data/README.md
CHANGED
@@ -12,6 +12,12 @@ cli-talky-talk is very easy to use. All you need to do is add `&& speak` at the
|
|
12
12
|
> <some terminal command that will take a while> && speak
|
13
13
|
```
|
14
14
|
|
15
|
+
For all options:
|
16
|
+
|
17
|
+
```
|
18
|
+
speak --help
|
19
|
+
```
|
20
|
+
|
15
21
|
## Installation
|
16
22
|
|
17
23
|
Add this line to your application's Gemfile:
|
data/bin/speak
CHANGED
@@ -4,6 +4,7 @@ require 'optparse'
|
|
4
4
|
require 'ostruct'
|
5
5
|
require 'bundler/setup'
|
6
6
|
require 'cli-talky-talk'
|
7
|
+
require 'fileutils'
|
7
8
|
|
8
9
|
options = OpenStruct.new
|
9
10
|
|
@@ -26,7 +27,31 @@ OptionParser.new do |opts|
|
|
26
27
|
options.voice = voice
|
27
28
|
end
|
28
29
|
|
30
|
+
opts.on('--install') do
|
31
|
+
source_path = File.expand_path('../../', __FILE__) + '/config/preferences.yml'
|
32
|
+
target_path = Dir.home + '/.cli-talky-talk.yml'
|
33
|
+
FileUtils.cp source_path, target_path
|
34
|
+
puts "Preferences file copied to: #{target_path}"
|
35
|
+
exit 0
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on('--list-voices') do
|
39
|
+
talker = CliTalkyTalk.new
|
40
|
+
blacklist = talker.preferences['options']['voice']['blacklist'] || []
|
41
|
+
puts talker.voices - blacklist
|
42
|
+
if blacklist
|
43
|
+
puts "-" * 30
|
44
|
+
puts "blacklisted: \n#{blacklist}"
|
45
|
+
end
|
46
|
+
exit 0
|
47
|
+
end
|
48
|
+
|
29
49
|
end.parse!
|
30
50
|
|
31
51
|
talker = CliTalkyTalk.new(options)
|
32
|
-
|
52
|
+
begin
|
53
|
+
talker.speak
|
54
|
+
rescue RuntimeError => e
|
55
|
+
puts "Error: #{e}"
|
56
|
+
exit 1
|
57
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# This file is used with the cli-talky-talk gem
|
2
|
+
options:
|
3
|
+
voice:
|
4
|
+
whitelist:
|
5
|
+
blacklist:
|
6
|
+
- Trinoids
|
7
|
+
- Good News
|
8
|
+
- Bad News
|
9
|
+
- Bubbles
|
10
|
+
- Veena
|
11
|
+
- Boing
|
12
|
+
- Pipe Organ
|
13
|
+
- Albert
|
14
|
+
- Tessa
|
15
|
+
- Bahh
|
16
|
+
- Deranged
|
17
|
+
- Hysterical
|
18
|
+
- Whisper
|
19
|
+
- Bells
|
20
|
+
|
21
|
+
segments:
|
22
|
+
greetings:
|
23
|
+
- ahoy
|
24
|
+
- greeting
|
25
|
+
- saalutations
|
26
|
+
- waazame
|
27
|
+
- bleep booop
|
28
|
+
- exceslior
|
29
|
+
- land hoe
|
30
|
+
- hail
|
31
|
+
|
32
|
+
names:
|
33
|
+
- WHOAMI
|
34
|
+
- Govna
|
35
|
+
- captain
|
36
|
+
- boss
|
37
|
+
- cheef
|
38
|
+
- over loard
|
39
|
+
- dragon commander
|
40
|
+
- your excellence
|
41
|
+
- exhaulted one
|
42
|
+
|
43
|
+
statuses:
|
44
|
+
- all done here
|
45
|
+
- works done
|
46
|
+
- bingo!
|
47
|
+
- hazaa
|
48
|
+
- flip Yeah
|
49
|
+
- get back to work
|
50
|
+
- all systems go
|
51
|
+
|
data/lib/cli-talky-talk.rb
CHANGED
@@ -1,61 +1,40 @@
|
|
1
1
|
require 'pry'
|
2
|
+
require 'yaml'
|
3
|
+
|
2
4
|
class CliTalkyTalk
|
3
5
|
|
4
|
-
attr_accessor :options
|
6
|
+
attr_accessor :options, :preferences
|
5
7
|
|
6
|
-
def initialize(options)
|
8
|
+
def initialize(options=nil)
|
7
9
|
@options = options || OpenStruct.new
|
10
|
+
begin
|
11
|
+
personal_pref_path = Dir.home + '/.cli-talky-talk.yml'
|
12
|
+
default_path = File.expand_path('../../', __FILE__) + '/config/preferences.yml'
|
13
|
+
[personal_pref_path, default_path].each do |path|
|
14
|
+
if File.exist? path
|
15
|
+
@preferences = YAML.load_file(path)
|
16
|
+
log "using preferences from: #{path}"
|
17
|
+
break
|
18
|
+
end
|
19
|
+
end
|
20
|
+
raise "unable to load preferences" unless @preferences
|
21
|
+
rescue Psych::SyntaxError => e
|
22
|
+
raise "There was an error parsing the config file: #{e}"
|
23
|
+
end
|
8
24
|
end
|
9
25
|
|
10
|
-
VOICES = `say -v \?`.split("\n").select { |v| v =~ /en_/ }.map { |v| v.gsub(/\s+en_US.*$/,"")}
|
11
|
-
|
12
|
-
GREETINGS = [
|
13
|
-
'ahoy',
|
14
|
-
'greeting',
|
15
|
-
'saalutations',
|
16
|
-
'waazame',
|
17
|
-
'bleep booop',
|
18
|
-
'exceslior',
|
19
|
-
'land hoe',
|
20
|
-
'hail',
|
21
|
-
]
|
22
|
-
|
23
|
-
NAMES = [
|
24
|
-
`whoami`.chomp,
|
25
|
-
'Govna',
|
26
|
-
'captain',
|
27
|
-
'boss',
|
28
|
-
'cheef',
|
29
|
-
'over loard',
|
30
|
-
'dragon commander',
|
31
|
-
'your excellence',
|
32
|
-
'exhaulted one',
|
33
|
-
]
|
34
|
-
|
35
|
-
STATUSES = [
|
36
|
-
'all done here',
|
37
|
-
'works done',
|
38
|
-
'bingo!',
|
39
|
-
'hazaa',
|
40
|
-
'flip Yeah',
|
41
|
-
'get back to work',
|
42
|
-
'all systems go',
|
43
|
-
]
|
44
|
-
|
45
26
|
def rand(arr)
|
46
27
|
arr.sample
|
47
28
|
end
|
48
29
|
|
49
30
|
def speak
|
50
|
-
voice = options.voice || rand(VOICES)
|
51
|
-
log "voice: #{voice}"
|
52
31
|
sentence = options.sentence || random_sentence
|
53
32
|
log "sentence: #{sentence}"
|
54
33
|
`say -v#{voice} #{sentence}`
|
55
34
|
end
|
56
35
|
|
57
36
|
def random_sentence
|
58
|
-
"#{
|
37
|
+
"#{get :greetings}, #{get :names}! #{get :statuses}"
|
59
38
|
end
|
60
39
|
|
61
40
|
def log(str)
|
@@ -63,4 +42,40 @@ class CliTalkyTalk
|
|
63
42
|
puts str
|
64
43
|
end
|
65
44
|
end
|
45
|
+
|
46
|
+
def get(key)
|
47
|
+
str = rand preferences['segments'][key.to_s]
|
48
|
+
# convert for specific keyword tokens
|
49
|
+
case str
|
50
|
+
when 'WHOAMI'
|
51
|
+
`whoami`.chomp
|
52
|
+
else
|
53
|
+
str
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def voice
|
58
|
+
voice_opts = preferences['options']['voice']
|
59
|
+
whitelist = voice_opts['whitelist']
|
60
|
+
blacklist = voice_opts['blacklist']
|
61
|
+
|
62
|
+
voice = if options.voice
|
63
|
+
options.voice
|
64
|
+
elsif whitelist.kind_of?(Array)
|
65
|
+
rand whitelist
|
66
|
+
else
|
67
|
+
avail_voices = voices - blacklist if blacklist.kind_of?(Array)
|
68
|
+
rand avail_voices
|
69
|
+
end
|
70
|
+
log "voice: #{voice}"
|
71
|
+
voice
|
72
|
+
end
|
73
|
+
|
74
|
+
def voices
|
75
|
+
`say -v \?`.split("\n").select { |v| v =~ /en_/ }.map { |v| v.gsub(/\s+en_[A-Z]{2}.*$/,"")}
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.voices
|
79
|
+
self.new.voices
|
80
|
+
end
|
66
81
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli-talky-talk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean McCleary
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,9 +69,9 @@ files:
|
|
69
69
|
- Rakefile
|
70
70
|
- bin/speak
|
71
71
|
- cli-talky-talk.gemspec
|
72
|
+
- config/preferences.yml
|
72
73
|
- lib/cli-talky-talk.rb
|
73
74
|
- lib/cli_talky_talk/version.rb
|
74
|
-
- speak
|
75
75
|
homepage: https://github.com/mrinterweb/cli-talky-talk
|
76
76
|
licenses:
|
77
77
|
- MIT
|
data/speak
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
# Some of the words are misspelled to help the say program pronounce them right
|
3
|
-
#
|
4
|
-
# copy the following line and paste for fun!
|
5
|
-
# curl -O https://gist.githubusercontent.com/mrinterweb/0ed2ac30a97e25e03fad/raw/e56fdb4940e0222f45cc6255c6673ffccce9acef/speak.rb && mv speak.rb talk && chmod a+x speak && ./speak
|
6
|
-
|
7
|
-
# get a list of all possible voices
|
8
|
-
voices = `say -v \?`.split("\n").select { |v| v =~ /en_US/ }.map { |v| v.gsub(/\s+en_US.*$/,"")}
|
9
|
-
greetings = [
|
10
|
-
'ahoy',
|
11
|
-
'greeting',
|
12
|
-
'saalutations',
|
13
|
-
'waazame',
|
14
|
-
'bleep booop',
|
15
|
-
'exceslior',
|
16
|
-
'land hoe',
|
17
|
-
'hail',
|
18
|
-
]
|
19
|
-
names = [
|
20
|
-
`whoami`.chomp,
|
21
|
-
'Govna',
|
22
|
-
'captain',
|
23
|
-
'boss',
|
24
|
-
'cheef',
|
25
|
-
'over loard',
|
26
|
-
'dragon commander',
|
27
|
-
'your excellence',
|
28
|
-
'exhaulted one',
|
29
|
-
]
|
30
|
-
statuses = [
|
31
|
-
'all done here',
|
32
|
-
'works done',
|
33
|
-
'bingo!',
|
34
|
-
'hazaa',
|
35
|
-
'flip Yeah',
|
36
|
-
'get back to work',
|
37
|
-
'all systems go',
|
38
|
-
]
|
39
|
-
r = ->(arr) { arr.sample }
|
40
|
-
str = "#{r[greetings]}, #{r[names]}! #{r[statuses]}"
|
41
|
-
`say -v#{r[voices]} #{str}`
|