reline 0.0.4 → 0.0.5

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: 5871c5fe137b41dce9b91a8c3507c871c00440393af055c1d546a17e2613fc1b
4
- data.tar.gz: d6add41c6538d3cd07b813eab3b8998f57759209f821bf7950bf1a69d1f33966
3
+ metadata.gz: 05acbc99c317aaa7f46d205bf73a13cc482bcfba9f6f05562f189f91082b4fd7
4
+ data.tar.gz: d785c8da605eba1b1440110ccbf197b1c5c654cce78dd18b17192e6686aa62f6
5
5
  SHA512:
6
- metadata.gz: 105ed33c513bc997c46f6167da553f098f372272fe026b24afd2b472776dd840484afc0f284cd9d973b3db35940d84d99b4110b3d135d16944269c306ba33003
7
- data.tar.gz: d28e6fe88b8a16022febeba31ead5a4e533f2a50fa65ed93328f35e5c0b2634b01b0e0b35efa278f6bbfd96b4fd42adee2d8e15e3f9d3092de5da2b61b1ef550
6
+ metadata.gz: 4d964d8b085973dd17da51e8359c93377c5356b01db720258b3a0a27c3b03b34e77c099d290f2f2fa41d2f8f6da1dd5cdcdcca4f7a18e1bbb199e9a755f6caca
7
+ data.tar.gz: 8c93e1e261d29ff6e27f0544bf6ddfe3eb41ac573111c59cc68869f508363a109880909c2893ebdc9b281b50d78fe795925667f63a7b4e5e1e26a91f93019adf
@@ -166,7 +166,7 @@ module Reline
166
166
  inner_readline(prompt, add_hist, true, &confirm_multiline_termination)
167
167
 
168
168
  whole_buffer = line_editor.whole_buffer.dup
169
- whole_buffer.taint
169
+ whole_buffer.taint if RUBY_VERSION < '2.7'
170
170
  if add_hist and whole_buffer and whole_buffer.chomp.size > 0
171
171
  Reline::HISTORY << whole_buffer
172
172
  end
@@ -179,7 +179,7 @@ module Reline
179
179
  inner_readline(prompt, add_hist, false)
180
180
 
181
181
  line = line_editor.line.dup
182
- line.taint
182
+ line.taint if RUBY_VERSION < '2.7'
183
183
  if add_hist and line and line.chomp.size > 0
184
184
  Reline::HISTORY << line.chomp
185
185
  end
@@ -260,7 +260,10 @@ module Reline
260
260
  result = key_stroke.match_status(buffer)
261
261
  case result
262
262
  when :matched
263
- block.(key_stroke.expand(buffer).map{ |c| Reline::Key.new(c, c, false) })
263
+ expanded = key_stroke.expand(buffer).map{ |expanded_c|
264
+ Reline::Key.new(expanded_c, expanded_c, false)
265
+ }
266
+ block.(expanded)
264
267
  break
265
268
  when :matching
266
269
  if buffer.size == 1
@@ -289,7 +292,10 @@ module Reline
289
292
  if buffer.size == 1 and c == "\e".ord
290
293
  read_escaped_key(keyseq_timeout, c, block)
291
294
  else
292
- block.(buffer.map{ |c| Reline::Key.new(c, c, false) })
295
+ expanded = buffer.map{ |expanded_c|
296
+ Reline::Key.new(expanded_c, expanded_c, false)
297
+ }
298
+ block.(expanded)
293
299
  end
294
300
  break
295
301
  end
@@ -319,7 +325,7 @@ module Reline
319
325
 
320
326
  private def may_req_ambiguous_char_width
321
327
  @ambiguous_width = 2 if Reline::IOGate == Reline::GeneralIO or STDOUT.is_a?(File)
322
- return if @ambiguous_width
328
+ return if ambiguous_width
323
329
  Reline::IOGate.move_cursor_column(0)
324
330
  print "\u{25bd}"
325
331
  @ambiguous_width = Reline::IOGate.cursor_pos.x
@@ -342,6 +348,7 @@ module Reline
342
348
  def_single_delegators :core, :vi_editing_mode, :emacs_editing_mode
343
349
  def_single_delegators :core, :readline
344
350
  def_instance_delegators self, :readline
351
+ private :readline
345
352
 
346
353
 
347
354
  #--------------------------------------------------------
@@ -369,6 +376,7 @@ module Reline
369
376
 
370
377
  def_single_delegators :core, :readmultiline
371
378
  def_instance_delegators self, :readmultiline
379
+ private :readmultiline
372
380
 
373
381
  def self.core
374
382
  @core ||= Core.new { |core|
@@ -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, 32] => :em_set_mark, # M-<space>
11
+ [24, 24] => :em_exchange_mark, # C-x C-x TODO also add Windows
10
12
  }
11
13
 
12
14
  @@input = STDIN
@@ -32,7 +32,7 @@ class Reline::KeyStroke
32
32
  end
33
33
 
34
34
  def expand(input)
35
- lhs = key_mapping.keys.select { |lhs| input.start_with? lhs }.sort_by(&:size).reverse.first
35
+ lhs = key_mapping.keys.select { |item| input.start_with? item }.sort_by(&:size).reverse.first
36
36
  return input unless lhs
37
37
  rhs = key_mapping[lhs]
38
38
 
@@ -113,9 +113,7 @@ class Reline::LineEditor
113
113
  if @line_index.zero?
114
114
  0
115
115
  else
116
- @buffer_of_lines[0..(@line_index - 1)].inject(0) { |result, line|
117
- result + calculate_height_by_width(prompt_width + calculate_width(line)) # TODO prompt_list
118
- }
116
+ calculate_height_by_lines(@buffer_of_lines[0..(@line_index - 1)], prompt_list)
119
117
  end
120
118
  if @prompt_proc
121
119
  prompt = prompt_list[@line_index]
@@ -140,6 +138,7 @@ class Reline::LineEditor
140
138
 
141
139
  def reset_variables(prompt = '', encoding = Encoding.default_external)
142
140
  @prompt = prompt
141
+ @mark_pointer = nil
143
142
  @encoding = encoding
144
143
  @is_multiline = false
145
144
  @finished = false
@@ -188,6 +187,16 @@ class Reline::LineEditor
188
187
  @is_multiline = false
189
188
  end
190
189
 
190
+ private def calculate_height_by_lines(lines, prompt_list)
191
+ result = 0
192
+ lines.each_with_index { |line, i|
193
+ prompt = ''
194
+ prompt = prompt_list[i] if prompt_list and prompt_list[i]
195
+ result += calculate_height_by_width(calculate_width(prompt + line))
196
+ }
197
+ result
198
+ end
199
+
191
200
  private def insert_new_line(cursor_line, next_line)
192
201
  @line = cursor_line
193
202
  @buffer_of_lines.insert(@line_index + 1, String.new(next_line, encoding: @encoding))
@@ -346,9 +355,7 @@ class Reline::LineEditor
346
355
  new_lines = whole_lines
347
356
  end
348
357
  prompt, prompt_width, prompt_list = check_multiline_prompt(new_lines, prompt)
349
- all_height = new_lines.inject(0) { |result, line|
350
- result + calculate_height_by_width(prompt_width + calculate_width(line)) # TODO prompt_list
351
- }
358
+ all_height = calculate_height_by_lines(new_lines, prompt_list)
352
359
  diff = all_height - @highest_in_all
353
360
  move_cursor_down(@highest_in_all - @first_line_started_from - @started_from - 1)
354
361
  if diff > 0
@@ -388,9 +395,7 @@ class Reline::LineEditor
388
395
  if @line_index.zero?
389
396
  0
390
397
  else
391
- @buffer_of_lines[0..(@line_index - 1)].inject(0) { |result, line|
392
- result + calculate_height_by_width(prompt_width + calculate_width(line)) # TODO prompt_list
393
- }
398
+ calculate_height_by_lines(@buffer_of_lines[0..(@line_index - 1)], prompt_list)
394
399
  end
395
400
  if @prompt_proc
396
401
  prompt = prompt_list[@line_index]
@@ -449,9 +454,7 @@ class Reline::LineEditor
449
454
  if @line_index.zero?
450
455
  0
451
456
  else
452
- new_buffer[0..(@line_index - 1)].inject(0) { |result, line|
453
- result + calculate_height_by_width(prompt_width + calculate_width(line)) # TODO prompt_list
454
- }
457
+ calculate_height_by_lines(new_buffer[0..(@line_index - 1)], prompt_list)
455
458
  end
456
459
  @started_from = calculate_height_by_width(prompt_width + @cursor) - 1
457
460
  move_cursor_down(@first_line_started_from + @started_from)
@@ -650,9 +653,9 @@ class Reline::LineEditor
650
653
  else
651
654
  old_waiting_proc = @waiting_proc
652
655
  old_waiting_operator_proc = @waiting_operator_proc
653
- @waiting_proc = proc { |key|
656
+ @waiting_proc = proc { |k|
654
657
  old_cursor, old_byte_pointer = @cursor, @byte_pointer
655
- old_waiting_proc.(key)
658
+ old_waiting_proc.(k)
656
659
  cursor_diff, byte_pointer_diff = @cursor - old_cursor, @byte_pointer - old_byte_pointer
657
660
  @cursor, @byte_pointer = old_cursor, old_byte_pointer
658
661
  @waiting_operator_proc.(cursor_diff, byte_pointer_diff)
@@ -994,8 +997,8 @@ class Reline::LineEditor
994
997
  end
995
998
  width
996
999
  else
997
- str.encode(Encoding::UTF_8).grapheme_clusters.inject(0) { |width, gc|
998
- width + Reline::Unicode.get_mbchar_width(gc)
1000
+ str.encode(Encoding::UTF_8).grapheme_clusters.inject(0) { |w, gc|
1001
+ w + Reline::Unicode.get_mbchar_width(gc)
999
1002
  }
1000
1003
  end
1001
1004
  end
@@ -1185,8 +1188,8 @@ class Reline::LineEditor
1185
1188
  end
1186
1189
  searcher.resume
1187
1190
  @searching_prompt = "(reverse-i-search)`': "
1188
- @waiting_proc = ->(key) {
1189
- case key
1191
+ @waiting_proc = ->(k) {
1192
+ case k
1190
1193
  when "\C-j".ord, "\C-?".ord
1191
1194
  if @history_pointer
1192
1195
  @line = Reline::HISTORY[@history_pointer]
@@ -1206,9 +1209,9 @@ class Reline::LineEditor
1206
1209
  @cursor_max = calculate_width(@line)
1207
1210
  @cursor = @byte_pointer = 0
1208
1211
  else
1209
- chr = key.is_a?(String) ? key : key.chr(Encoding::ASCII_8BIT)
1210
- if chr.match?(/[[:print:]]/) or key == "\C-h".ord or key == 127
1211
- searcher.resume(key)
1212
+ chr = k.is_a?(String) ? k : k.chr(Encoding::ASCII_8BIT)
1213
+ if chr.match?(/[[:print:]]/) or k == "\C-h".ord or k == 127
1214
+ searcher.resume(k)
1212
1215
  else
1213
1216
  if @history_pointer
1214
1217
  line = Reline::HISTORY[@history_pointer]
@@ -1861,13 +1864,13 @@ class Reline::LineEditor
1861
1864
  end
1862
1865
 
1863
1866
  private def vi_replace_char(key, arg: 1)
1864
- @waiting_proc = ->(key) {
1867
+ @waiting_proc = ->(k) {
1865
1868
  if arg == 1
1866
1869
  byte_size = Reline::Unicode.get_next_mbchar_size(@line, @byte_pointer)
1867
1870
  before = @line.byteslice(0, @byte_pointer)
1868
1871
  remaining_point = @byte_pointer + byte_size
1869
1872
  after = @line.byteslice(remaining_point, @line.size - remaining_point)
1870
- @line = before + key.chr + after
1873
+ @line = before + k.chr + after
1871
1874
  @cursor_max = calculate_width(@line)
1872
1875
  @waiting_proc = nil
1873
1876
  elsif arg > 1
@@ -1878,7 +1881,7 @@ class Reline::LineEditor
1878
1881
  before = @line.byteslice(0, @byte_pointer)
1879
1882
  remaining_point = @byte_pointer + byte_size
1880
1883
  after = @line.byteslice(remaining_point, @line.size - remaining_point)
1881
- replaced = key.chr * arg
1884
+ replaced = k.chr * arg
1882
1885
  @line = before + replaced + after
1883
1886
  @byte_pointer += replaced.bytesize
1884
1887
  @cursor += calculate_width(replaced)
@@ -1939,4 +1942,20 @@ class Reline::LineEditor
1939
1942
  arg -= 1
1940
1943
  vi_join_lines(key, arg: arg) if arg > 0
1941
1944
  end
1945
+
1946
+ private def em_set_mark(key)
1947
+ @mark_pointer = [@byte_pointer, @line_index]
1948
+ end
1949
+ alias_method :set_mark, :em_set_mark
1950
+
1951
+ private def em_exchange_mark(key)
1952
+ new_pointer = [@byte_pointer, @line_index]
1953
+ @previous_line_index = @line_index
1954
+ @byte_pointer, @line_index = @mark_pointer
1955
+ @byte_pointer, @line_index = @mark_pointer
1956
+ @cursor = calculate_width(@line.byteslice(0, @byte_pointer))
1957
+ @cursor_max = calculate_width(@line)
1958
+ @mark_pointer = new_pointer
1959
+ end
1960
+ alias_method :exchange_point_and_mark, :em_exchange_mark
1942
1961
  end
@@ -1,3 +1,3 @@
1
1
  module Reline
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
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.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-29 00:00:00.000000000 Z
11
+ date: 2019-11-17 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.6
101
+ rubygems_version: 3.0.3
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Alternative GNU Readline or Editline implementation by pure Ruby.