Skip to content

Commit

Permalink
Refactor prompt generation logic
Browse files Browse the repository at this point in the history
  • Loading branch information
aycabta committed Oct 17, 2019
1 parent 3745711 commit 60a0c20
Showing 1 changed file with 17 additions and 34 deletions.
51 changes: 17 additions & 34 deletions lib/reline/line_editor.rb
Expand Up @@ -60,11 +60,20 @@ def initialize(config)
reset_variables
end

private def check_multiline_prompt(buffer, prompt, special_prompt)
private def check_multiline_prompt(buffer, prompt)
special_prompt = nil
if @vi_arg
prompt = "(arg: #{@vi_arg}) "
@rerender_all = true
elsif @searching_prompt
prompt = @searching_prompt
@rerender_all = true
else
prompt = @prompt
end
if @prompt_proc
prompt_list = @prompt_proc.(buffer)
prompt_list[@line_index] = special_prompt if special_prompt
prompt_list.map!{ special_prompt } if @searching_prompt
prompt_list.map!{ prompt } if @vi_arg or @searching_prompt
prompt = prompt_list[@line_index]
prompt_width = calculate_width(prompt, true)
[prompt, prompt_width, prompt_list]
Expand All @@ -90,22 +99,9 @@ def reset(prompt = '', encoding = Encoding.default_external)
@rerender_all = true
rerender
else
special_prompt = nil
if @vi_arg
prompt = "(arg: #{@vi_arg}) "
prompt_width = calculate_width(prompt)
special_prompt = prompt
elsif @searching_prompt
prompt = @searching_prompt
prompt_width = calculate_width(prompt)
special_prompt = prompt
else
prompt = @prompt
prompt_width = calculate_width(prompt, true)
end
back = 0
new_buffer = whole_lines
prompt, prompt_width, prompt_list = check_multiline_prompt(new_buffer, prompt, special_prompt)
prompt, prompt_width, prompt_list = check_multiline_prompt(new_buffer, prompt)
new_buffer.each_with_index do |line, index|
prompt_width = calculate_width(prompt_list[index], true) if @prompt_proc
width = prompt_width + calculate_width(line)
Expand Down Expand Up @@ -320,24 +316,11 @@ def rerender
move_cursor_up(@highest_in_all - 1 - @first_line_started_from)
@menu_info = nil
end
special_prompt = nil
if @vi_arg
prompt = "(arg: #{@vi_arg}) "
prompt_width = calculate_width(prompt)
special_prompt = prompt
elsif @searching_prompt
prompt = @searching_prompt
prompt_width = calculate_width(prompt)
special_prompt = prompt
else
prompt = @prompt
prompt_width = calculate_width(prompt, true)
end
prompt, prompt_width, prompt_list = check_multiline_prompt(whole_lines, prompt)
if @cleared
Reline::IOGate.clear_screen
@cleared = false
back = 0
prompt, prompt_width, prompt_list = check_multiline_prompt(whole_lines, prompt, special_prompt)
modify_lines(whole_lines).each_with_index do |line, index|
if @prompt_proc
pr = prompt_list[index]
Expand All @@ -363,7 +346,7 @@ def rerender
else
new_lines = whole_lines
end
prompt, prompt_width, prompt_list = check_multiline_prompt(new_lines, prompt, special_prompt)
prompt, prompt_width, prompt_list = check_multiline_prompt(new_lines, prompt)
all_height = new_lines.inject(0) { |result, line|
result + calculate_height_by_width(prompt_width + calculate_width(line)) # TODO prompt_list
}
Expand Down Expand Up @@ -427,7 +410,7 @@ def rerender
Reline::IOGate.move_cursor_column(0)
back = 0
new_buffer = whole_lines
prompt, prompt_width, prompt_list = check_multiline_prompt(new_buffer, prompt, special_prompt)
prompt, prompt_width, prompt_list = check_multiline_prompt(new_buffer, prompt)
new_buffer.each_with_index do |line, index|
prompt_width = calculate_width(prompt_list[index], true) if @prompt_proc
width = prompt_width + calculate_width(line)
Expand Down Expand Up @@ -479,7 +462,7 @@ def rerender
end
line = modify_lines(whole_lines)[@line_index]
if @is_multiline
prompt, prompt_width, prompt_list = check_multiline_prompt(whole_lines, prompt, special_prompt)
prompt, prompt_width, prompt_list = check_multiline_prompt(whole_lines, prompt)
if finished?
# Always rerender on finish because output_modifier_proc may return a different output.
render_partial(prompt, prompt_width, line)
Expand Down

0 comments on commit 60a0c20

Please sign in to comment.