reline 0.0.5 → 0.0.6

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
  SHA256:
3
- metadata.gz: 05acbc99c317aaa7f46d205bf73a13cc482bcfba9f6f05562f189f91082b4fd7
4
- data.tar.gz: d785c8da605eba1b1440110ccbf197b1c5c654cce78dd18b17192e6686aa62f6
3
+ metadata.gz: a9a8719e2dd161d4d3493907d730981e19b685854247d1da4e8a107a9af88f98
4
+ data.tar.gz: 57c468696aecaa1752bf0ebacafbb9595ec8810c0dd406beb9bd95f31b8e2d05
5
5
  SHA512:
6
- metadata.gz: 4d964d8b085973dd17da51e8359c93377c5356b01db720258b3a0a27c3b03b34e77c099d290f2f2fa41d2f8f6da1dd5cdcdcca4f7a18e1bbb199e9a755f6caca
7
- data.tar.gz: 8c93e1e261d29ff6e27f0544bf6ddfe3eb41ac573111c59cc68869f508363a109880909c2893ebdc9b281b50d78fe795925667f63a7b4e5e1e26a91f93019adf
6
+ metadata.gz: 47f940b15f36eb7e410bf9951916258c268375fffadb661766fca64a421cc4e7aeb701a919c0b47dd03ea9b4aa1110c7c5b870328bad704c40f8e6d945a90ba2
7
+ data.tar.gz: 271926159d49eaa2b6572cc5d3640c81d82cfbc42d03a7320b0731fec276575a96c7491ab192023125a02e44d0a1cf38ee3ffa5045ac29e93f18e83ab9478071
@@ -16,12 +16,6 @@ module Reline
16
16
  CursorPos = Struct.new(:x, :y)
17
17
 
18
18
  class Core
19
- if RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
20
- IS_WINDOWS = true
21
- else
22
- IS_WINDOWS = false
23
- end
24
-
25
19
  ATTR_READER_NAMES = %i(
26
20
  completion_append_character
27
21
  basic_word_break_characters
@@ -90,22 +84,22 @@ module Reline
90
84
  end
91
85
 
92
86
  def completion_proc=(p)
93
- raise ArgumentError unless p.is_a?(Proc)
87
+ raise ArgumentError unless p.respond_to?(:call)
94
88
  @completion_proc = p
95
89
  end
96
90
 
97
91
  def output_modifier_proc=(p)
98
- raise ArgumentError unless p.is_a?(Proc)
92
+ raise ArgumentError unless p.respond_to?(:call)
99
93
  @output_modifier_proc = p
100
94
  end
101
95
 
102
96
  def prompt_proc=(p)
103
- raise ArgumentError unless p.is_a?(Proc)
97
+ raise ArgumentError unless p.respond_to?(:call)
104
98
  @prompt_proc = p
105
99
  end
106
100
 
107
101
  def auto_indent_proc=(p)
108
- raise ArgumentError unless p.is_a?(Proc)
102
+ raise ArgumentError unless p.respond_to?(:call)
109
103
  @auto_indent_proc = p
110
104
  end
111
105
 
@@ -114,7 +108,7 @@ module Reline
114
108
  end
115
109
 
116
110
  def dig_perfect_match_proc=(p)
117
- raise ArgumentError unless p.is_a?(Proc)
111
+ raise ArgumentError unless p.respond_to?(:call)
118
112
  @dig_perfect_match_proc = p
119
113
  end
120
114
 
@@ -400,9 +394,15 @@ module Reline
400
394
  HISTORY = History.new(core.config)
401
395
  end
402
396
 
403
- if Reline::Core::IS_WINDOWS
397
+ if RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
404
398
  require 'reline/windows'
405
- Reline::IOGate = Reline::Windows
399
+ if Reline::Windows.get_screen_size == [0, 0]
400
+ # Maybe Mintty on Cygwin
401
+ require 'reline/ansi'
402
+ Reline::IOGate = Reline::ANSI
403
+ else
404
+ Reline::IOGate = Reline::Windows
405
+ end
406
406
  else
407
407
  require 'reline/ansi'
408
408
  Reline::IOGate = Reline::ANSI
@@ -7,6 +7,8 @@ class Reline::ANSI
7
7
  [27, 91, 51, 126] => :key_delete, # Del
8
8
  [27, 91, 49, 126] => :ed_move_to_beg, # Home
9
9
  [27, 91, 52, 126] => :ed_move_to_end, # End
10
+ [27, 91, 72] => :ed_move_to_beg, # Home
11
+ [27, 91, 70] => :ed_move_to_end, # End
10
12
  [27, 32] => :em_set_mark, # M-<space>
11
13
  [24, 24] => :em_exchange_mark, # C-x C-x TODO also add Windows
12
14
  }
@@ -135,7 +137,7 @@ class Reline::ANSI
135
137
 
136
138
  def self.deprep(otio)
137
139
  int_handle = Signal.trap('INT', 'IGNORE')
138
- `stty #{otio}`
140
+ system("stty #{otio}", err: File::NULL)
139
141
  Signal.trap('INT', int_handle)
140
142
  Signal.trap('WINCH', @@old_winch_handler) if @@old_winch_handler
141
143
  end
@@ -766,7 +766,7 @@ class Reline::LineEditor
766
766
  end
767
767
 
768
768
  def input_key(key)
769
- if key.nil? or key.char.nil?
769
+ if key.char.nil?
770
770
  if @first_char
771
771
  @line = nil
772
772
  end
@@ -806,6 +806,26 @@ class Reline::LineEditor
806
806
 
807
807
  private def process_auto_indent
808
808
  return if not @check_new_auto_indent and @previous_line_index # move cursor up or down
809
+ if @check_new_auto_indent and @previous_line_index and @previous_line_index > 0 and @line_index > @previous_line_index
810
+ # Fix indent of a line when a newline is inserted to the next
811
+ new_lines = whole_lines(index: @previous_line_index, line: @line)
812
+ new_indent = @auto_indent_proc.(new_lines[0..-3].push(''), @line_index - 1, 0, true)
813
+ md = @line.match(/\A */)
814
+ prev_indent = md[0].count(' ')
815
+ @line = ' ' * new_indent + @line.lstrip
816
+
817
+ new_indent = nil
818
+ (new_lines[-2].size + 1).times do |n|
819
+ result = @auto_indent_proc.(new_lines[0..-2], @line_index - 1, n, false)
820
+ if result
821
+ new_indent = result
822
+ break
823
+ end
824
+ end
825
+ if new_indent&.>= 0
826
+ @line = ' ' * new_indent + @line.lstrip
827
+ end
828
+ end
809
829
  if @previous_line_index
810
830
  new_lines = whole_lines(index: @previous_line_index, line: @line)
811
831
  else
@@ -1,3 +1,3 @@
1
1
  module Reline
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-17 00:00:00.000000000 Z
11
+ date: 2019-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubygems_version: 3.0.3
101
+ rubygems_version: 3.0.6
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Alternative GNU Readline or Editline implementation by pure Ruby.