yap-rawline 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rawline/completer.rb +12 -1
- data/lib/rawline/editor.rb +39 -2
- data/lib/rawline/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7e26721726b5b17c08f75808f5ecec3973f372d
|
4
|
+
data.tar.gz: 0447b1df3bb95f8af568416037514e16f4ca78c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 666f67533fc55e170cb5831c96fb11160dd7fd0ea80b196ab385f37f2fc382c386b61a213a01e8bb20bee03a5c0a7e08b8e3697ce1cb6f7a2bb29dc94ea9b152
|
7
|
+
data.tar.gz: 21a383d655e8d302133603fa727a6ebf7f0580f66376a1aa379bcb0404bfec147db52aa4e45da87bdace60f2ec9032c6d298f9144fb31e18d380d18c7a5f9e67
|
data/lib/rawline/completer.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module RawLine
|
2
2
|
|
3
3
|
class Completer
|
4
|
-
def initialize(char:, line:, completion:, completion_found:, completion_not_found:, done:, keys:)
|
4
|
+
def initialize(char:, line:, completion:, completion_found:, completion_not_found:, completion_selected:, done:, keys:)
|
5
5
|
@completion_char = char
|
6
6
|
@line = line
|
7
7
|
@completion_proc = completion
|
8
8
|
@completion_found_proc = completion_found
|
9
9
|
@completion_not_found_proc = completion_not_found
|
10
|
+
@completion_selected_proc = completion_selected
|
10
11
|
@done_proc = done
|
11
12
|
@keys = keys
|
12
13
|
|
@@ -44,6 +45,7 @@ module RawLine
|
|
44
45
|
.split(/\s+/)
|
45
46
|
.delete_if(&:empty?)
|
46
47
|
word_index = words.index(word)
|
48
|
+
Treefell['editor'].puts "completer, looking for completions word=#{word.inspect} words=#{words.inspect} word_index=#{word_index}"
|
47
49
|
matches = @completion_proc.call(
|
48
50
|
word,
|
49
51
|
words,
|
@@ -55,6 +57,14 @@ module RawLine
|
|
55
57
|
if matches.any?
|
56
58
|
@completion_matches.resize(matches.length)
|
57
59
|
matches.each { |w| @completion_matches << w }
|
60
|
+
end
|
61
|
+
|
62
|
+
if matches.length == 1
|
63
|
+
Treefell['editor'].puts "completer, exactly one possible completion found: #{matches.inspect}"
|
64
|
+
@completion_selected_proc.call(@completion_matches.first)
|
65
|
+
@done_proc.call
|
66
|
+
elsif matches.length > 1
|
67
|
+
Treefell['editor'].puts "completer, more than one possible completion found: #{matches.inspect}"
|
58
68
|
|
59
69
|
# Get first match
|
60
70
|
@completion_matches.back
|
@@ -64,6 +74,7 @@ module RawLine
|
|
64
74
|
# a user would expect
|
65
75
|
@completion_found_proc.call(completion: match, possible_completions: @completion_matches.reverse)
|
66
76
|
else
|
77
|
+
Treefell['editor'].puts "completer, no possible completions found"
|
67
78
|
@completion_not_found_proc.call
|
68
79
|
@done_proc.call
|
69
80
|
end
|
data/lib/rawline/editor.rb
CHANGED
@@ -152,6 +152,9 @@ module RawLine
|
|
152
152
|
attr_reader :keyboard_input_processors
|
153
153
|
|
154
154
|
def env ; @env_stack.last ; end
|
155
|
+
def new_env ; Environment.new ; end
|
156
|
+
def push_env(env) ; @env_stack.push env ; end
|
157
|
+
def pop_env(env) ; @env_stack.pop ; end
|
155
158
|
|
156
159
|
def completion_class ; env.completion_class ; end
|
157
160
|
def history ; env.history ; end
|
@@ -651,6 +654,9 @@ module RawLine
|
|
651
654
|
completion_not_found: -> {
|
652
655
|
completion_not_found
|
653
656
|
},
|
657
|
+
completion_selected: -> (completion) {
|
658
|
+
completion_selected(completion)
|
659
|
+
},
|
654
660
|
done: -> (*leftover_bytes){
|
655
661
|
completion_done
|
656
662
|
leftover_bytes = leftover_bytes.flatten
|
@@ -667,43 +673,70 @@ module RawLine
|
|
667
673
|
end
|
668
674
|
|
669
675
|
def completion_found(completion:, possible_completions:)
|
676
|
+
Treefell['editor'].puts "word-completion-found: #{completion.inspect} possible_completions: #{possible_completions.inspect}"
|
670
677
|
if @on_word_complete
|
671
678
|
word = @line.word[:text]
|
672
679
|
sub_word = @line.text[@line.word[:start]..@line.position-1] || ""
|
673
680
|
@on_word_complete.call(name: "word-completion", payload: { sub_word: sub_word, word: word, completion: completion, possible_completions: possible_completions })
|
674
681
|
end
|
675
682
|
|
683
|
+
completion_selected(completion)
|
684
|
+
end
|
685
|
+
|
686
|
+
def completion_selected(completion)
|
687
|
+
Treefell['editor'].puts "word-completion-selected #{completion}"
|
676
688
|
move_to_position @line.word[:end]
|
677
689
|
delete_n_characters(@line.word[:end] - @line.word[:start], true)
|
678
690
|
write completion.to_s
|
691
|
+
|
692
|
+
if @on_word_completion_selected
|
693
|
+
Treefell['editor'].puts "word-completion-selected callback called with #{completion}"
|
694
|
+
@on_word_completion_selected.call(name: "word-completion-selected", payload: { completion: completion })
|
695
|
+
end
|
679
696
|
end
|
680
697
|
|
681
698
|
def completion_not_found
|
699
|
+
Treefell['editor'].puts 'word-completion-not-found'
|
682
700
|
if @on_word_complete_no_match
|
683
701
|
word = @line.word[:text]
|
684
702
|
sub_word = @line.text[@line.word[:start]..@line.position-1] || ""
|
685
|
-
|
703
|
+
payload = { sub_word: sub_word, word: word }
|
704
|
+
Treefell['editor'].puts "word-completion-not-found calling callback with payload: #{payload.inspect}"
|
705
|
+
@on_word_complete_no_match.call(name: "word-completion-no-match", payload: payload)
|
706
|
+
else
|
707
|
+
Treefell['editor'].puts 'word-completion-not-found no on_word_complete_no_match callback to call'
|
686
708
|
end
|
687
709
|
end
|
688
710
|
|
689
711
|
def completion_done
|
690
712
|
if @on_word_complete_done
|
713
|
+
Treefell['editor'].puts "word-completion-done calling on_word_complete_done callback"
|
691
714
|
@on_word_complete_done.call
|
715
|
+
else
|
716
|
+
Treefell['editor'].puts 'word-completion-done no on_word_complete_done callback to call'
|
692
717
|
end
|
693
718
|
end
|
694
719
|
|
695
720
|
def on_word_complete(&blk)
|
721
|
+
Treefell['editor'].puts "setting on_word_complete callback"
|
696
722
|
@on_word_complete = blk
|
697
723
|
end
|
698
724
|
|
699
725
|
def on_word_complete_no_match(&blk)
|
726
|
+
Treefell['editor'].puts "setting on_word_complete_no_match callback"
|
700
727
|
@on_word_complete_no_match = blk
|
701
728
|
end
|
702
729
|
|
703
730
|
def on_word_complete_done(&blk)
|
731
|
+
Treefell['editor'].puts "setting on_word_complete_done callback"
|
704
732
|
@on_word_complete_done = blk
|
705
733
|
end
|
706
734
|
|
735
|
+
def on_word_completion_selected(&blk)
|
736
|
+
Treefell['editor'].puts "setting on_word_completion_selected callback"
|
737
|
+
@on_word_completion_selected = blk
|
738
|
+
end
|
739
|
+
|
707
740
|
#
|
708
741
|
# Complete file and directory names.
|
709
742
|
# Hidden files and directories are matched only if <tt>@match_hidden_files</tt> is true.
|
@@ -735,7 +768,11 @@ module RawLine
|
|
735
768
|
def show_history
|
736
769
|
pos = @line.position
|
737
770
|
text = @line.text
|
738
|
-
history.
|
771
|
+
max_index_width = history.length.to_s.length
|
772
|
+
history.each_with_index do |item, i|
|
773
|
+
@terminal.puts sprintf("%-#{max_index_width}d %s\n", i+1, item)
|
774
|
+
end
|
775
|
+
render(reset: true)
|
739
776
|
overwrite_line(text, pos)
|
740
777
|
end
|
741
778
|
|
data/lib/rawline/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yap-rawline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Cevasco
|
@@ -59,6 +59,20 @@ dependencies:
|
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.3.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: treefell
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.2.3
|
69
|
+
type: :runtime
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.2.3
|
62
76
|
- !ruby/object:Gem::Dependency
|
63
77
|
name: rspec
|
64
78
|
requirement: !ruby/object:Gem::Requirement
|