yap-shell 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +9 -24
- data/Gemfile +1 -5
- data/LICENSE.txt +17 -18
- data/README.md +28 -14
- data/Rakefile +4 -1
- data/bin/yap +1 -3
- data/lib/.gitkeep +0 -0
- data/yap-shell.gemspec +12 -11
- metadata +19 -184
- data/.rspec +0 -2
- data/.travis.yml +0 -11
- data/DESIGN.md +0 -87
- data/Gemfile.travis +0 -8
- data/Gemfile.travis.lock +0 -104
- data/WISHLIST.md +0 -54
- data/bin/yap-dev +0 -45
- data/lib/tasks/gem.rake +0 -62
- data/lib/yap.rb +0 -52
- data/lib/yap/addon.rb +0 -24
- data/lib/yap/addon/base.rb +0 -52
- data/lib/yap/addon/export_as.rb +0 -12
- data/lib/yap/addon/loader.rb +0 -84
- data/lib/yap/addon/path.rb +0 -56
- data/lib/yap/addon/rc_file.rb +0 -21
- data/lib/yap/addon/reference.rb +0 -22
- data/lib/yap/cli.rb +0 -4
- data/lib/yap/cli/commands.rb +0 -6
- data/lib/yap/cli/commands/addon.rb +0 -14
- data/lib/yap/cli/commands/addon/disable.rb +0 -35
- data/lib/yap/cli/commands/addon/enable.rb +0 -35
- data/lib/yap/cli/commands/addon/list.rb +0 -37
- data/lib/yap/cli/commands/addon/search.rb +0 -99
- data/lib/yap/cli/commands/generate.rb +0 -13
- data/lib/yap/cli/commands/generate/addon.rb +0 -258
- data/lib/yap/cli/commands/generate/addonrb.template +0 -22
- data/lib/yap/cli/commands/generate/gemspec.template +0 -25
- data/lib/yap/cli/commands/generate/license.template +0 -21
- data/lib/yap/cli/commands/generate/rakefile.template +0 -6
- data/lib/yap/cli/commands/generate/readme.template +0 -40
- data/lib/yap/cli/options.rb +0 -162
- data/lib/yap/cli/options/addon.rb +0 -64
- data/lib/yap/cli/options/addon/disable.rb +0 -62
- data/lib/yap/cli/options/addon/enable.rb +0 -63
- data/lib/yap/cli/options/addon/list.rb +0 -65
- data/lib/yap/cli/options/addon/search.rb +0 -76
- data/lib/yap/cli/options/generate.rb +0 -59
- data/lib/yap/cli/options/generate/addon.rb +0 -63
- data/lib/yap/configuration.rb +0 -74
- data/lib/yap/gem_helper.rb +0 -195
- data/lib/yap/gem_tasks.rb +0 -6
- data/lib/yap/shell.rb +0 -116
- data/lib/yap/shell/aliases.rb +0 -58
- data/lib/yap/shell/builtins.rb +0 -18
- data/lib/yap/shell/builtins/alias.rb +0 -42
- data/lib/yap/shell/builtins/cd.rb +0 -57
- data/lib/yap/shell/builtins/env.rb +0 -11
- data/lib/yap/shell/commands.rb +0 -163
- data/lib/yap/shell/evaluation.rb +0 -439
- data/lib/yap/shell/evaluation/shell_expansions.rb +0 -99
- data/lib/yap/shell/event_emitter.rb +0 -18
- data/lib/yap/shell/execution.rb +0 -16
- data/lib/yap/shell/execution/builtin_command_execution.rb +0 -20
- data/lib/yap/shell/execution/command_execution.rb +0 -30
- data/lib/yap/shell/execution/context.rb +0 -128
- data/lib/yap/shell/execution/file_system_command_execution.rb +0 -137
- data/lib/yap/shell/execution/result.rb +0 -18
- data/lib/yap/shell/execution/ruby_command_execution.rb +0 -80
- data/lib/yap/shell/execution/shell_command_execution.rb +0 -30
- data/lib/yap/shell/prompt.rb +0 -21
- data/lib/yap/shell/repl.rb +0 -237
- data/lib/yap/shell/version.rb +0 -5
- data/lib/yap/world.rb +0 -286
- data/rcfiles/yaprc +0 -390
- data/scripts/4 +0 -8
- data/scripts/bg-vim +0 -4
- data/scripts/fail +0 -3
- data/scripts/letters +0 -8
- data/scripts/lots-of-output +0 -6
- data/scripts/pass +0 -3
- data/scripts/simulate-long-running +0 -4
- data/scripts/write-to-stderr.rb +0 -3
- data/scripts/write-to-stdout.rb +0 -3
- data/spec/features/addons/generating_an_addon_spec.rb +0 -55
- data/spec/features/addons/using_an_addon_spec.rb +0 -182
- data/spec/features/aliases_spec.rb +0 -78
- data/spec/features/environment_variables_spec.rb +0 -69
- data/spec/features/filesystem_commands_spec.rb +0 -61
- data/spec/features/first_time_spec.rb +0 -45
- data/spec/features/grouping_spec.rb +0 -81
- data/spec/features/line_editing_spec.rb +0 -174
- data/spec/features/range_spec.rb +0 -35
- data/spec/features/redirection_spec.rb +0 -234
- data/spec/features/repetition_spec.rb +0 -118
- data/spec/features/shell_expansions_spec.rb +0 -127
- data/spec/spec_helper.rb +0 -172
- data/spec/support/matchers/have_not_printed.rb +0 -30
- data/spec/support/matchers/have_printed.rb +0 -68
- data/spec/support/very_soon.rb +0 -9
- data/spec/support/yap_spec_dsl.rb +0 -258
- data/test.rb +0 -206
- data/update-rawline.sh +0 -6
data/test.rb
DELETED
@@ -1,206 +0,0 @@
|
|
1
|
-
require 'terminfo'
|
2
|
-
require 'io/console'
|
3
|
-
require 'term/ansicolor'
|
4
|
-
|
5
|
-
$z = File.open("/tmp/z.log", "w+")
|
6
|
-
$z.sync = true
|
7
|
-
|
8
|
-
module EventEmitter
|
9
|
-
def _callbacks
|
10
|
-
@_callbacks ||= Hash.new { |h, k| h[k] = [] }
|
11
|
-
end
|
12
|
-
|
13
|
-
def on(type, *args, &blk)
|
14
|
-
_callbacks[type] << blk
|
15
|
-
self
|
16
|
-
end
|
17
|
-
|
18
|
-
def emit(type, *args)
|
19
|
-
_callbacks[type].each do |blk|
|
20
|
-
blk.call(*args)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class TerminalRenderer
|
26
|
-
def initialize(layout_manager)
|
27
|
-
@output = $stdout
|
28
|
-
@terminfo = TermInfo.new ENV["TERM"], @output
|
29
|
-
@layout_manager = layout_manager
|
30
|
-
@layout_manager.on(:laid_out_content) do |content|
|
31
|
-
display(content)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def display(content)
|
36
|
-
@output.print(
|
37
|
-
@terminfo.control_string("clear"), # clear screen
|
38
|
-
@terminfo.control_string("hpa", 0), # go to column 0 (assuming we're on row 0)
|
39
|
-
@terminfo.control_string("sc"), # save cursor
|
40
|
-
content,
|
41
|
-
@terminfo.control_string("rc") # restore cursor
|
42
|
-
)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class LayoutManager
|
47
|
-
include EventEmitter
|
48
|
-
|
49
|
-
def initialize
|
50
|
-
@renderers = []
|
51
|
-
@mutex = Mutex.new
|
52
|
-
end
|
53
|
-
|
54
|
-
def add(renderer)
|
55
|
-
@renderers << renderer
|
56
|
-
renderer.on(:content_changed) do
|
57
|
-
layout
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def layout(width:nil, height:nil)
|
62
|
-
@mutex.synchronize { _layout(width, height) }
|
63
|
-
end
|
64
|
-
|
65
|
-
def _layout(width, height)
|
66
|
-
width ||= $stdout.winsize.last
|
67
|
-
height ||= $stdout.winsize.first
|
68
|
-
results_arr = []
|
69
|
-
column = 0
|
70
|
-
row = 0
|
71
|
-
@renderers.each do |renderer|
|
72
|
-
$z.puts "", "rendering #{renderer.id}"
|
73
|
-
$z.puts "Column: #{column} at row: #{row}"
|
74
|
-
$z.puts "Term width: #{width} height: #{height}"
|
75
|
-
$z.flush
|
76
|
-
text = renderer.render(width)
|
77
|
-
|
78
|
-
if renderer.anchor == :right
|
79
|
-
start_column = width - text.length
|
80
|
-
if start_column <= column || row > 0 # don't render the right prompt anywhere but the first line
|
81
|
-
next # we've already rendered content here, so skip
|
82
|
-
else
|
83
|
-
column = start_column
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
text.each_char do |ch|
|
88
|
-
queued_text = results_arr.fetch(row){ " " * width }
|
89
|
-
queued_text[column] = ch
|
90
|
-
column += 1
|
91
|
-
|
92
|
-
results_arr[row] = queued_text
|
93
|
-
|
94
|
-
if queued_text.length > width
|
95
|
-
row += 1
|
96
|
-
column = 0
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
# puts "-"*40
|
103
|
-
# puts results_arr.length
|
104
|
-
# puts results_arr.inspect
|
105
|
-
# puts results_arr#.join("\n")
|
106
|
-
emit :laid_out_content, results_arr.join("\n")
|
107
|
-
results_arr#.join("\n")
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
class ContentRenderer
|
112
|
-
include EventEmitter
|
113
|
-
|
114
|
-
attr_reader :display, :anchor
|
115
|
-
|
116
|
-
def id
|
117
|
-
@content.id
|
118
|
-
end
|
119
|
-
|
120
|
-
def initialize(content, display:nil, anchor:nil)
|
121
|
-
@display = display
|
122
|
-
@anchor = anchor
|
123
|
-
@last_width_rendered = nil
|
124
|
-
@content = content
|
125
|
-
@content.on(:content_changed) do |content, from:, to:|
|
126
|
-
@dirty = true
|
127
|
-
emit :content_changed
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def render(width)
|
132
|
-
@content.text
|
133
|
-
# @content.text.split(//).each_slice(width).map do |chars|
|
134
|
-
# chars.join
|
135
|
-
# end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
class Content
|
140
|
-
include EventEmitter
|
141
|
-
|
142
|
-
attr_accessor :id, :text
|
143
|
-
|
144
|
-
def initialize(id:, text:"")
|
145
|
-
@id = id
|
146
|
-
@text = text
|
147
|
-
end
|
148
|
-
|
149
|
-
def text=(str)
|
150
|
-
old_str = @text
|
151
|
-
@text = str
|
152
|
-
emit :content_changed, self, from:old_str, to:@text
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
anchor_left = Content.new id:"anchor-left", text:""
|
157
|
-
prompt = Content.new id:"prompt", text:"> "
|
158
|
-
input = Content.new id:"input"
|
159
|
-
right_prompt = Content.new id:"right-prompt"
|
160
|
-
|
161
|
-
anchor_left_renderer = ContentRenderer.new anchor_left
|
162
|
-
prompt_renderer = ContentRenderer.new(prompt, display: :inline)
|
163
|
-
input_renderer = ContentRenderer.new(input)
|
164
|
-
right_prompt_renderer = ContentRenderer.new(right_prompt, anchor: :right)
|
165
|
-
|
166
|
-
layout_manager = LayoutManager.new
|
167
|
-
layout_manager.add anchor_left_renderer
|
168
|
-
layout_manager.add prompt_renderer
|
169
|
-
layout_manager.add input_renderer
|
170
|
-
layout_manager.add right_prompt_renderer
|
171
|
-
|
172
|
-
terminal = TerminalRenderer.new(layout_manager)
|
173
|
-
|
174
|
-
prompt.text = "> "
|
175
|
-
sleep 1
|
176
|
-
input.text = "ls a b c d e f g h i j k l m"
|
177
|
-
# sleep 1
|
178
|
-
# prompt.text = "abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890> "
|
179
|
-
# sleep 1
|
180
|
-
anchor_left.text = "£ "
|
181
|
-
sleep 1
|
182
|
-
prompt.text = "#{Dir.pwd}> "
|
183
|
-
sleep 1
|
184
|
-
|
185
|
-
Thread.new do
|
186
|
-
loop do
|
187
|
-
["ls a b c", "echo hello world, goodbye world", "cat foo"].each do |str|
|
188
|
-
input.text = str
|
189
|
-
sleep 0.75
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
Thread.new do
|
195
|
-
loop do
|
196
|
-
%w(apples oranges bananas grapefruits pears cherries).each do |fruit|
|
197
|
-
anchor_left.text = "(#{fruit}) "
|
198
|
-
sleep 0.5
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
loop do
|
204
|
-
right_prompt.text = "#{Time.now.to_s}"
|
205
|
-
sleep 1
|
206
|
-
end
|