mirror of
https://github.com/Eugeny/tabby.git
synced 2025-06-18 02:19:57 +00:00
Merge branch 'master' into feature/sidetab
This commit is contained in:
commit
cbebc09504
@ -307,6 +307,24 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"code"
|
"code"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "matishadow",
|
||||||
|
"name": "Mateusz Tracz",
|
||||||
|
"avatar_url": "https://avatars0.githubusercontent.com/u/9083085?v=4",
|
||||||
|
"profile": "https://about.me/matishadow",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "pinpins",
|
||||||
|
"name": "pinpin",
|
||||||
|
"avatar_url": "https://avatars3.githubusercontent.com/u/36234677?v=4",
|
||||||
|
"profile": "https://zergpool.com",
|
||||||
|
"contributions": [
|
||||||
|
"code"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
node_js: 11
|
node_js: 10
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- Build
|
- Build
|
||||||
|
@ -115,6 +115,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|||||||
<td align="center"><a href="https://github.com/Dimitory"><img src="https://avatars0.githubusercontent.com/u/475955?v=4" width="100px;" alt=""/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=dimitory" title="Code">💻</a></td>
|
<td align="center"><a href="https://github.com/Dimitory"><img src="https://avatars0.githubusercontent.com/u/475955?v=4" width="100px;" alt=""/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=dimitory" title="Code">💻</a></td>
|
||||||
<td align="center"><a href="https://github.com/JonathanBeverley"><img src="https://avatars1.githubusercontent.com/u/20328966?v=4" width="100px;" alt=""/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=JonathanBeverley" title="Code">💻</a></td>
|
<td align="center"><a href="https://github.com/JonathanBeverley"><img src="https://avatars1.githubusercontent.com/u/20328966?v=4" width="100px;" alt=""/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=JonathanBeverley" title="Code">💻</a></td>
|
||||||
<td align="center"><a href="https://github.com/zend"><img src="https://avatars1.githubusercontent.com/u/25160?v=4" width="100px;" alt=""/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=zend" title="Code">💻</a></td>
|
<td align="center"><a href="https://github.com/zend"><img src="https://avatars1.githubusercontent.com/u/25160?v=4" width="100px;" alt=""/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=zend" title="Code">💻</a></td>
|
||||||
|
<td align="center"><a href="https://about.me/matishadow"><img src="https://avatars0.githubusercontent.com/u/9083085?v=4" width="100px;" alt=""/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=matishadow" title="Code">💻</a></td>
|
||||||
|
<td align="center"><a href="https://zergpool.com"><img src="https://avatars3.githubusercontent.com/u/36234677?v=4" width="100px;" alt=""/><br /><sub><b>pinpin</b></sub></a><br /><a href="https://github.com/Eugeny/terminus/commits?author=pinpins" title="Code">💻</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -139,9 +139,7 @@ export class Application {
|
|||||||
|
|
||||||
handleSecondInstance (argv: string[], cwd: string): void {
|
handleSecondInstance (argv: string[], cwd: string): void {
|
||||||
this.presentAllWindows()
|
this.presentAllWindows()
|
||||||
for (let window of this.windows) {
|
this.windows[this.windows.length - 1].handleSecondInstance(argv, cwd)
|
||||||
window.handleSecondInstance(argv, cwd)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private setupMenu () {
|
private setupMenu () {
|
||||||
|
@ -211,10 +211,8 @@ export class Window {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleSecondInstance (argv: string[], cwd: string): void {
|
handleSecondInstance (argv: string[], cwd: string): void {
|
||||||
if (!this.configStore.appearance?.dock) {
|
|
||||||
this.send('host:second-instance', parseArgs(argv, cwd), cwd)
|
this.send('host:second-instance', parseArgs(argv, cwd), cwd)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private setupWindowManagement () {
|
private setupWindowManagement () {
|
||||||
this.window.on('show', () => {
|
this.window.on('show', () => {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
|
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
|
||||||
.index(
|
.index(*ngIf='!config.store.terminal.hideTabIndex',
|
||||||
#handle,
|
#handle,
|
||||||
[style.background-color]='tab.color',
|
[style.background-color]='tab.color',
|
||||||
) {{index + 1}}
|
) {{index + 1}}
|
||||||
.name([title]='tab.customTitle || tab.title') {{tab.customTitle || tab.title}}
|
.name([title]='tab.customTitle || tab.title') {{tab.customTitle || tab.title}}
|
||||||
button((click)='app.closeTab(tab, true)') ×
|
button(*ngIf='!config.store.terminal.hideCloseButton',(click)='app.closeTab(tab, true)') ×
|
||||||
|
@ -9,6 +9,7 @@ import { HotkeysService } from '../services/hotkeys.service'
|
|||||||
import { ElectronService } from '../services/electron.service'
|
import { ElectronService } from '../services/electron.service'
|
||||||
import { AppService } from '../services/app.service'
|
import { AppService } from '../services/app.service'
|
||||||
import { HostAppService, Platform } from '../services/hostApp.service'
|
import { HostAppService, Platform } from '../services/hostApp.service'
|
||||||
|
import { ConfigService } from '../services/config.service'
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
export interface SortableComponentProxy {
|
export interface SortableComponentProxy {
|
||||||
@ -31,6 +32,7 @@ export class TabHeaderComponent {
|
|||||||
|
|
||||||
private constructor (
|
private constructor (
|
||||||
public app: AppService,
|
public app: AppService,
|
||||||
|
public config: ConfigService,
|
||||||
private electron: ElectronService,
|
private electron: ElectronService,
|
||||||
private hostApp: HostAppService,
|
private hostApp: HostAppService,
|
||||||
private ngbModal: NgbModal,
|
private ngbModal: NgbModal,
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
"@types/ssh2": "^0.5.35",
|
"@types/ssh2": "^0.5.35",
|
||||||
"ansi-colors": "^4.1.1",
|
"ansi-colors": "^4.1.1",
|
||||||
"cli-spinner": "^0.2.10",
|
"cli-spinner": "^0.2.10",
|
||||||
|
"run-script-os": "^1.1.3",
|
||||||
"ssh2": "^0.8.2",
|
"ssh2": "^0.8.2",
|
||||||
"ssh2-streams": "Eugeny/ssh2-streams#75f6d3425d071ac73a18fd46e2f5e738bfe897c5",
|
"ssh2-streams": "Eugeny/ssh2-streams#75f6d3425d071ac73a18fd46e2f5e738bfe897c5",
|
||||||
"sshpk": "^1.16.1",
|
"sshpk": "^1.16.1",
|
||||||
|
@ -246,7 +246,7 @@ export class SSHSession extends BaseSession {
|
|||||||
fw.targetPort,
|
fw.targetPort,
|
||||||
(err, stream) => {
|
(err, stream) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.emitServiceMessage(colors.bgRed.black(' X ') + ` Remote has rejected the forwaded connection via ${fw}: ${err}`)
|
this.emitServiceMessage(colors.bgRed.black(' X ') + ` Remote has rejected the forwarded connection via ${fw}: ${err}`)
|
||||||
socket.destroy()
|
socket.destroy()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -263,7 +263,7 @@ export class SSHSession extends BaseSession {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.emitServiceMessage(colors.bgGreen.black(' -> ') + ` Forwaded ${fw}`)
|
this.emitServiceMessage(colors.bgGreen.black(' -> ') + ` Forwarded ${fw}`)
|
||||||
this.forwardedPorts.push(fw)
|
this.forwardedPorts.push(fw)
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.emitServiceMessage(colors.bgRed.black(' X ') + ` Failed to forward port ${fw}: ${e}`)
|
this.emitServiceMessage(colors.bgRed.black(' X ') + ` Failed to forward port ${fw}: ${e}`)
|
||||||
@ -280,7 +280,7 @@ export class SSHSession extends BaseSession {
|
|||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
this.emitServiceMessage(colors.bgGreen.black(' <- ') + ` Forwaded ${fw}`)
|
this.emitServiceMessage(colors.bgGreen.black(' <- ') + ` Forwarded ${fw}`)
|
||||||
this.forwardedPorts.push(fw)
|
this.forwardedPorts.push(fw)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,11 @@ try {
|
|||||||
var windowsProcessTreeNative = require('windows-process-tree/build/Release/windows_process_tree.node') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
|
var windowsProcessTreeNative = require('windows-process-tree/build/Release/windows_process_tree.node') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
|
||||||
} catch { }
|
} catch { }
|
||||||
|
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-type-alias
|
||||||
|
export type SSHLogCallback = (message: string) => void
|
||||||
|
|
||||||
|
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
export class SSHService {
|
export class SSHService {
|
||||||
private logger: Logger
|
private logger: Logger
|
||||||
@ -46,33 +51,24 @@ export class SSHService {
|
|||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
async connectSession (session: SSHSession, logCallback?: (s: any) => void): Promise<void> {
|
async loadPrivateKeyForSession (session: SSHSession, logCallback?: SSHLogCallback): Promise<string|null> {
|
||||||
let privateKey: string|null = null
|
let privateKey: string|null = null
|
||||||
let privateKeyPath = session.connection.privateKey
|
let privateKeyPath = session.connection.privateKey
|
||||||
|
|
||||||
if (!logCallback) {
|
|
||||||
logCallback = () => null
|
|
||||||
}
|
|
||||||
|
|
||||||
const log = (s: any) => {
|
|
||||||
logCallback!(s)
|
|
||||||
this.logger.info(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!privateKeyPath) {
|
if (!privateKeyPath) {
|
||||||
const userKeyPath = path.join(process.env.HOME as string, '.ssh', 'id_rsa')
|
const userKeyPath = path.join(process.env.HOME as string, '.ssh', 'id_rsa')
|
||||||
if (await fs.exists(userKeyPath)) {
|
if (await fs.exists(userKeyPath)) {
|
||||||
log('Using user\'s default private key')
|
logCallback?.('Using user\'s default private key')
|
||||||
privateKeyPath = userKeyPath
|
privateKeyPath = userKeyPath
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (privateKeyPath) {
|
if (privateKeyPath) {
|
||||||
log('Loading private key from ' + colors.bgWhite.blackBright(' ' + privateKeyPath + ' '))
|
logCallback?.('Loading private key from ' + colors.bgWhite.blackBright(' ' + privateKeyPath + ' '))
|
||||||
try {
|
try {
|
||||||
privateKey = (await fs.readFile(privateKeyPath)).toString()
|
privateKey = (await fs.readFile(privateKeyPath)).toString()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log(colors.bgRed.black(' X ') + 'Could not read the private key file')
|
logCallback?.(colors.bgRed.black(' X ') + 'Could not read the private key file')
|
||||||
this.toastr.error('Could not read the private key file')
|
this.toastr.error('Could not read the private key file')
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +79,7 @@ export class SSHService {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof sshpk.KeyEncryptedError) {
|
if (e instanceof sshpk.KeyEncryptedError) {
|
||||||
const modal = this.ngbModal.open(PromptModalComponent)
|
const modal = this.ngbModal.open(PromptModalComponent)
|
||||||
log(colors.bgYellow.yellow.black(' ! ') + ' Key requires passphrase')
|
logCallback?.(colors.bgYellow.yellow.black(' ! ') + ' Key requires passphrase')
|
||||||
modal.componentInstance.prompt = 'Private key passphrase'
|
modal.componentInstance.prompt = 'Private key passphrase'
|
||||||
modal.componentInstance.password = true
|
modal.componentInstance.password = true
|
||||||
let passphrase = ''
|
let passphrase = ''
|
||||||
@ -131,6 +127,20 @@ export class SSHService {
|
|||||||
fs.unlink(temp.path)
|
fs.unlink(temp.path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return privateKey
|
||||||
|
}
|
||||||
|
|
||||||
|
async connectSession (session: SSHSession, logCallback?: SSHLogCallback): Promise<void> {
|
||||||
|
if (!logCallback) {
|
||||||
|
logCallback = () => null
|
||||||
|
}
|
||||||
|
|
||||||
|
const log = (s: any) => {
|
||||||
|
logCallback!(s)
|
||||||
|
this.logger.info(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
let privateKey: string|null = null
|
||||||
|
|
||||||
const ssh = new Client()
|
const ssh = new Client()
|
||||||
session.ssh = ssh
|
session.ssh = ssh
|
||||||
@ -213,6 +223,7 @@ export class SSHService {
|
|||||||
|
|
||||||
const authMethodsLeft = ['none']
|
const authMethodsLeft = ['none']
|
||||||
if (!session.connection.auth || session.connection.auth === 'publicKey') {
|
if (!session.connection.auth || session.connection.auth === 'publicKey') {
|
||||||
|
privateKey = await this.loadPrivateKeyForSession(session, log)
|
||||||
if (!privateKey) {
|
if (!privateKey) {
|
||||||
log('\r\nPrivate key auth selected, but no key is loaded\r\n')
|
log('\r\nPrivate key auth selected, but no key is loaded\r\n')
|
||||||
} else {
|
} else {
|
||||||
|
@ -157,6 +157,11 @@ rimraf@~2.6.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
glob "^7.1.3"
|
glob "^7.1.3"
|
||||||
|
|
||||||
|
run-script-os@^1.1.3:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/run-script-os/-/run-script-os-1.1.3.tgz#1069b418307f4fd36ff056b5eda309c273fca8b0"
|
||||||
|
integrity sha512-xPlzE6533nvWVea5z7e5J7+JAIepfpxTu/HLGxcjJYlemVukOCWJBaRCod/DWXJFRIWEFOgSGbjd2m1QWTJi5w==
|
||||||
|
|
||||||
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
|
@ -156,16 +156,28 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
|
|||||||
this.resetZoom()
|
this.resetZoom()
|
||||||
break
|
break
|
||||||
case 'previous-word':
|
case 'previous-word':
|
||||||
this.sendInput('\x1bb')
|
this.sendInput({
|
||||||
|
[Platform.Windows]: '\x1b[1;5D',
|
||||||
|
[Platform.macOS]: '\x1bb',
|
||||||
|
[Platform.Linux]: '\x1bb',
|
||||||
|
}[this.hostApp.platform])
|
||||||
break
|
break
|
||||||
case 'next-word':
|
case 'next-word':
|
||||||
this.sendInput('\x1bf')
|
this.sendInput({
|
||||||
|
[Platform.Windows]: '\x1b[1;5C',
|
||||||
|
[Platform.macOS]: '\x1bf',
|
||||||
|
[Platform.Linux]: '\x1bf',
|
||||||
|
}[this.hostApp.platform])
|
||||||
break
|
break
|
||||||
case 'delete-previous-word':
|
case 'delete-previous-word':
|
||||||
this.sendInput('\x1b\x7f')
|
this.sendInput('\x1b\x7f')
|
||||||
break
|
break
|
||||||
case 'delete-next-word':
|
case 'delete-next-word':
|
||||||
this.sendInput('\x1bd')
|
this.sendInput({
|
||||||
|
[Platform.Windows]: '\x1bd\x1b[3;5~',
|
||||||
|
[Platform.macOS]: '\x1bd',
|
||||||
|
[Platform.Linux]: '\x1bd',
|
||||||
|
}[this.hostApp.platform])
|
||||||
break
|
break
|
||||||
case 'search':
|
case 'search':
|
||||||
this.showSearchPanel = true
|
this.showSearchPanel = true
|
||||||
|
@ -109,6 +109,24 @@ h3.mb-3 Appearance
|
|||||||
(ngModelChange)='config.save()',
|
(ngModelChange)='config.save()',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
.form-line
|
||||||
|
.header
|
||||||
|
.title Hide tab index
|
||||||
|
|
||||||
|
toggle(
|
||||||
|
[(ngModel)]='config.store.terminal.hideTabIndex',
|
||||||
|
(ngModelChange)='config.save();',
|
||||||
|
)
|
||||||
|
|
||||||
|
.form-line
|
||||||
|
.header
|
||||||
|
.title Hide tab close button
|
||||||
|
|
||||||
|
toggle(
|
||||||
|
[(ngModel)]='config.store.terminal.hideCloseButton',
|
||||||
|
(ngModelChange)='config.save();',
|
||||||
|
)
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
.title Fallback font
|
.title Fallback font
|
||||||
|
@ -26,7 +26,7 @@ button.btn.btn-link(
|
|||||||
.mr-2
|
.mr-2
|
||||||
|
|
||||||
button.btn.btn-link(
|
button.btn.btn-link(
|
||||||
(click)='options.caseSensitive = !options.caseSensitive',
|
(click)='options.caseSensitive = !options.caseSensitive; saveSearchOptions()',
|
||||||
[class.active]='options.caseSensitive',
|
[class.active]='options.caseSensitive',
|
||||||
ngbTooltip='Case sensitivity',
|
ngbTooltip='Case sensitivity',
|
||||||
placement='bottom'
|
placement='bottom'
|
||||||
@ -34,14 +34,14 @@ button.btn.btn-link(
|
|||||||
i.fa.fa-fw.fa-font
|
i.fa.fa-fw.fa-font
|
||||||
|
|
||||||
button.btn.btn-link(
|
button.btn.btn-link(
|
||||||
(click)='options.regex = !options.regex',
|
(click)='options.regex = !options.regex; saveSearchOptions()',
|
||||||
[class.active]='options.regex',
|
[class.active]='options.regex',
|
||||||
ngbTooltip='Regular expression',
|
ngbTooltip='Regular expression',
|
||||||
placement='bottom'
|
placement='bottom'
|
||||||
)
|
)
|
||||||
i.fa.fa-fw.fa-asterisk
|
i.fa.fa-fw.fa-asterisk
|
||||||
button.btn.btn-link(
|
button.btn.btn-link(
|
||||||
(click)='options.wholeWord = !options.wholeWord',
|
(click)='options.wholeWord = !options.wholeWord; saveSearchOptions()',
|
||||||
[class.active]='options.wholeWord',
|
[class.active]='options.wholeWord',
|
||||||
ngbTooltip='Whole word',
|
ngbTooltip='Whole word',
|
||||||
placement='bottom'
|
placement='bottom'
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Component, Input, Output, EventEmitter } from '@angular/core'
|
import { Component, Input, Output, EventEmitter } from '@angular/core'
|
||||||
import { ToastrService } from 'ngx-toastr'
|
import { ToastrService } from 'ngx-toastr'
|
||||||
import { Frontend, SearchOptions } from '../frontends/frontend'
|
import { Frontend, SearchOptions } from '../frontends/frontend'
|
||||||
|
import { ConfigService } from 'terminus-core'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'search-panel',
|
selector: 'search-panel',
|
||||||
@ -13,12 +14,14 @@ export class SearchPanelComponent {
|
|||||||
notFound = false
|
notFound = false
|
||||||
options: SearchOptions = {
|
options: SearchOptions = {
|
||||||
incremental: true,
|
incremental: true,
|
||||||
|
...this.config.store.terminal.searchOptions,
|
||||||
}
|
}
|
||||||
|
|
||||||
@Output() close = new EventEmitter()
|
@Output() close = new EventEmitter()
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private toastr: ToastrService,
|
private toastr: ToastrService,
|
||||||
|
public config: ConfigService,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
onQueryChange (): void {
|
onQueryChange (): void {
|
||||||
@ -45,4 +48,12 @@ export class SearchPanelComponent {
|
|||||||
this.toastr.error('Not found')
|
this.toastr.error('Not found')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
saveSearchOptions (): void {
|
||||||
|
this.config.store.terminal.searchOptions.regex = this.options.regex
|
||||||
|
this.config.store.terminal.searchOptions.caseSensitive = this.options.caseSensitive
|
||||||
|
this.config.store.terminal.searchOptions.wholeWord = this.options.wholeWord
|
||||||
|
|
||||||
|
this.config.save()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,8 @@ export class TerminalConfigProvider extends ConfigProvider {
|
|||||||
ligatures: false,
|
ligatures: false,
|
||||||
cursor: 'block',
|
cursor: 'block',
|
||||||
cursorBlink: true,
|
cursorBlink: true,
|
||||||
|
hideTabIndex: false,
|
||||||
|
hideCloseButton: false,
|
||||||
customShell: '',
|
customShell: '',
|
||||||
rightClick: 'menu',
|
rightClick: 'menu',
|
||||||
pasteOnMiddleClick: true,
|
pasteOnMiddleClick: true,
|
||||||
@ -65,6 +67,12 @@ export class TerminalConfigProvider extends ConfigProvider {
|
|||||||
recoverTabs: true,
|
recoverTabs: true,
|
||||||
warnOnMultilinePaste: true,
|
warnOnMultilinePaste: true,
|
||||||
showDefaultProfiles: true,
|
showDefaultProfiles: true,
|
||||||
|
searchRegexAlwaysEnabled: false,
|
||||||
|
searchOptions: {
|
||||||
|
regex: false,
|
||||||
|
wholeWord: false,
|
||||||
|
caseSensitive: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user