This commit is contained in:
rebornix 2021-07-25 21:58:33 -07:00
parent c5720ec57b
commit 955a1aca9a
5 changed files with 24 additions and 9 deletions

View file

@ -247,6 +247,11 @@
word-wrap: break-word; word-wrap: break-word;
} }
.monaco-workbench .notebookOverlay .output > div.foreground .output-stream pre,
.monaco-workbench .notebookOverlay .output > div.foreground .output-plaintext pre {
font-family: var(--monaco-monospace-font);
}
.monaco-workbench .notebookOverlay .output > div.foreground.error .output-stream { .monaco-workbench .notebookOverlay .output > div.foreground.error .output-stream {
color: red; /*TODO@rebornix theme color*/ color: red; /*TODO@rebornix theme color*/
} }

View file

@ -30,7 +30,7 @@ import { NotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookEd
import { isCompositeNotebookEditorInput, NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput'; import { isCompositeNotebookEditorInput, NotebookEditorInput } from 'vs/workbench/contrib/notebook/common/notebookEditorInput';
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService'; import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
import { NotebookService } from 'vs/workbench/contrib/notebook/browser/notebookServiceImpl'; import { NotebookService } from 'vs/workbench/contrib/notebook/browser/notebookServiceImpl';
import { CellKind, CellToolbarLocation, CellToolbarVisibility, CellUri, DisplayOrderKey, UndoRedoPerCell, IResolvedNotebookEditorModel, NotebookDocumentBackupData, NotebookTextDiffEditorPreview, NotebookWorkingCopyTypeIdentifier, ShowCellStatusBar, CompactView, FocusIndicator, InsertToolbarLocation, GlobalToolbar, ConsolidatedOutputButton, ShowFoldingControls, DragAndDropEnabled, NotebookCellEditorOptionsCustomizations, ConsolidatedRunButton } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { CellKind, CellToolbarLocation, CellToolbarVisibility, CellUri, DisplayOrderKey, UndoRedoPerCell, IResolvedNotebookEditorModel, NotebookDocumentBackupData, NotebookTextDiffEditorPreview, NotebookWorkingCopyTypeIdentifier, ShowCellStatusBar, CompactView, FocusIndicator, InsertToolbarLocation, GlobalToolbar, ConsolidatedOutputButton, ShowFoldingControls, DragAndDropEnabled, NotebookCellEditorOptionsCustomizations, ConsolidatedRunButton, TextOutputLineLimit } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo'; import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo';
import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService'; import { INotebookEditorModelResolverService } from 'vs/workbench/contrib/notebook/common/notebookEditorModelResolverService';
@ -724,6 +724,11 @@ configurationRegistry.registerConfiguration({
default: false, default: false,
tags: ['notebookLayout'] tags: ['notebookLayout']
}, },
[TextOutputLineLimit]: {
description: nls.localize('notebook.textOutputLineLimit', "Control how many lines of text in a text output is rendered."),
type: 'number',
default: 30
},
[NotebookCellEditorOptionsCustomizations]: editorOptionsCustomizationSchema [NotebookCellEditorOptionsCustomizations]: editorOptionsCustomizationSchema
} }
}); });

View file

@ -9,6 +9,7 @@ import { Mimes } from 'vs/base/common/mime';
import { dirname } from 'vs/base/common/resources'; import { dirname } from 'vs/base/common/resources';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { MarkdownRenderer } from 'vs/editor/browser/core/markdownRenderer'; import { MarkdownRenderer } from 'vs/editor/browser/core/markdownRenderer';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { IOpenerService } from 'vs/platform/opener/common/opener'; import { IOpenerService } from 'vs/platform/opener/common/opener';
@ -18,7 +19,7 @@ import { LinkDetector } from 'vs/workbench/contrib/debug/browser/linkDetector';
import { ICellOutputViewModel, ICommonNotebookEditor, IOutputTransformContribution as IOutputRendererContribution, IRenderOutput, RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; import { ICellOutputViewModel, ICommonNotebookEditor, IOutputTransformContribution as IOutputRendererContribution, IRenderOutput, RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { OutputRendererRegistry } from 'vs/workbench/contrib/notebook/browser/view/output/rendererRegistry'; import { OutputRendererRegistry } from 'vs/workbench/contrib/notebook/browser/view/output/rendererRegistry';
import { truncatedArrayOfString } from 'vs/workbench/contrib/notebook/browser/view/output/transforms/textHelper'; import { truncatedArrayOfString } from 'vs/workbench/contrib/notebook/browser/view/output/transforms/textHelper';
import { IOutputItemDto } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { IOutputItemDto, TextOutputLineLimit } from 'vs/workbench/contrib/notebook/common/notebookCommon';
class JavaScriptRendererContrib extends Disposable implements IOutputRendererContribution { class JavaScriptRendererContrib extends Disposable implements IOutputRendererContribution {
@ -63,6 +64,7 @@ class StreamRendererContrib extends Disposable implements IOutputRendererContrib
@IOpenerService private readonly openerService: IOpenerService, @IOpenerService private readonly openerService: IOpenerService,
@IThemeService private readonly themeService: IThemeService, @IThemeService private readonly themeService: IThemeService,
@IInstantiationService private readonly instantiationService: IInstantiationService, @IInstantiationService private readonly instantiationService: IInstantiationService,
@IConfigurationService private readonly configurationService: IConfigurationService
) { ) {
super(); super();
} }
@ -72,7 +74,8 @@ class StreamRendererContrib extends Disposable implements IOutputRendererContrib
const text = getStringValue(item); const text = getStringValue(item);
const contentNode = DOM.$('span.output-stream'); const contentNode = DOM.$('span.output-stream');
truncatedArrayOfString(notebookUri, output.cellViewModel, contentNode, [text], linkDetector, this.openerService, this.themeService); const lineLimit = this.configurationService.getValue<number>(TextOutputLineLimit) ?? 30;
truncatedArrayOfString(notebookUri, output.cellViewModel, Math.max(lineLimit, 6), contentNode, [text], linkDetector, this.openerService, this.themeService);
container.appendChild(contentNode); container.appendChild(contentNode);
return { type: RenderOutputType.Mainframe }; return { type: RenderOutputType.Mainframe };
@ -161,6 +164,7 @@ class PlainTextRendererContrib extends Disposable implements IOutputRendererCont
public notebookEditor: ICommonNotebookEditor, public notebookEditor: ICommonNotebookEditor,
@IOpenerService private readonly openerService: IOpenerService, @IOpenerService private readonly openerService: IOpenerService,
@IThemeService private readonly themeService: IThemeService, @IThemeService private readonly themeService: IThemeService,
@IConfigurationService private readonly configurationService: IConfigurationService,
@IInstantiationService private readonly instantiationService: IInstantiationService @IInstantiationService private readonly instantiationService: IInstantiationService
) { ) {
super(); super();
@ -171,7 +175,8 @@ class PlainTextRendererContrib extends Disposable implements IOutputRendererCont
const str = getStringValue(item); const str = getStringValue(item);
const contentNode = DOM.$('.output-plaintext'); const contentNode = DOM.$('.output-plaintext');
truncatedArrayOfString(notebookUri, output.cellViewModel, contentNode, [str], linkDetector, this.openerService, this.themeService); const lineLimit = this.configurationService.getValue<number>(TextOutputLineLimit) ?? 30;
truncatedArrayOfString(notebookUri, output.cellViewModel, Math.max(lineLimit, 6), contentNode, [str], linkDetector, this.openerService, this.themeService);
container.appendChild(contentNode); container.appendChild(contentNode);
return { type: RenderOutputType.Mainframe, supportAppend: true }; return { type: RenderOutputType.Mainframe, supportAppend: true };

View file

@ -20,7 +20,6 @@ import { URI } from 'vs/base/common/uri';
import { IGenericCellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; import { IGenericCellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
const SIZE_LIMIT = 65535; const SIZE_LIMIT = 65535;
const LINES_LIMIT = 500;
function generateViewMoreElement(notebookUri: URI, cellViewModel: IGenericCellViewModel, outputs: string[], openerService: IOpenerService) { function generateViewMoreElement(notebookUri: URI, cellViewModel: IGenericCellViewModel, outputs: string[], openerService: IOpenerService) {
const md: IMarkdownString = { const md: IMarkdownString = {
@ -46,7 +45,7 @@ function generateViewMoreElement(notebookUri: URI, cellViewModel: IGenericCellVi
return element; return element;
} }
export function truncatedArrayOfString(notebookUri: URI, cellViewModel: IGenericCellViewModel, container: HTMLElement, outputs: string[], linkDetector: LinkDetector, openerService: IOpenerService, themeService: IThemeService) { export function truncatedArrayOfString(notebookUri: URI, cellViewModel: IGenericCellViewModel, linesLimit: number, container: HTMLElement, outputs: string[], linkDetector: LinkDetector, openerService: IOpenerService, themeService: IThemeService) {
const fullLen = outputs.reduce((p, c) => { const fullLen = outputs.reduce((p, c) => {
return p + c.length; return p + c.length;
}, 0); }, 0);
@ -60,7 +59,7 @@ export function truncatedArrayOfString(notebookUri: URI, cellViewModel: IGeneric
const factory = bufferBuilder.finish(); const factory = bufferBuilder.finish();
buffer = factory.create(DefaultEndOfLine.LF).textBuffer; buffer = factory.create(DefaultEndOfLine.LF).textBuffer;
const sizeBufferLimitPosition = buffer.getPositionAt(SIZE_LIMIT); const sizeBufferLimitPosition = buffer.getPositionAt(SIZE_LIMIT);
if (sizeBufferLimitPosition.lineNumber < LINES_LIMIT) { if (sizeBufferLimitPosition.lineNumber < linesLimit) {
const truncatedText = buffer.getValueInRange(new Range(1, 1, sizeBufferLimitPosition.lineNumber, sizeBufferLimitPosition.column), EndOfLinePreference.TextDefined); const truncatedText = buffer.getValueInRange(new Range(1, 1, sizeBufferLimitPosition.lineNumber, sizeBufferLimitPosition.column), EndOfLinePreference.TextDefined);
container.appendChild(handleANSIOutput(truncatedText, linkDetector, themeService, undefined)); container.appendChild(handleANSIOutput(truncatedText, linkDetector, themeService, undefined));
// view more ... // view more ...
@ -76,7 +75,7 @@ export function truncatedArrayOfString(notebookUri: URI, cellViewModel: IGeneric
buffer = factory.create(DefaultEndOfLine.LF).textBuffer; buffer = factory.create(DefaultEndOfLine.LF).textBuffer;
} }
if (buffer.getLineCount() < LINES_LIMIT) { if (buffer.getLineCount() < linesLimit) {
const lineCount = buffer.getLineCount(); const lineCount = buffer.getLineCount();
const fullRange = new Range(1, 1, lineCount, Math.max(1, buffer.getLineLastNonWhitespaceColumn(lineCount))); const fullRange = new Range(1, 1, lineCount, Math.max(1, buffer.getLineLastNonWhitespaceColumn(lineCount)));
container.appendChild(handleANSIOutput(buffer.getValueInRange(fullRange, EndOfLinePreference.TextDefined), linkDetector, themeService, undefined)); container.appendChild(handleANSIOutput(buffer.getValueInRange(fullRange, EndOfLinePreference.TextDefined), linkDetector, themeService, undefined));
@ -85,7 +84,7 @@ export function truncatedArrayOfString(notebookUri: URI, cellViewModel: IGeneric
const pre = DOM.$('pre'); const pre = DOM.$('pre');
container.appendChild(pre); container.appendChild(pre);
pre.appendChild(handleANSIOutput(buffer.getValueInRange(new Range(1, 1, LINES_LIMIT - 5, buffer.getLineLastNonWhitespaceColumn(LINES_LIMIT - 5)), EndOfLinePreference.TextDefined), linkDetector, themeService, undefined)); pre.appendChild(handleANSIOutput(buffer.getValueInRange(new Range(1, 1, linesLimit - 5, buffer.getLineLastNonWhitespaceColumn(linesLimit - 5)), EndOfLinePreference.TextDefined), linkDetector, themeService, undefined));
// view more ... // view more ...
container.appendChild(generateViewMoreElement(notebookUri, cellViewModel, outputs, openerService)); container.appendChild(generateViewMoreElement(notebookUri, cellViewModel, outputs, openerService));

View file

@ -850,6 +850,7 @@ export const DragAndDropEnabled = 'notebook.dragAndDropEnabled';
export const NotebookCellEditorOptionsCustomizations = 'notebook.editorOptionsCustomizations'; export const NotebookCellEditorOptionsCustomizations = 'notebook.editorOptionsCustomizations';
export const ConsolidatedRunButton = 'notebook.consolidatedRunButton'; export const ConsolidatedRunButton = 'notebook.consolidatedRunButton';
export const OpenGettingStarted = 'notebook.experimental.openGettingStarted'; export const OpenGettingStarted = 'notebook.experimental.openGettingStarted';
export const TextOutputLineLimit = 'notebook.output.textLineLimit';
export const enum CellStatusbarAlignment { export const enum CellStatusbarAlignment {
Left = 1, Left = 1,