reline 0.2.8.pre.3 → 0.2.8.pre.4
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 +4 -4
- data/lib/reline/line_editor.rb +41 -16
- data/lib/reline/version.rb +1 -1
- data/lib/reline.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e7c5785424de4deda942cdd54cab39bc7d96fd79b1451095626996b875a32d9
|
4
|
+
data.tar.gz: 3afcf3fc84d2b3d4dd48481bca613a8fc08de049983619772e9fcd502caffa83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1be959cdf8fc499ec71184bc3768964dbc1eb078085bbd8303a6d9b4b0ade3ccd25a8d90486c620316b38c4dfe7b7fb224d99912ff855bd8bc3fc64946f1d5d
|
7
|
+
data.tar.gz: cfe31c94298208f8cda2c7fddeba8940e71589c60b06167fcb81e8c0d278055ffd94261713d1aa3a2d6031d6572c3dc9194412d15e57f83d0fb81e87361496c0
|
data/lib/reline/line_editor.rb
CHANGED
@@ -499,6 +499,14 @@ class Reline::LineEditor
|
|
499
499
|
@line_editor.call_completion_proc_with_checking_args(pre, target, post)
|
500
500
|
end
|
501
501
|
|
502
|
+
def set_dialog(dialog)
|
503
|
+
@dialog = dialog
|
504
|
+
end
|
505
|
+
|
506
|
+
def dialog
|
507
|
+
@dialog
|
508
|
+
end
|
509
|
+
|
502
510
|
def set_cursor_pos(col, row)
|
503
511
|
@cursor_pos.x = col
|
504
512
|
@cursor_pos.y = row
|
@@ -531,11 +539,12 @@ class Reline::LineEditor
|
|
531
539
|
|
532
540
|
class Dialog
|
533
541
|
attr_reader :name
|
534
|
-
attr_accessor :column, :vertical_offset, :contents, :lines_backup
|
542
|
+
attr_accessor :scroll_top, :column, :vertical_offset, :contents, :lines_backup
|
535
543
|
|
536
544
|
def initialize(name, proc_scope)
|
537
545
|
@name = name
|
538
546
|
@proc_scope = proc_scope
|
547
|
+
@scroll_top = 0
|
539
548
|
end
|
540
549
|
|
541
550
|
def set_cursor_pos(col, row)
|
@@ -543,6 +552,7 @@ class Reline::LineEditor
|
|
543
552
|
end
|
544
553
|
|
545
554
|
def call
|
555
|
+
@proc_scope.set_dialog(self)
|
546
556
|
@proc_scope.call
|
547
557
|
end
|
548
558
|
end
|
@@ -566,13 +576,28 @@ class Reline::LineEditor
|
|
566
576
|
return
|
567
577
|
end
|
568
578
|
dialog.set_cursor_pos(cursor_column, @first_line_started_from + @started_from)
|
569
|
-
|
579
|
+
dialog_render_info = dialog.call
|
570
580
|
old_dialog_contents = dialog.contents
|
571
581
|
old_dialog_column = dialog.column
|
572
582
|
old_dialog_vertical_offset = dialog.vertical_offset
|
573
|
-
|
574
|
-
|
575
|
-
|
583
|
+
start = 0
|
584
|
+
if dialog_render_info and dialog_render_info.contents and not dialog_render_info.contents.empty?
|
585
|
+
height = dialog_render_info.height || DIALOG_HEIGHT
|
586
|
+
pointer = dialog_render_info.pointer
|
587
|
+
dialog.contents = dialog_render_info.contents
|
588
|
+
if dialog.contents.size > height
|
589
|
+
if dialog_render_info.pointer
|
590
|
+
if dialog_render_info.pointer < 0
|
591
|
+
dialog.scroll_top = 0
|
592
|
+
elsif (dialog_render_info.pointer - dialog.scroll_top) >= (height - 1)
|
593
|
+
dialog.scroll_top = dialog_render_info.pointer - (height - 1)
|
594
|
+
elsif (dialog_render_info.pointer - dialog.scroll_top) < 0
|
595
|
+
dialog.scroll_top = dialog_render_info.pointer
|
596
|
+
end
|
597
|
+
pointer = dialog_render_info.pointer - dialog.scroll_top
|
598
|
+
end
|
599
|
+
dialog.contents = dialog.contents[dialog.scroll_top, height]
|
600
|
+
end
|
576
601
|
else
|
577
602
|
dialog.lines_backup = {
|
578
603
|
lines: modify_lines(whole_lines),
|
@@ -587,21 +612,21 @@ class Reline::LineEditor
|
|
587
612
|
end
|
588
613
|
upper_space = @first_line_started_from - @started_from
|
589
614
|
lower_space = @highest_in_all - @first_line_started_from - @started_from - 1
|
590
|
-
dialog.column = pos.x
|
615
|
+
dialog.column = dialog_render_info.pos.x
|
591
616
|
diff = (dialog.column + DIALOG_WIDTH) - (@screen_size.last - 1)
|
592
617
|
if diff > 0
|
593
618
|
dialog.column -= diff
|
594
619
|
end
|
595
|
-
if (lower_space + @rest_height) >=
|
596
|
-
dialog.vertical_offset = pos.y + 1
|
597
|
-
elsif upper_space >=
|
598
|
-
dialog.vertical_offset = pos.y + -(
|
620
|
+
if (lower_space + @rest_height - dialog_render_info.pos.y) >= height
|
621
|
+
dialog.vertical_offset = dialog_render_info.pos.y + 1
|
622
|
+
elsif upper_space >= height
|
623
|
+
dialog.vertical_offset = dialog_render_info.pos.y + -(height + 1)
|
599
624
|
else
|
600
|
-
if (lower_space + @rest_height) <
|
601
|
-
scroll_down(
|
602
|
-
move_cursor_up(
|
625
|
+
if (lower_space + @rest_height - dialog_render_info.pos.y) < height
|
626
|
+
scroll_down(height + dialog_render_info.pos.y)
|
627
|
+
move_cursor_up(height + dialog_render_info.pos.y)
|
603
628
|
end
|
604
|
-
dialog.vertical_offset = pos.y + 1
|
629
|
+
dialog.vertical_offset = dialog_render_info.pos.y + 1
|
605
630
|
end
|
606
631
|
Reline::IOGate.hide_cursor
|
607
632
|
reset_dialog(dialog, old_dialog_contents, old_dialog_column, old_dialog_vertical_offset)
|
@@ -611,8 +636,8 @@ class Reline::LineEditor
|
|
611
636
|
if i == pointer
|
612
637
|
bg_color = '45'
|
613
638
|
else
|
614
|
-
if
|
615
|
-
bg_color =
|
639
|
+
if dialog_render_info.bg_color
|
640
|
+
bg_color = dialog_render_info.bg_color
|
616
641
|
else
|
617
642
|
bg_color = '46'
|
618
643
|
end
|
data/lib/reline/version.rb
CHANGED
data/lib/reline.rb
CHANGED
@@ -18,6 +18,7 @@ module Reline
|
|
18
18
|
|
19
19
|
Key = Struct.new('Key', :char, :combined_char, :with_meta)
|
20
20
|
CursorPos = Struct.new(:x, :y)
|
21
|
+
DialogRenderInfo = Struct.new(:pos, :contents, :pointer, :bg_color, :height, keyword_init: true)
|
21
22
|
|
22
23
|
class Core
|
23
24
|
ATTR_READER_NAMES = %i(
|
@@ -219,9 +220,9 @@ module Reline
|
|
219
220
|
cursor_pos_to_render = Reline::CursorPos.new(x, y)
|
220
221
|
if context and context.is_a?(Array)
|
221
222
|
context.clear
|
222
|
-
context.push(cursor_pos_to_render, result, pointer)
|
223
|
+
context.push(cursor_pos_to_render, result, pointer, dialog)
|
223
224
|
end
|
224
|
-
|
225
|
+
DialogRenderInfo.new(pos: cursor_pos_to_render, contents: result, pointer: pointer, height: 15)
|
225
226
|
}
|
226
227
|
Reline::DEFAULT_DIALOG_CONTEXT = Array.new
|
227
228
|
|
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.2.8.pre.
|
4
|
+
version: 0.2.8.pre.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aycabta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: io-console
|