Skip to content

Commit

Permalink
Merge pull request #4289 from JasonXJ/scroll-options
Browse files Browse the repository at this point in the history
Add option scrollOnUserInput
  • Loading branch information
Tyriar committed Dec 11, 2022
2 parents 33bba35 + 9e84895 commit 2e2d275
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/browser/Terminal.ts
Expand Up @@ -995,7 +995,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
const shouldIgnoreComposition = this.browser.isMac && this.options.macOptionIsMeta && event.altKey;

if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {
if (this.buffer.ybase !== this.buffer.ydisp) {
if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {
this._bufferService.scrollToBottom();
}
return false;
Expand Down
2 changes: 1 addition & 1 deletion src/common/services/CoreService.ts
Expand Up @@ -68,7 +68,7 @@ export class CoreService extends Disposable implements ICoreService {

// Input is being sent to the terminal, the terminal should focus the prompt.
const buffer = this._bufferService.buffer;
if (buffer.ybase !== buffer.ydisp) {
if (wasUserInput && this._optionsService.rawOptions.scrollOnUserInput && buffer.ybase !== buffer.ydisp) {
this._scrollToBottom!();
}

Expand Down
1 change: 1 addition & 0 deletions src/common/services/OptionsService.ts
Expand Up @@ -28,6 +28,7 @@ export const DEFAULT_OPTIONS: Readonly<Required<ITerminalOptions>> = {
linkHandler: null,
logLevel: 'info',
scrollback: 1000,
scrollOnUserInput: true,
scrollSensitivity: 1,
screenReaderMode: false,
smoothScrollDuration: 0,
Expand Down
5 changes: 3 additions & 2 deletions src/common/services/Services.ts
Expand Up @@ -85,9 +85,9 @@ export interface ICoreService {
/**
* Triggers the onData event in the public API.
* @param data The data that is being emitted.
* @param wasFromUser Whether the data originated from the user (as opposed to
* @param wasUserInput Whether the data originated from the user (as opposed to
* resulting from parsing incoming data). When true this will also:
* - Scroll to the bottom of the buffer.s
* - Scroll to the bottom of the buffer if option scrollOnUserInput is true.
* - Fire the `onUserInput` event (so selection can be cleared).
*/
triggerDataEvent(data: string, wasUserInput?: boolean): void;
Expand Down Expand Up @@ -243,6 +243,7 @@ export interface ITerminalOptions {
rows?: number;
screenReaderMode?: boolean;
scrollback?: number;
scrollOnUserInput?: boolean;
scrollSensitivity?: number;
smoothScrollDuration?: number;
tabStopWidth?: number;
Expand Down
6 changes: 6 additions & 0 deletions typings/xterm.d.ts
Expand Up @@ -193,6 +193,12 @@ declare module 'xterm' {
*/
scrollback?: number;

/**
* Whether to scroll to the bottom whenever there is some user input. The
* default is true.
*/
scrollOnUserInput?: boolean;

/**
* The scrolling speed multiplier used for adjusting normal scrolling speed.
*/
Expand Down

0 comments on commit 2e2d275

Please sign in to comment.