mirror of
https://github.com/Eugeny/tabby.git
synced 2025-08-24 18:21:51 +00:00
Compare commits
5 Commits
v1.0.0-alp
...
v1.0.0-alp
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c3c983daf6 | ||
![]() |
dce8647f55 | ||
![]() |
f947fe3f0f | ||
![]() |
b5f96a59f8 | ||
![]() |
c90a5678cf |
@@ -1,6 +1,10 @@
|
|||||||
module.exports = function patchPTYModule (path) {
|
module.exports = function patchPTYModule (path) {
|
||||||
const mod = require(path)
|
const mod = require(path)
|
||||||
const oldSpawn = mod.spawn
|
const oldSpawn = mod.spawn
|
||||||
|
if (mod.patched) {
|
||||||
|
return mod
|
||||||
|
}
|
||||||
|
mod.patched = true
|
||||||
mod.spawn = (file, args, opt) => {
|
mod.spawn = (file, args, opt) => {
|
||||||
let terminal = oldSpawn(file, args, opt)
|
let terminal = oldSpawn(file, args, opt)
|
||||||
let timeout = null
|
let timeout = null
|
||||||
|
@@ -2,6 +2,7 @@ import 'zone.js'
|
|||||||
import 'core-js/es7/reflect'
|
import 'core-js/es7/reflect'
|
||||||
import 'core-js/core/delay'
|
import 'core-js/core/delay'
|
||||||
import 'rxjs'
|
import 'rxjs'
|
||||||
|
import './toastr.scss'
|
||||||
|
|
||||||
// Always land on the start view
|
// Always land on the start view
|
||||||
location.hash = ''
|
location.hash = ''
|
||||||
|
16
app/src/toastr.scss
Normal file
16
app/src/toastr.scss
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#toast-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.toast {
|
||||||
|
box-shadow: 0 1px 0 rgba(0,0,0,.25);
|
||||||
|
padding: 10px;
|
||||||
|
background-image: none;
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
&.toast-info {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -69,7 +69,11 @@ export class PluginManagerService {
|
|||||||
listAvailable (query?: string): Observable<IPluginInfo[]> {
|
listAvailable (query?: string): Observable<IPluginInfo[]> {
|
||||||
return Observable
|
return Observable
|
||||||
.fromPromise(
|
.fromPromise(
|
||||||
axios.get(`https://www.npmjs.com/-/search?text=keywords:${KEYWORD}+${encodeURIComponent(query || '')}&from=0&size=1000`)
|
axios.get(`https://www.npmjs.com/search?q=keywords%3A${KEYWORD}+${encodeURIComponent(query || '')}&from=0&size=1000`, {
|
||||||
|
headers: {
|
||||||
|
'x-spiferack': '1',
|
||||||
|
}
|
||||||
|
})
|
||||||
)
|
)
|
||||||
.map(response => response.data.objects.map(item => ({
|
.map(response => response.data.objects.map(item => ({
|
||||||
name: item.package.name.substring(NAME_PREFIX.length),
|
name: item.package.name.substring(NAME_PREFIX.length),
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { BehaviorSubject, Subject, Subscription } from 'rxjs'
|
import { BehaviorSubject, Subject, Subscription } from 'rxjs'
|
||||||
import 'rxjs/add/operator/bufferTime'
|
import { ToastrService } from 'ngx-toastr'
|
||||||
import { Component, NgZone, Inject, Optional, ViewChild, HostBinding, Input } from '@angular/core'
|
import { Component, NgZone, Inject, Optional, ViewChild, HostBinding, Input } from '@angular/core'
|
||||||
import { AppService, ConfigService, BaseTabComponent, ElectronService, ThemesService, HostAppService, HotkeysService, Platform } from 'terminus-core'
|
import { AppService, ConfigService, BaseTabComponent, ElectronService, ThemesService, HostAppService, HotkeysService, Platform } from 'terminus-core'
|
||||||
|
|
||||||
@@ -54,6 +54,7 @@ export class TerminalTabComponent extends BaseTabComponent {
|
|||||||
private electron: ElectronService,
|
private electron: ElectronService,
|
||||||
private terminalService: TerminalService,
|
private terminalService: TerminalService,
|
||||||
public config: ConfigService,
|
public config: ConfigService,
|
||||||
|
private toastr: ToastrService,
|
||||||
@Optional() @Inject(TerminalDecorator) private decorators: TerminalDecorator[],
|
@Optional() @Inject(TerminalDecorator) private decorators: TerminalDecorator[],
|
||||||
) {
|
) {
|
||||||
super()
|
super()
|
||||||
@@ -89,9 +90,19 @@ export class TerminalTabComponent extends BaseTabComponent {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch (hotkey) {
|
switch (hotkey) {
|
||||||
|
case 'ctrl-c':
|
||||||
|
if (this.hterm.getSelectionText()) {
|
||||||
|
this.hterm.copySelectionToClipboard()
|
||||||
|
} else {
|
||||||
|
this.sendInput('\x03')
|
||||||
|
}
|
||||||
|
break
|
||||||
case 'copy':
|
case 'copy':
|
||||||
this.hterm.copySelectionToClipboard()
|
this.hterm.copySelectionToClipboard()
|
||||||
break
|
break
|
||||||
|
case 'paste':
|
||||||
|
this.paste()
|
||||||
|
break
|
||||||
case 'clear':
|
case 'clear':
|
||||||
this.clear()
|
this.clear()
|
||||||
break
|
break
|
||||||
@@ -219,15 +230,18 @@ export class TerminalTabComponent extends BaseTabComponent {
|
|||||||
this.alternateScreenActive$.next(state)
|
this.alternateScreenActive$.next(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const _copySelectionToClipboard = hterm.copySelectionToClipboard.bind(hterm)
|
||||||
|
hterm.copySelectionToClipboard = () => {
|
||||||
|
_copySelectionToClipboard()
|
||||||
|
this.toastr.info('Copied')
|
||||||
|
}
|
||||||
|
|
||||||
hterm.primaryScreen_.syncSelectionCaret = () => null
|
hterm.primaryScreen_.syncSelectionCaret = () => null
|
||||||
hterm.alternateScreen_.syncSelectionCaret = () => null
|
hterm.alternateScreen_.syncSelectionCaret = () => null
|
||||||
hterm.primaryScreen_.terminal = hterm
|
hterm.primaryScreen_.terminal = hterm
|
||||||
hterm.alternateScreen_.terminal = hterm
|
hterm.alternateScreen_.terminal = hterm
|
||||||
|
|
||||||
const _onPaste = hterm.scrollPort_.onPaste_.bind(hterm.scrollPort_)
|
|
||||||
hterm.scrollPort_.onPaste_ = (event) => {
|
hterm.scrollPort_.onPaste_ = (event) => {
|
||||||
hterm.scrollPort_.pasteTarget_.value = event.clipboardData.getData('text/plain').trim()
|
|
||||||
_onPaste()
|
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,7 +343,12 @@ export class TerminalTabComponent extends BaseTabComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
paste () {
|
paste () {
|
||||||
this.sendInput(this.electron.clipboard.readText())
|
let data = this.electron.clipboard.readText()
|
||||||
|
data = this.hterm.keyboard.encode(data)
|
||||||
|
if (this.hterm.options_.bracketedPaste) {
|
||||||
|
data = '\x1b[200~' + data + '\x1b[201~'
|
||||||
|
}
|
||||||
|
this.sendInput(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
clear () {
|
clear () {
|
||||||
@@ -354,6 +373,7 @@ export class TerminalTabComponent extends BaseTabComponent {
|
|||||||
preferenceManager.set('alt-gr-mode', 'ctrl-alt')
|
preferenceManager.set('alt-gr-mode', 'ctrl-alt')
|
||||||
preferenceManager.set('pass-alt-number', true)
|
preferenceManager.set('pass-alt-number', true)
|
||||||
preferenceManager.set('cursor-blink', config.terminal.cursorBlink)
|
preferenceManager.set('cursor-blink', config.terminal.cursorBlink)
|
||||||
|
preferenceManager.set('clear-selection-after-copy', true)
|
||||||
|
|
||||||
if (config.terminal.colorScheme.foreground) {
|
if (config.terminal.colorScheme.foreground) {
|
||||||
preferenceManager.set('foreground-color', config.terminal.colorScheme.foreground)
|
preferenceManager.set('foreground-color', config.terminal.colorScheme.foreground)
|
||||||
|
@@ -53,9 +53,13 @@ export class TerminalConfigProvider extends ConfigProvider {
|
|||||||
persistence: 'screen',
|
persistence: 'screen',
|
||||||
},
|
},
|
||||||
hotkeys: {
|
hotkeys: {
|
||||||
|
'ctrl-c': ['Ctrl-C'],
|
||||||
'copy': [
|
'copy': [
|
||||||
'⌘-C',
|
'⌘-C',
|
||||||
],
|
],
|
||||||
|
'paste': [
|
||||||
|
'⌘-V',
|
||||||
|
],
|
||||||
'clear': [
|
'clear': [
|
||||||
'⌘-K',
|
'⌘-K',
|
||||||
],
|
],
|
||||||
@@ -93,9 +97,13 @@ export class TerminalConfigProvider extends ConfigProvider {
|
|||||||
copyOnSelect: true,
|
copyOnSelect: true,
|
||||||
},
|
},
|
||||||
hotkeys: {
|
hotkeys: {
|
||||||
|
'ctrl-c': ['Ctrl-C'],
|
||||||
'copy': [
|
'copy': [
|
||||||
'Ctrl-Shift-C',
|
'Ctrl-Shift-C',
|
||||||
],
|
],
|
||||||
|
'paste': [
|
||||||
|
'Ctrl-Shift-V',
|
||||||
|
],
|
||||||
'clear': [
|
'clear': [
|
||||||
'Ctrl-L',
|
'Ctrl-L',
|
||||||
],
|
],
|
||||||
@@ -130,9 +138,13 @@ export class TerminalConfigProvider extends ConfigProvider {
|
|||||||
persistence: 'tmux',
|
persistence: 'tmux',
|
||||||
},
|
},
|
||||||
hotkeys: {
|
hotkeys: {
|
||||||
|
'ctrl-c': ['Ctrl-C'],
|
||||||
'copy': [
|
'copy': [
|
||||||
'Ctrl-Shift-C',
|
'Ctrl-Shift-C',
|
||||||
],
|
],
|
||||||
|
'paste': [
|
||||||
|
'Ctrl-Shift-V',
|
||||||
|
],
|
||||||
'clear': [
|
'clear': [
|
||||||
'Ctrl-L',
|
'Ctrl-L',
|
||||||
],
|
],
|
||||||
|
@@ -8,6 +8,10 @@ export class TerminalHotkeyProvider extends HotkeyProvider {
|
|||||||
id: 'copy',
|
id: 'copy',
|
||||||
name: 'Copy to clipboard',
|
name: 'Copy to clipboard',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'paste',
|
||||||
|
name: 'Paste from clipboard',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'home',
|
id: 'home',
|
||||||
name: 'Beginning of the line',
|
name: 'Beginning of the line',
|
||||||
|
@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'
|
|||||||
import { BrowserModule } from '@angular/platform-browser'
|
import { BrowserModule } from '@angular/platform-browser'
|
||||||
import { FormsModule } from '@angular/forms'
|
import { FormsModule } from '@angular/forms'
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
||||||
|
import { ToastrModule } from 'ngx-toastr'
|
||||||
|
|
||||||
import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, AppService, ConfigService } from 'terminus-core'
|
import { ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, AppService, ConfigService } from 'terminus-core'
|
||||||
import { SettingsTabProvider } from 'terminus-settings'
|
import { SettingsTabProvider } from 'terminus-settings'
|
||||||
@@ -41,6 +42,7 @@ import { hterm } from './hterm'
|
|||||||
BrowserModule,
|
BrowserModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
NgbModule,
|
NgbModule,
|
||||||
|
ToastrModule,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
SessionsService,
|
SessionsService,
|
||||||
|
@@ -55,6 +55,7 @@ module.exports = {
|
|||||||
/^rxjs/,
|
/^rxjs/,
|
||||||
/^@angular/,
|
/^@angular/,
|
||||||
/^@ng-bootstrap/,
|
/^@ng-bootstrap/,
|
||||||
|
'ngx-toastr',
|
||||||
/^terminus-/,
|
/^terminus-/,
|
||||||
],
|
],
|
||||||
plugins: [
|
plugins: [
|
||||||
|
Reference in New Issue
Block a user