summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--ranger/gui/ansi.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/ranger/gui/ansi.py b/ranger/gui/ansi.py
index 5fce557a..5f14f84d 100644
--- a/ranger/gui/ansi.py
+++ b/ranger/gui/ansi.py
@@ -106,26 +106,27 @@ def char_slice(ansi_text, start, length):
 	"""
 	chunks = []
 	last_color = ""
-	pos = 0
+	pos = old_pos = 0
 	for i, chunk in enumerate(split_ansi_from_text(ansi_text)):
 		if i % 2 == 1:
 			last_color = chunk
-		elif pos + len(chunk) < start:
-			pos += len(chunk)  #seek
-		elif pos < start and pos + len(chunk) >= start:
-			if chunk[start-pos:start-pos+length]:
+			continue
+
+		old_pos = pos
+		pos += len(chunk)
+		if pos < start:
+			pass # seek
+		elif old_pos < start and pos >= start:
+			if chunk[start-old_pos:start-old_pos+length]:
 				chunks.append(last_color)
-				chunks.append(chunk[start-pos:start-pos+length])
-			pos += len(chunk)
-		elif pos + len(chunk) - start > length:
-			if chunk[:start-pos+length]:
+				chunks.append(chunk[start-old_pos:start-old_pos+length])
+		elif pos > length + start:
+			if chunk[:start-old_pos+length]:
 				chunks.append(last_color)
-				chunks.append(chunk[:start-pos+length])
-			pos += len(chunk)
+				chunks.append(chunk[:start-old_pos+length])
 		else:
 			chunks.append(last_color)
 			chunks.append(chunk)
-			pos += len(chunk)
 		if pos - start >= length:
 			break
 	return ''.join(chunks)