浏览代码

less: Handle tabs in line wrapping

Before tabs were treated as a width of 1, which would cause issues with
man page headers.
Peter Elliott 3 年之前
父节点
当前提交
23e09eb7f4
共有 1 个文件被更改,包括 9 次插入3 次删除
  1. 9 3
      Userland/Utilities/less.cpp

+ 9 - 3
Userland/Utilities/less.cpp

@@ -75,9 +75,15 @@ static Vector<StringView> wrap_line(String const& string, size_t width)
         if (*it == '\e')
             in_ansi = true;
 
-        if (!in_ansi)
-            // FIXME: calculate the printed width of the character.
-            offset++;
+        if (!in_ansi) {
+            if (*it == '\t') {
+                // Tabs are a special case, because their width is variable.
+                offset += (8 - (offset % 8));
+            } else {
+                // FIXME: calculate the printed width of the character.
+                offset++;
+            }
+        }
 
         if (isalpha(*it))
             in_ansi = false;