Browse Source

Fixes #135 - Full-width chars break gutter annotations

main
Eric Amodio 7 years ago
parent
commit
6255b26fd2
2 changed files with 19 additions and 3 deletions
  1. +1
    -1
      src/annotations/gutterBlameAnnotationProvider.ts
  2. +18
    -2
      src/system/string.ts

+ 1
- 1
src/annotations/gutterBlameAnnotationProvider.ts View File

@ -61,7 +61,7 @@ export class GutterBlameAnnotationProvider extends BlameAnnotationProviderBase {
gutter.renderOptions = { ...gutter.renderOptions };
gutter.renderOptions.before = {
...gutter.renderOptions.before,
...{ contentText: GlyphChars.Space.repeat(gutter.renderOptions!.before!.contentText!.length) }
...{ contentText: GlyphChars.Space.repeat(Strings.getWidth(gutter.renderOptions!.before!.contentText!)) }
};
if (separateLines) {

+ 18
- 2
src/system/string.ts View File

@ -102,7 +102,23 @@ export namespace Strings {
}
export function truncate(s: string, truncateTo?: number) {
if (!s || truncateTo === undefined || getWidth(s) <= truncateTo) return s;
return `${s.substring(0, truncateTo - 1)}\u2026`;
if (!s || truncateTo === undefined) return s;
const len = getWidth(s);
if (len <= truncateTo) return s;
if (len === s.length) return `${s.substring(0, truncateTo - 1)}\u2026`;
// Skip ahead to start as far as we can by assuming all the double-width characters won't be truncated
let chars = Math.floor(truncateTo / (len / s.length));
let count = getWidth(s.substring(0, chars));
while (count < truncateTo) {
count += getWidth(s[chars++]);
}
if (count > truncateTo) {
chars--;
}
return `${s.substring(0, chars)}\u2026`;
}
}

Loading…
Cancel
Save