mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 13:34:17 +02:00
[ruby/reline] Fix split_by_width to retain color sequences
(https://github.com/ruby/reline/pull/490) * Fix split_by_width to retain color sequences * Add OSC escape sequence testcase of Reline::Unicode.split_by_width
This commit is contained in:
parent
9bc2dbd33c
commit
60ca800d4f
2 changed files with 15 additions and 1 deletions
|
@ -160,16 +160,21 @@ class Reline::Unicode
|
|||
width = 0
|
||||
rest = str.encode(Encoding::UTF_8)
|
||||
in_zero_width = false
|
||||
seq = String.new(encoding: encoding)
|
||||
rest.scan(WIDTH_SCANNER) do |gc|
|
||||
case
|
||||
when gc[NON_PRINTING_START_INDEX]
|
||||
in_zero_width = true
|
||||
lines.last << NON_PRINTING_START
|
||||
when gc[NON_PRINTING_END_INDEX]
|
||||
in_zero_width = false
|
||||
lines.last << NON_PRINTING_END
|
||||
when gc[CSI_REGEXP_INDEX]
|
||||
lines.last << gc[CSI_REGEXP_INDEX]
|
||||
seq << gc[CSI_REGEXP_INDEX]
|
||||
when gc[OSC_REGEXP_INDEX]
|
||||
lines.last << gc[OSC_REGEXP_INDEX]
|
||||
seq << gc[OSC_REGEXP_INDEX]
|
||||
when gc[GRAPHEME_CLUSTER_INDEX]
|
||||
gc = gc[GRAPHEME_CLUSTER_INDEX]
|
||||
unless in_zero_width
|
||||
|
@ -177,7 +182,7 @@ class Reline::Unicode
|
|||
if (width += mbchar_width) > max_width
|
||||
width = mbchar_width
|
||||
lines << nil
|
||||
lines << String.new(encoding: encoding)
|
||||
lines << seq.dup
|
||||
height += 1
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue