Skip to content

Commit e3e9c6e

Browse files
committed
Interpret tabs correctly when rendering minimap
1 parent 20e3d93 commit e3e9c6e

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import { /*createMinimapCharRenderer,*/ createMinimapCharRenderer2 } from 'vs/ed
1616
import * as browser from 'vs/base/browser/browser';
1717
import { MinimapColors, MinimapTokensColorTracker, Constants } from 'vs/editor/common/view/minimapCharRenderer';
1818
import * as editorCommon from 'vs/editor/common/editorCommon';
19-
19+
import { CharCode } from 'vs/base/common/charCode';
2020
import { MinimapLineRenderingData } from 'vs/editor/common/viewModel/viewModel';
21+
2122
// let charRenderer = createMinimapCharRenderer();
2223
let charRenderer2 = createMinimapCharRenderer2();
2324

@@ -262,10 +263,13 @@ export class Minimap extends ViewPart {
262263
private static _render2xLine(target: ImageData, colors: MinimapColors, dy: number, maxColumn: number, lineData: MinimapLineRenderingData) {
263264
const content = lineData.content;
264265
const tokens = lineData.tokens;
266+
const tabSize = lineData.tabSize;
265267
const charIndexStop = Math.min(content.length, maxColumn - 1);
266268

267269
let dx = 0;
268270
let charIndex = 0;
271+
let tabsCharDelta = 0;
272+
269273
for (let tokenIndex = 0, tokensLen = tokens.length; tokenIndex < tokensLen; tokenIndex++) {
270274
const token = tokens[tokenIndex];
271275
const tokenEndIndex = token.endIndex;
@@ -279,8 +283,18 @@ export class Minimap extends ViewPart {
279283
}
280284
const charCode = content.charCodeAt(charIndex);
281285

282-
charRenderer2.x2RenderChar(target, dx, dy, charCode, tokenColor);
283-
dx += Constants.x2_CHAR_WIDTH;
286+
if (charCode === CharCode.Tab) {
287+
let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;
288+
tabsCharDelta += insertSpacesCount - 1;
289+
// No need to render anything since tab is invisible
290+
dx += insertSpacesCount * Constants.x2_CHAR_WIDTH;
291+
} else if (charCode === CharCode.Space) {
292+
// No need to render anything since space is invisible
293+
dx += Constants.x2_CHAR_WIDTH;
294+
} else {
295+
charRenderer2.x2RenderChar(target, dx, dy, charCode, tokenColor);
296+
dx += Constants.x2_CHAR_WIDTH;
297+
}
284298
}
285299
}
286300
}

0 commit comments

Comments
 (0)