summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/reline/line_editor.rb4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index af634da650..f4e012688e 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -81,6 +81,7 @@ class Reline::LineEditor
MenuInfo = Struct.new('MenuInfo', :target, :list)
CSI_REGEXP = /\e\[(?:\d+;?)*[ABCDEFGHJKSTfminsuhl]/
+ NON_PRINTING_ESCAPES = "\1\2"
def initialize(config)
@config = config
@@ -164,6 +165,8 @@ class Reline::LineEditor
lines = [String.new(encoding: @encoding)]
height = 1
width = 0
+ prompt = prompt.tr(NON_PRINTING_ESCAPES, '')
+ str = str.tr(NON_PRINTING_ESCAPES, '')
rest = "#{prompt}#{str}".encode(Encoding::UTF_8)
loop do
break if rest.empty?
@@ -803,6 +806,7 @@ class Reline::LineEditor
private def calculate_width(str, allow_csi = false)
if allow_csi
str = str.gsub(CSI_REGEXP, '')
+ str = str.tr(NON_PRINTING_ESCAPES, '')
end
str.encode(Encoding::UTF_8).grapheme_clusters.inject(0) { |width, gc|
width + Reline::Unicode.get_mbchar_width(gc)