Compare commits

...

9 Commits

Author SHA1 Message Date
Eugene Pankov
33f67503bd pass alt-numbers to the shell (fixes #217) 2017-10-22 22:10:48 +02:00
Eugene Pankov
21e1656780 only show drag space on Win & Linux with thin titlebar (ref #219) 2017-10-22 21:23:53 +02:00
Eugene Pankov
ceacf5c760 added tab context menu (ref #219) 2017-10-22 21:01:31 +02:00
Eugene Pankov
e0c0cd17bd Handle multiple arguments in custom shell 2017-10-21 22:11:27 +02:00
Eugene Pankov
e81e5034b9 explicitly specify --login for POSIX shells 2017-10-20 21:44:34 +02:00
Eugene Pankov
11e0c36ebc properly position context menu (fixes #215) 2017-10-13 20:33:10 +02:00
Eugene Pankov
e52fd0a3dd theming fix 2017-10-08 14:56:51 +02:00
Eugene Pankov
48ccc538e5 fixed button group appearance in settings 2017-10-08 14:48:59 +02:00
Eugene Pankov
53ac39232c a compact theme 2017-10-08 14:47:14 +02:00
17 changed files with 118 additions and 28 deletions

View File

@@ -19,7 +19,6 @@ title-bar(
[class.drag-region]='hostApp.platform == Platform.macOS',
@animateTab,
(click)='app.selectTab(tab)',
(closeClicked)='app.closeTab(tab, true)',
)
.btn-group
@@ -30,7 +29,7 @@ title-bar(
)
i.fa([class]='"fa fa-" + button.icon')
.drag-space
.drag-space(*ngIf='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
.btn-group
button.btn.btn-secondary.btn-tab-bar(

View File

@@ -1,3 +1,3 @@
.index {{index + 1}}
.name([title]='tab.customTitle || tab.title') {{tab.customTitle || tab.title}}
button((click)='closeClicked.emit()') ×
button((click)='app.closeTab(tab, true)') ×

View File

@@ -1,7 +1,6 @@
$tabs-height: 36px;
:host {
line-height: $tabs-height - 2px;
cursor: pointer;
flex: 1000 1 200px;
@@ -24,9 +23,9 @@ $tabs-height: 36px;
margin-left: 10px;
width: 20px;
border-radius: 10px;
line-height: 35px;
text-align: center;
transition: 0.25s all;
align-self: center;
}
.name {
@@ -36,6 +35,7 @@ $tabs-height: 36px;
white-space: nowrap;
text-overflow: ellipsis;
min-width: 0;
align-self: center;
}
button {
@@ -49,7 +49,7 @@ $tabs-height: 36px;
height: $button-size;
border-radius: $button-size / 2;
line-height: $button-size * 0.87;
margin-top: ($tabs-height - $button-size) * 0.5;
align-self: center;
margin-right: 10px;
text-align: center;

View File

@@ -1,7 +1,9 @@
import { Component, Input, Output, EventEmitter, HostBinding, HostListener } from '@angular/core'
import { Component, Input, HostBinding, HostListener, NgZone } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { BaseTabComponent } from './baseTab.component'
import { RenameTabModalComponent } from './renameTabModal.component'
import { ElectronService } from '../services/electron.service'
import { AppService } from '../services/app.service'
@Component({
selector: 'tab-header',
@@ -13,11 +15,55 @@ export class TabHeaderComponent {
@Input() @HostBinding('class.active') active: boolean
@Input() @HostBinding('class.has-activity') hasActivity: boolean
@Input() tab: BaseTabComponent
@Output() closeClicked = new EventEmitter()
private contextMenu: any
constructor (
zone: NgZone,
electron: ElectronService,
public app: AppService,
private ngbModal: NgbModal,
) { }
) {
this.contextMenu = electron.remote.Menu.buildFromTemplate([
{
label: 'Close',
click: () => {
zone.run(() => {
app.closeTab(this.tab, true)
})
}
},
{
label: 'Close other tabs',
click: () => {
zone.run(() => {
for (let tab of app.tabs.filter(x => x !== this.tab)) {
app.closeTab(tab, true)
}
})
}
},
{
label: 'Close tabs to the right',
click: () => {
zone.run(() => {
for (let tab of app.tabs.slice(app.tabs.indexOf(this.tab) + 1)) {
app.closeTab(tab, true)
}
})
}
},
{
label: 'Close tabs to the left',
click: () => {
zone.run(() => {
for (let tab of app.tabs.slice(0, app.tabs.indexOf(this.tab))) {
app.closeTab(tab, true)
}
})
}
},
])
}
@HostListener('dblclick') onDoubleClick (): void {
let modal = this.ngbModal.open(RenameTabModalComponent)
@@ -29,7 +75,15 @@ export class TabHeaderComponent {
@HostListener('auxclick', ['$event']) onAuxClick ($event: MouseEvent): void {
if ($event.which === 2) {
this.closeClicked.emit()
this.app.closeTab(this.tab, true)
}
if ($event.which === 3) {
this.contextMenu.popup({
x: $event.pageX,
y: $event.pageY,
async: true,
})
event.preventDefault()
}
}
}

View File

@@ -29,7 +29,7 @@ import { HotkeyProvider } from './api/hotkeyProvider'
import { ConfigProvider } from './api/configProvider'
import { Theme } from './api/theme'
import { StandardTheme } from './theme'
import { StandardTheme, StandardCompactTheme } from './theme'
import { CoreConfigProvider } from './config'
import 'perfect-scrollbar/dist/css/perfect-scrollbar.css'
@@ -47,6 +47,7 @@ const PROVIDERS = [
UpdaterService,
{ provide: HotkeyProvider, useClass: AppHotkeyProvider, multi: true },
{ provide: Theme, useClass: StandardTheme, multi: true },
{ provide: Theme, useClass: StandardCompactTheme, multi: true },
{ provide: ConfigProvider, useClass: CoreConfigProvider, multi: true },
]

View File

@@ -0,0 +1,15 @@
@import './theme.scss';
app-root {
.tab-bar {
height: 27px !important;
.btn-tab-bar {
line-height: 29px !important;
}
}
terminaltab .content {
margin: 5px !important;
}
}

View File

@@ -131,6 +131,7 @@ app-root {
background: $body-bg2;
border-left: 1px solid transparent;
border-right: 1px solid transparent;
border-top: 1px solid transparent;
.index {
color: #555;
@@ -159,10 +160,12 @@ app-root {
tab-header {
border-top: 1px solid transparent;
border-bottom: 1px solid $border-color;
margin-bottom: -1px;
&.active {
border-top: 1px solid $teal;
margin-bottom: -1px;
border-bottom-color: transparent;
}
&.has-activity:not(.active) {
@@ -176,6 +179,8 @@ app-root {
tab-header {
border-bottom: 1px solid transparent;
border-top: 1px solid $border-color;
margin-top: -1px;
&.active {
border-bottom: 1px solid $teal;

View File

@@ -7,3 +7,10 @@ export class StandardTheme extends Theme {
css = require('./theme.scss')
terminalBackground = '#1D272D'
}
@Injectable()
export class StandardCompactTheme extends Theme {
name = 'Compact'
css = require('./theme.compact.scss')
terminalBackground = '#1D272D'
}

View File

@@ -78,7 +78,8 @@ div(*ngIf='npmInstalled')
.d-flex.w-100
.mr-auto.d-flex.flex-column
strong {{plugin.name}}
small.text-muted.mb-0 {{plugin.description}}
a.text-muted.mb-0((click)='showPluginInfo(plugin)')
small {{plugin.description}}
.d-flex.flex-column.align-items-end.mr-3
div {{plugin.version}}
small.text-muted {{plugin.author}}

View File

@@ -18,7 +18,7 @@ ngb-tabset.vertical(type='tabs')
.form-group
label Show tabs
br
div(
.btn-group(
'[(ngModel)]'='config.store.appearance.tabsLocation',
(ngModelChange)='config.save()',
ngbRadioGroup
@@ -41,7 +41,7 @@ ngb-tabset.vertical(type='tabs')
.form-group
label Window frame
br
div(
.btn-group(
'[(ngModel)]'='config.store.appearance.frame'
'(ngModelChange)'='config.save(); config.requestRestart()'
ngbRadioGroup
@@ -74,7 +74,7 @@ ngb-tabset.vertical(type='tabs')
.form-group
label Dock the terminal
br
div(
.btn-group(
'[(ngModel)]'='config.store.appearance.dock'
'(ngModelChange)'='config.save(); docking.dock()'
ngbRadioGroup

View File

@@ -178,7 +178,7 @@
.form-group.mr-3
label Terminal background
br
div(
.btn-group(
'[(ngModel)]'='config.store.terminal.background',
(ngModelChange)='config.save()',
ngbRadioGroup
@@ -201,7 +201,7 @@
.form-group
label Cursor shape
br
div(
.btn-group(
[(ngModel)]='config.store.terminal.cursor',
(ngModelChange)='config.save()',
ngbRadioGroup
@@ -251,7 +251,7 @@
.form-group.mr-3
label Terminal bell
br
div(
.btn-group(
'[(ngModel)]'='config.store.terminal.bell',
(ngModelChange)='config.save()',
ngbRadioGroup
@@ -281,7 +281,7 @@
.form-group
label Blink cursor
br
div(
.btn-group(
'[(ngModel)]'='config.store.terminal.cursorBlink',
(ngModelChange)='config.save()',
ngbRadioGroup
@@ -316,7 +316,7 @@
.form-group
label Auto-open a terminal on app start
br
div(
.btn-group(
'[(ngModel)]'='config.store.terminal.autoOpen',
(ngModelChange)='config.save()',
ngbRadioGroup

View File

@@ -224,8 +224,8 @@ export class TerminalTabComponent extends BaseTabComponent {
if (event.type === 'mousedown') {
if (event.which === 3) {
this.contextMenu.popup({
x: event.pageX,
y: event.pageY,
x: event.pageX + this.content.nativeElement.getBoundingClientRect().left,
y: event.pageY + this.content.nativeElement.getBoundingClientRect().top,
async: true,
})
event.preventDefault()
@@ -322,6 +322,7 @@ export class TerminalTabComponent extends BaseTabComponent {
preferenceManager.set('copy-on-select', false)
preferenceManager.set('alt-sends-what', 'browser-key')
preferenceManager.set('alt-gr-mode', 'ctrl-alt')
preferenceManager.set('pass-alt-number', true)
preferenceManager.set('cursor-blink', config.terminal.cursorBlink)
if (config.terminal.colorScheme.foreground) {

View File

@@ -12,10 +12,12 @@ export class CustomShellProvider extends ShellProvider {
}
async provide (): Promise<IShell[]> {
let args = this.config.store.terminal.customShell.split(' ')
return [{
id: 'custom',
name: 'Custom',
command: this.config.store.terminal.customShell
command: args[0],
args: args.slice(1),
}]
}
}

View File

@@ -33,7 +33,8 @@ export class LinuxDefaultShellProvider extends ShellProvider {
return [{
id: 'default',
name: 'User default',
command: line.split(':')[6]
command: line.split(':')[6],
args: ['--login'],
}]
}
}

View File

@@ -20,7 +20,8 @@ export class MacOSDefaultShellProvider extends ShellProvider {
return [{
id: 'default',
name: 'User default',
command: shellEntry.split(' ')[1].trim()
command: shellEntry.split(' ')[1].trim(),
args: ['--login'],
}]
}
}

View File

@@ -24,6 +24,7 @@ export class POSIXShellsProvider extends ShellProvider {
id: x,
name: x,
command: x,
args: ['--login'],
}))
}
}

View File

@@ -15,8 +15,10 @@
"skipLibCheck": true,
"lib": [
"dom",
"es2015",
"es7"
"es5",
"es6",
"es7",
"es2015"
]
}
}