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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11e019af1718610030a1909eaa6b6cccd791deac
4
- data.tar.gz: a2a4750436f2ca64c92cf2247c8b346edad09851
3
+ metadata.gz: e7e26721726b5b17c08f75808f5ecec3973f372d
4
+ data.tar.gz: 0447b1df3bb95f8af568416037514e16f4ca78c0
5
5
  SHA512:
6
- metadata.gz: 537734d01e3ad9b469aa93a935431670884021c2ac67e4452231e5b5348ea87968efafc475632fe8129de6ea9dfce450a44ebe35ceac5a3150189e11f7d965ca
7
- data.tar.gz: 84b25ae0384f6c1874fb3b0ca34e176f07d52a90964fd0b77999257b287ce47201c7f9dee4dd896f90e4a09fffa223cef2cb8542d5c7fcfe18807808aa7920c8
6
+ metadata.gz: 666f67533fc55e170cb5831c96fb11160dd7fd0ea80b196ab385f37f2fc382c386b61a213a01e8bb20bee03a5c0a7e08b8e3697ce1cb6f7a2bb29dc94ea9b152
7
+ data.tar.gz: 21a383d655e8d302133603fa727a6ebf7f0580f66376a1aa379bcb0404bfec147db52aa4e45da87bdace60f2ec9032c6d298f9144fb31e18d380d18c7a5f9e67
@@ -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
@@ -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
- @on_word_complete_no_match.call(name: "word-completion-no-match", payload: { sub_word: sub_word, word: word })
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.each {|l| puts "- [#{l}]"}
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
 
@@ -1,3 +1,3 @@
1
1
  module RawLine
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
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.1
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