From cfa29acb5acbcd204573363462ccc9d674dab2e9 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Sun, 3 Apr 2022 14:31:36 +0200 Subject: [PATCH] search improvements, added decorators --- .../src/api/baseTerminalTab.component.ts | 3 + .../components/baseTerminalTab.component.pug | 2 +- .../src/components/searchPanel.component.pug | 6 +- tabby-terminal/src/frontends/frontend.ts | 1 + tabby-terminal/src/frontends/xtermFrontend.ts | 21 ++++++- tabby-terminal/yarn.lock | 56 +++++++++---------- 6 files changed, 54 insertions(+), 35 deletions(-) diff --git a/tabby-terminal/src/api/baseTerminalTab.component.ts b/tabby-terminal/src/api/baseTerminalTab.component.ts index 54043612..165655a9 100644 --- a/tabby-terminal/src/api/baseTerminalTab.component.ts +++ b/tabby-terminal/src/api/baseTerminalTab.component.ts @@ -11,6 +11,7 @@ import { Frontend } from '../frontends/frontend' import { XTermFrontend, XTermWebGLFrontend } from '../frontends/xtermFrontend' import { ResizeEvent } from './interfaces' import { TerminalDecorator } from './decorator' +import { SearchPanelComponent } from '../components/searchPanel.component' /** * A class to base your custom terminal tabs on @@ -100,6 +101,8 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit alternateScreenActive = false + @ViewChild(SearchPanelComponent, { 'static': false }) searchPanel?: SearchPanelComponent + // Deps start config: ConfigService element: ElementRef diff --git a/tabby-terminal/src/components/baseTerminalTab.component.pug b/tabby-terminal/src/components/baseTerminalTab.component.pug index 23d1efc7..84232b44 100644 --- a/tabby-terminal/src/components/baseTerminalTab.component.pug +++ b/tabby-terminal/src/components/baseTerminalTab.component.pug @@ -4,7 +4,7 @@ search-panel( *ngIf='showSearchPanel && hasFocus', @toolbarSlide, [frontend]='frontend', - (close)='showSearchPanel = false' + (close)='showSearchPanel = false; frontend?.cancelSearch()' ) button.btn.btn-sm.btn-link.toolbar-pin-button( diff --git a/tabby-terminal/src/components/searchPanel.component.pug b/tabby-terminal/src/components/searchPanel.component.pug index c20538e3..7f367a27 100644 --- a/tabby-terminal/src/components/searchPanel.component.pug +++ b/tabby-terminal/src/components/searchPanel.component.pug @@ -27,7 +27,7 @@ button.btn.btn-link( button.btn.btn-link( (click)='options.caseSensitive = !options.caseSensitive; saveSearchOptions()', - [class.active]='options.caseSensitive', + [class.btn-info]='options.caseSensitive', ngbTooltip='Case sensitivity', placement='bottom', [fastHtmlBind]='icons.case' @@ -35,7 +35,7 @@ button.btn.btn-link( button.btn.btn-link( (click)='options.regex = !options.regex; saveSearchOptions()', - [class.active]='options.regex', + [class.btn-info]='options.regex', ngbTooltip='Regular expression', placement='bottom', [fastHtmlBind]='icons.regexp' @@ -43,7 +43,7 @@ button.btn.btn-link( button.btn.btn-link( (click)='options.wholeWord = !options.wholeWord; saveSearchOptions()', - [class.active]='options.wholeWord', + [class.btn-info]='options.wholeWord', ngbTooltip='Whole word', placement='bottom', [fastHtmlBind]='icons.wholeWord' diff --git a/tabby-terminal/src/frontends/frontend.ts b/tabby-terminal/src/frontends/frontend.ts index 340a126e..19d37290 100644 --- a/tabby-terminal/src/frontends/frontend.ts +++ b/tabby-terminal/src/frontends/frontend.ts @@ -77,6 +77,7 @@ export abstract class Frontend { abstract findNext (term: string, searchOptions?: SearchOptions): boolean abstract findPrevious (term: string, searchOptions?: SearchOptions): boolean + abstract cancelSearch (): void abstract saveState (): any abstract restoreState (state: string): void diff --git a/tabby-terminal/src/frontends/xtermFrontend.ts b/tabby-terminal/src/frontends/xtermFrontend.ts index fc2077ab..3906fe0d 100644 --- a/tabby-terminal/src/frontends/xtermFrontend.ts +++ b/tabby-terminal/src/frontends/xtermFrontend.ts @@ -5,7 +5,7 @@ import { takeUntil } from 'rxjs' import { Terminal, ITheme } from 'xterm' import { FitAddon } from 'xterm-addon-fit' import { LigaturesAddon } from 'xterm-addon-ligatures' -import { SearchAddon } from 'xterm-addon-search' +import { ISearchOptions, SearchAddon } from 'xterm-addon-search' import { WebglAddon } from 'xterm-addon-webgl' import { Unicode11Addon } from 'xterm-addon-unicode11' import { SerializeAddon } from 'xterm-addon-serialize' @@ -55,6 +55,7 @@ export class XTermFrontend extends Frontend { this.xterm = new Terminal({ allowTransparency: true, + overviewRulerWidth: 8, windowsMode: process.platform === 'win32', }) this.xtermCore = this.xterm['_core'] @@ -320,12 +321,26 @@ export class XTermFrontend extends Frontend { this.setFontSize() } + private getSearchOptions (searchOptions?: SearchOptions): ISearchOptions { + return { + ...searchOptions, + decorations: { + matchOverviewRuler: '#cccc00', + activeMatchColorOverviewRuler: '#ffff00', + }, + } + } + findNext (term: string, searchOptions?: SearchOptions): boolean { - return this.search.findNext(term, searchOptions) + return this.search.findNext(term, this.getSearchOptions(searchOptions)) } findPrevious (term: string, searchOptions?: SearchOptions): boolean { - return this.search.findPrevious(term, searchOptions) + return this.search.findPrevious(term, this.getSearchOptions(searchOptions)) + } + + cancelSearch (): void { + this.search.clearDecorations() } saveState (): any { diff --git a/tabby-terminal/yarn.lock b/tabby-terminal/yarn.lock index de7ea5f1..20e85a77 100644 --- a/tabby-terminal/yarn.lock +++ b/tabby-terminal/yarn.lock @@ -157,43 +157,43 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xterm-addon-fit@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" - integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== +xterm-addon-fit@^0.6.0-beta.8: + version "0.6.0-beta.8" + resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.6.0-beta.8.tgz#d1df80c146ee63a8bcb135e5337dba84fa87d753" + integrity sha512-T3bmdIXg019PQnJ7tMx81YUOW8Tjzw6ZB+ejWGNMsgYauFtgXTBAmdXzJ4dDJTlWDW18SHId+O6EmGzC77c44g== -xterm-addon-ligatures@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/xterm-addon-ligatures/-/xterm-addon-ligatures-0.5.2.tgz#b822487a59f73b734d95aecd24167a83adff5828" - integrity sha512-VhBc6fa7Tnl9w5bQpYscgjKgy87v9Aysm4jRcPxWTHwVa9YUpEYjSmg9V7LvCUkCTRH9zvFiw3qZMZYsdeeg6Q== +xterm-addon-ligatures@^0.6.0-beta.14: + version "0.6.0-beta.14" + resolved "https://registry.yarnpkg.com/xterm-addon-ligatures/-/xterm-addon-ligatures-0.6.0-beta.14.tgz#392b8df0e32dcfc87f43b79901ec1c2abc997ae7" + integrity sha512-WeObuNFfGULKhfvbFyCccjxBk+BX6YMvG54lu40kgW5ubwpt0BcnKTQAxHvt9mSeT0lG0A5GxcbimBeRWc484Q== dependencies: font-finder "^1.1.0" font-ligatures "^1.4.1" -xterm-addon-search@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032" - integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg== +xterm-addon-search@^0.9.0-beta.18: + version "0.9.0-beta.18" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.9.0-beta.18.tgz#5317aed1dc747f468ccb7ecd151fb00d82a8a19d" + integrity sha512-SAeA3thc2WJNYXwjOEJFLpZ1ZVOs22RLmz9a6WcrzXkvCjLZRvbRGwX25Ms+Dd7dVDQNbKVUzUJohspP/vYr0Q== -xterm-addon-serialize@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.6.1.tgz#509335afee1367628dc685b822a1055b1213de83" - integrity sha512-dKscxAaNU6+cWEpuLrUGEn/IjrRvhdaVbDyJlIN1uQYGTi8HOgoGIoy6D5WtPabl2/CJ0W4OwlOQaUotCktXYA== +xterm-addon-serialize@^0.7.0-beta.12: + version "0.7.0-beta.12" + resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.7.0-beta.12.tgz#4f845d8b1a9f9b7ae3f910455ce8c58b041babc7" + integrity sha512-b4Ug0B/RSJMux+KAcp+PXVqubVyXjN1yCQw1FOkgVYTpmd9AH/X+EcxKml5Lz8DsKmsXqfD9AlV3WpEeT+OtMw== -xterm-addon-unicode11@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0.tgz#e4435c3c91a5294a7eb8b79c380acbb28a659463" - integrity sha512-x5fHDZT2j9tlTlHnzPHt++9uKZ2kJ/lYQOj3L6xJA22xoJsS8UQRw/5YIFg2FUHqEAbV77Z1fZij/9NycMSH/A== +xterm-addon-unicode11@^0.4.0-beta.3: + version "0.4.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.4.0-beta.3.tgz#f350184155fafd5ad0d6fbf31d13e6ca7dea1efa" + integrity sha512-FryZAVwbUjKTmwXnm1trch/2XO60F5JsDvOkZhzobV1hm10sFLVuZpFyHXiUx7TFeeFsvNP+S77LAtWoeT5z+Q== -xterm-addon-webgl@^0.12.0-beta.24: - version "0.12.0-beta.24" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.12.0-beta.24.tgz#5c17256933991856554c95c9bd1eaab42e9727a0" - integrity sha512-+wZxKReEOlfN9JRHyikoffA6Do61/THR7QY35ajkQo0lLutKr6hTd/TLTuZh0PhFVelgTgudpXqlP++Lc0WFIA== +xterm-addon-webgl@^0.12.0-beta.27: + version "0.12.0-beta.27" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.12.0-beta.27.tgz#afc5bc01d1ef3af9005fb9f6325a4db9c92aa8d9" + integrity sha512-P948trotU8FMHtaA7C2x97VpLq6QLSjO53kWNvONS0/XwEKQBIYCI7Jfri2wcLgfQg6Cn4OQGLoj2YBK3MMyww== -"xterm@npm:@tabby-gang/xterm@^4.17.1-beta.2": - version "4.17.1-beta.2" - resolved "https://registry.yarnpkg.com/@tabby-gang/xterm/-/xterm-4.17.1-beta.2.tgz#3b4b542297609f082c12b0877582cdf1398a84b5" - integrity sha512-tKePw6VBFVGvnKaxtfuS7qKbeX8bIT0+7asXSP70RA/78h8xeq3YoRHaV/cZEHaicNHMchlYFbXl3VpHXwusDw== +xterm@^4.19.0-beta.20: + version "4.19.0-beta.20" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0-beta.20.tgz#d8e970d8a8460c1d1a5ec9866f78f607a44c1349" + integrity sha512-IYI4ngSWzpV4sJXLWGEDF7vgLuUHn0CUQ42+TGv4H/hCGo4uru4s/D3Yws0ETb3a9VwRpZEPsigULaWTnhFusg== yallist@^4.0.0: version "4.0.0"