yap-rawline 0.3.1 → 0.3.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 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