@@ -68,6 +68,26 @@ def simplified_rendering?
68
68
end
69
69
end
70
70
71
+ private def check_mode_icon
72
+ mode_icon = nil
73
+ if @config . show_mode_in_prompt
74
+ if @config . editing_mode_is? ( :vi_command )
75
+ mode_icon = @config . vi_cmd_mode_icon
76
+ elsif @config . editing_mode_is? ( :vi_insert )
77
+ mode_icon = @config . vi_ins_mode_icon
78
+ elsif @config . editing_mode_is? ( :emacs )
79
+ mode_icon = @config . emacs_mode_string
80
+ else
81
+ mode_icon = '?'
82
+ end
83
+ end
84
+ if mode_icon != @prev_mode_icon
85
+ @rerender_all = true
86
+ end
87
+ @prev_mode_icon = mode_icon
88
+ mode_icon
89
+ end
90
+
71
91
private def check_multiline_prompt ( buffer , prompt )
72
92
if @vi_arg
73
93
prompt = "(arg: #{ @vi_arg } ) "
@@ -78,7 +98,11 @@ def simplified_rendering?
78
98
else
79
99
prompt = @prompt
80
100
end
81
- return [ prompt , calculate_width ( prompt , true ) , [ prompt ] * buffer . size ] if simplified_rendering?
101
+ if simplified_rendering?
102
+ mode_icon = check_mode_icon
103
+ prompt = mode_icon + prompt if mode_icon
104
+ return [ prompt , calculate_width ( prompt , true ) , [ prompt ] * buffer . size ]
105
+ end
82
106
if @prompt_proc
83
107
use_cached_prompt_list = false
84
108
if @cached_prompt_list
@@ -95,35 +119,15 @@ def simplified_rendering?
95
119
@prompt_cache_time = Time . now . to_f
96
120
end
97
121
prompt_list . map! { prompt } if @vi_arg or @searching_prompt
98
- if @config . show_mode_in_prompt
99
- if @config . editing_mode_is? ( :vi_command )
100
- mode_icon = @config . vi_cmd_mode_icon
101
- elsif @config . editing_mode_is? ( :vi_insert )
102
- mode_icon = @config . vi_ins_mode_icon
103
- elsif @config . editing_mode_is? ( :emacs )
104
- mode_icon = @config . emacs_mode_string
105
- else
106
- mode_icon = '?'
107
- end
108
- prompt_list . map! { |pr | mode_icon + pr }
109
- end
122
+ mode_icon = check_mode_icon
123
+ prompt_list = prompt_list . map { |pr | mode_icon + pr } if mode_icon
110
124
prompt = prompt_list [ @line_index ]
111
125
prompt_width = calculate_width ( prompt , true )
112
126
[ prompt , prompt_width , prompt_list ]
113
127
else
128
+ mode_icon = check_mode_icon
129
+ prompt = mode_icon + prompt if mode_icon
114
130
prompt_width = calculate_width ( prompt , true )
115
- if @config . show_mode_in_prompt
116
- if @config . editing_mode_is? ( :vi_command )
117
- mode_icon = @config . vi_cmd_mode_icon
118
- elsif @config . editing_mode_is? ( :vi_insert )
119
- mode_icon = @config . vi_ins_mode_icon
120
- elsif @config . editing_mode_is? ( :emacs )
121
- mode_icon = @config . emacs_mode_string
122
- else
123
- mode_icon = '?'
124
- end
125
- prompt = mode_icon + prompt
126
- end
127
131
[ prompt , prompt_width , nil ]
128
132
end
129
133
end
@@ -213,6 +217,7 @@ def reset_variables(prompt = '', encoding:)
213
217
@eof = false
214
218
@continuous_insertion_buffer = String . new ( encoding : @encoding )
215
219
@scroll_partial_screen = nil
220
+ @prev_mode_icon = nil
216
221
reset_line
217
222
end
218
223
0 commit comments