Compare commits

..

24 Commits

Author SHA1 Message Date
Eugene Pankov
c856f460e6 Revert "bumped xterm for true color support (#23)"
This reverts commit c5958bc9a0.
2019-04-29 19:55:36 +02:00
Eugene Pankov
6a969d2cd2 Revert "use new style xterm events"
This reverts commit d42e070e6c.
2019-04-29 19:50:53 +02:00
Eugene Pankov
b6cbd42d8b less touchbar flicker, activity icons 2019-04-28 14:38:21 +02:00
Eugene Pankov
7237c2b05a bumped electron 2019-04-28 14:37:50 +02:00
Eugene Pankov
19a217923e build fix 2019-04-28 12:55:13 +02:00
Eugene Pankov
7f160e9421 Merge branch 'master' of github.com:Eugeny/terminus 2019-04-28 11:48:12 +02:00
Eugene Pankov
d0c245d0d5 fixed funky source maps 2019-04-28 11:42:34 +02:00
Eugene Pankov
693edab597 prevent recovered tabs from blanking out 2019-04-28 11:41:31 +02:00
Eugene Pankov
d42e070e6c use new style xterm events 2019-04-17 22:03:20 +02:00
Eugene Pankov
c5958bc9a0 bumped xterm for true color support (#23) 2019-04-17 21:57:52 +02:00
Eugene Pankov
9dc2337787 hotkey naming 2019-04-16 15:42:11 +02:00
Eugene
1a38cc30a8 Merge pull request #766 from Mezner/master
Create close pane hotkey.
2019-04-16 15:39:22 +02:00
Russell Myers
4949f14184 Create close pane hotkey. 2019-04-15 21:16:54 -04:00
Eugene
11902020a5 Merge pull request #743 from mischah/relaxed-theme
Add Relaxed color scheme
2019-03-30 08:30:05 -07:00
Michael Kühnel
3f96c21f33 Add Relaxed color scheme 2019-03-30 16:22:20 +01:00
Eugene
9e81f0aa0e Update README.md 2019-03-19 13:26:06 +01:00
Eugene
1cce23cef5 Update README.md 2019-03-19 13:02:33 +01:00
Eugene Pankov
b7a56adb60 smaller icons for the compact theme 2019-03-18 22:34:46 +01:00
Eugene Pankov
eb02752cbf use dynamic xterm atlas for faster startup 2019-03-18 22:23:44 +01:00
Eugene Pankov
3a6eb8cb2f bumped plugin versions 2019-03-18 22:02:23 +01:00
Eugene Pankov
a7d62b0234 fixed home/end keys with conpty (fixes #587) 2019-03-18 22:00:43 +01:00
Eugene
b9cbe4f12d Update snapcraft.yaml 2019-03-13 12:45:41 +01:00
Eugene
5f74b35ba9 Update snapcraft.yaml 2019-03-13 12:39:14 +01:00
Eugene
affb439ab2 Update snapcraft.yaml 2019-03-13 12:33:48 +01:00
33 changed files with 301 additions and 145 deletions

View File

@@ -1,31 +1,36 @@
![](https://github.com/Eugeny/terminus/raw/master/docs/readme.png)
<p align="center">
<a href="https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg"/></a> <a href="https://travis-ci.org/Eugeny/terminus"><img src="https://travis-ci.org/Eugeny/terminus.svg?branch=master"/></a>
<a href="https://ci.appveyor.com/project/Eugeny/terminus"><img src="https://ci.appveyor.com/api/projects/status/wnnq4hm5mbd9rgoy?svg=true"/></a>
<a href="https://raw.githubusercontent.com/Eugeny/terminus/master/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/eugeny/terminus.svg?label=License&style=flat-square"></a> <a href="https://travis-ci.org/Eugeny/terminus"><img alt="Travis (.org)" src="https://img.shields.io/travis/Eugeny/terminus.svg?label=CI&logo=travis&logoColor=white&style=flat-square"></a>
<a href="https://ci.appveyor.com/project/Eugeny/terminus"><img alt="AppVeyor" src="https://img.shields.io/appveyor/ci/eugeny/terminus.svg?label=CI&logo=appveyor&logoColor=white&style=flat-square"></a>
</p>
<p align="center">
<a href="https://github.com/Eugeny/terminus/releases/latest">Downloads</a> | <a href="https://gitter.im/terminus-terminal/community">Community</a> | <a href="https://ci.appveyor.com/project/Eugeny/terminus/build/artifacts">Latest Windows nightly</a>
<a href="https://github.com/Eugeny/terminus/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/terminus/total.svg?label=DOWNLOAD&logo=github&style=for-the-badge"></a> <a href="https://ci.appveyor.com/project/Eugeny/terminus/build/artifacts"><img src="https://img.shields.io/badge/download-nightly%20build-magenta.svg?logo=appveyor&style=for-the-badge"/></a> <a href="https://gitter.im/terminus-terminal/community"><img alt="Gitter" src="https://img.shields.io/gitter/room/terminus/community.svg?color=blue&logo=gitter&style=for-the-badge"></a>
</p>
----
**Terminus** is a terminal heavily inspired by Hyper. It is, however, designed for people who need to get things done.
**Terminus** is a highly configurable terminal emulator for Windows, macOS and Linux
* Runs on Windows, macOS and Linux
* Theming and color schemes
* Fully configurable shortcuts
* Split panes
* Remembers your tabs
* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, Cmder and CMD support
* Integrated SSH client and connection manager
* Full Unicode support including double-width characters
* Doesn't choke on fast-flowing outputs
* Proper shell-like experience on Windows including tab completion (via Clink)
* PowerShell (+Core), WSL (Bash on Windows), Git-Bash, Cygwin, Cmder and CMD support
* Remembers your tabs
* Integrated SSH client and connection manager
* Proper shell experience on Windows including tab completion (via Clink)
[![Buy me a coffee](https://github.com/Eugeny/terminus/raw/master/docs/kofi.png)](https://ko-fi.com/eugeny)
---
* **Terminus is** an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY or iTerm
* **Terminus is not** a new shell or a MinGW or Cygwin replacement. Neither is it lightweight - if RAM usage is of importance, consider [Conemu](https://conemu.github.io) or [Alacritty](https://github.com/jwilm/alacritty)
---

BIN
app/assets/activity.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -40,5 +40,8 @@
},
"devDependencies": {
"@types/mz": "0.0.31"
},
"resolutions": {
"electron-rebuild/node-abi": "2.8.0"
}
}

View File

@@ -14,7 +14,7 @@ module.exports = {
minimize: false,
},
context: __dirname,
devtool: 'source-map',
devtool: 'eval-source-map',
output: {
path: path.join(__dirname, 'dist'),
pathinfo: true,

View File

@@ -9,7 +9,7 @@ module.exports = {
},
mode: process.env.TERMINUS_DEV ? 'development' : 'production',
context: __dirname,
devtool: 'source-map',
devtool: 'eval-source-map',
output: {
path: path.join(__dirname, 'dist'),
pathinfo: true,

View File

@@ -398,6 +398,13 @@ ngx-toastr@^9.1.1:
dependencies:
tslib "^1.9.0"
node-abi@2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.8.0.tgz#bd2e88dbe6a6871e6dd08553e0605779325737ec"
integrity sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==
dependencies:
semver "^5.4.1"
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -519,6 +526,11 @@ rxjs@^6.3.3:
dependencies:
tslib "^1.9.0"
semver@^5.4.1:
version "5.7.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"

View File

@@ -14,16 +14,15 @@
"core-js": "2.4.1",
"cross-env": "4.0.0",
"css-loader": "0.28.0",
"electron": "4.0.5",
"electron": "5.0.0",
"electron-builder": "^20.38.4",
"electron-builder-squirrel-windows": "^20.28.3",
"electron-installer-snap": "^3.0.0",
"electron-rebuild": "^1.8.2",
"electron-rebuild": "^1.8.4",
"file-loader": "^1.1.11",
"graceful-fs": "^4.1.11",
"html-loader": "0.4.4",
"json-loader": "0.5.4",
"node-abi": "^2.4.4",
"node-gyp": "^3.8.0",
"node-sass": "^4.5.3",
"npmlog": "4.1.0",

26
snap/snapcraft.yaml Normal file
View File

@@ -0,0 +1,26 @@
name: terminus
version: '1.0.0'
summary: A terminal for a modern age
description: |
Terminus is a terminal heavily inspired by Hyper. It is, however, designed for people who need to get things done.
grade: devel
confinement: devmode
apps:
terminus:
command: opt/terminus/terminus
parts:
app:
plugin: nodejs
source: .
build-packages:
- libfontconfig-dev
override-build: |
yarn
./scripts/build-native.js
yarn run build
./scripts/build-linux.js
mkdir -p $SNAPCRAFT_PART_INSTALL/opt/terminus || true
cp -ar dist/linux-unpacked/* $SNAPCRAFT_PART_INSTALL/opt/terminus/

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-community-color-schemes",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Community color schemes for Terminus",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -0,0 +1,36 @@
! special
*.foreground: #d8d8d8
*.background: #343a43
*.cursorColor: #d8d8d8
! black
*.color0: #2c3037
*.color8: #626262
! red
*.color1: #bb5653
*.color9: #c35956
! green
*.color2: #909d62
*.color10: #9fab76
! yellow
*.color3: #eac179
*.color11: #ecc179
! blue
*.color4: #698698
*.color12: #7da9c7
! magenta
*.color5: #b06597
*.color13: #ba6ca0
! cyan
*.color6: #c9dfff
*.color14: #abbacf
! white
*.color7: #d8d8d8
*.color15: #f7f7f7

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
output: {
path: path.resolve(__dirname, 'dist'),

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-core",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Terminus core",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -210,18 +210,21 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
case 'split-left':
this.splitTab(this.focusedTab, 'l')
break
case 'split-nav-left':
case 'pane-nav-left':
this.navigate('l')
break
case 'split-nav-right':
case 'pane-nav-right':
this.navigate('r')
break
case 'split-nav-up':
case 'pane-nav-up':
this.navigate('t')
break
case 'split-nav-down':
case 'pane-nav-down':
this.navigate('b')
break
case 'close-pane':
this.removeTab(this.focusedTab)
break
}
})
}
@@ -336,6 +339,8 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes
if (this.root.children.length === 0) {
this.destroy()
} else {
this.focusAnyIn(parent)
}
}

View File

@@ -42,12 +42,13 @@ hotkeys:
- 'Ctrl-Shift-D'
split-left: []
split-top: []
split-nav-right:
pane-nav-right:
- 'Ctrl-Alt-ArrowRight'
split-nav-down:
pane-nav-down:
- 'Ctrl-Alt-ArrowDown'
split-nav-up:
pane-nav-up:
- 'Ctrl-Alt-ArrowUp'
split-nav-left:
pane-nav-left:
- 'Ctrl-Alt-ArrowLeft'
close-pane: []
pluginBlacklist: ['ssh']

View File

@@ -40,12 +40,14 @@ hotkeys:
- '⌘-D'
split-left: []
split-top: []
split-nav-right:
pane-nav-right:
- '⌘-⌥-ArrowRight'
split-nav-down:
pane-nav-down:
- '⌘-⌥-ArrowDown'
split-nav-up:
pane-nav-up:
- '⌘-⌥-ArrowUp'
split-nav-left:
pane-nav-left:
- '⌘-⌥-ArrowLeft'
close-pane:
- '⌘-Shift-W'
pluginBlacklist: ['ssh']

View File

@@ -42,12 +42,13 @@ hotkeys:
- 'Ctrl-Shift-D'
split-left: []
split-top: []
split-nav-right:
pane-nav-right:
- 'Ctrl-Alt-ArrowRight'
split-nav-down:
pane-nav-down:
- 'Ctrl-Alt-ArrowDown'
split-nav-up:
pane-nav-up:
- 'Ctrl-Alt-ArrowUp'
split-nav-left:
pane-nav-left:
- 'Ctrl-Alt-ArrowLeft'
close-pane: []
pluginBlacklist: []

View File

@@ -94,21 +94,25 @@ export class AppHotkeyProvider extends HotkeyProvider {
name: 'Split to the top',
},
{
id: 'split-nav-up',
id: 'pane-nav-up',
name: 'Focus the pane above',
},
{
id: 'split-nav-down',
id: 'pane-nav-down',
name: 'Focus the pane below',
},
{
id: 'split-nav-left',
id: 'pane-nav-left',
name: 'Focus the pane on the left',
},
{
id: 'split-nav-right',
id: 'pane-nav-right',
name: 'Focus the pane on the right',
},
{
id: 'close-pane',
name: 'Close focused pane',
},
]
async provide (): Promise<IHotkeyDescription[]> {

View File

@@ -10,6 +10,7 @@ import { IToolbarButton, ToolbarButtonProvider } from '../api'
@Injectable({ providedIn: 'root' })
export class TouchbarService {
private tabsSegmentedControl: TouchBarSegmentedControl
private buttonsSegmentedControl: TouchBarSegmentedControl
private tabSegments: SegmentedControlSegment[] = []
private nsImageCache: {[id: string]: Electron.NativeImage} = {}
@@ -24,16 +25,31 @@ export class TouchbarService {
if (this.hostApp.platform !== Platform.macOS) {
return
}
app.tabsChanged$.subscribe(() => this.update())
app.activeTabChange$.subscribe(() => this.update())
app.tabsChanged$.subscribe(() => this.updateTabs())
app.activeTabChange$.subscribe(() => this.updateTabs())
let activityIconPath = `${electron.app.getAppPath()}/assets/activity.png`
let activityIcon = this.electron.nativeImage.createFromPath(activityIconPath)
app.tabOpened$.subscribe(tab => {
tab.titleChange$.subscribe(title => {
this.tabSegments[app.tabs.indexOf(tab)].label = this.shortenTitle(title)
this.tabsSegmentedControl.segments = this.tabSegments
})
tab.activity$.subscribe(hasActivity => {
let showIcon = this.app.activeTab !== tab && hasActivity
this.tabSegments[app.tabs.indexOf(tab)].icon = showIcon ? activityIcon : null
})
})
}
updateTabs () {
this.tabSegments = this.app.tabs.map(tab => ({
label: this.shortenTitle(tab.title),
}))
this.tabsSegmentedControl.segments = this.tabSegments
this.tabsSegmentedControl.selectedIndex = this.app.tabs.indexOf(this.app.activeTab)
}
update () {
if (this.hostApp.platform !== Platform.macOS) {
return
@@ -47,6 +63,7 @@ export class TouchbarService {
this.tabSegments = this.app.tabs.map(tab => ({
label: this.shortenTitle(tab.title),
}))
this.tabsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: this.tabSegments,
selectedIndex: this.app.tabs.indexOf(this.app.activeTab),
@@ -54,23 +71,32 @@ export class TouchbarService {
this.app.selectTab(this.app.tabs[selectedIndex])
})
})
this.buttonsSegmentedControl = new this.electron.TouchBar.TouchBarSegmentedControl({
segments: buttons.map(button => this.getButton(button)),
mode: 'buttons',
change: (selectedIndex) => this.zone.run(() => {
buttons[selectedIndex].click()
})
})
let touchBar = new this.electron.TouchBar({
items: [
this.tabsSegmentedControl,
new this.electron.TouchBar.TouchBarSpacer({ size: 'flexible' }),
new this.electron.TouchBar.TouchBarSpacer({ size: 'small' }),
...buttons.map(button => this.getButton(button))
this.buttonsSegmentedControl,
]
})
this.hostApp.setTouchBar(touchBar)
}
private getButton (button: IToolbarButton): Electron.TouchBarButton {
return new this.electron.TouchBar.TouchBarButton({
private getButton (button: IToolbarButton): Electron.SegmentedControlSegment {
return {
label: button.touchBarNSImage ? null : this.shortenTitle(button.touchBarTitle || button.title),
icon: button.touchBarNSImage ? this.getCachedNSImage(button.touchBarNSImage) : null,
click: () => this.zone.run(() => button.click()),
})
// click: () => this.zone.run(() => button.click()),
}
}
private getCachedNSImage (name: string) {

View File

@@ -6,6 +6,10 @@ app-root {
.btn-tab-bar {
line-height: 29px !important;
svg {
height: 14px;
}
}
}

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
mode: 'development',
output: {

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-plugin-manager",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Terminus' plugin manager",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
output: {
path: path.resolve(__dirname, 'dist'),

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-settings",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Terminus terminal settings page",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
mode: 'development',
output: {

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-ssh",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "SSH connection manager for Terminus",
"keywords": [
"terminus-builtin-plugin"

View File

@@ -3,7 +3,7 @@ const path = require('path')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
output: {
path: path.resolve(__dirname, 'dist'),

View File

@@ -1,6 +1,6 @@
{
"name": "terminus-terminal",
"version": "1.0.68-c17-g8b64a81",
"version": "1.0.73-c4-ga7d62b0",
"description": "Terminus' terminal emulation core",
"keywords": [
"terminus-builtin-plugin"
@@ -28,7 +28,7 @@
"slug": "^0.9.3",
"uuid": "^3.3.2",
"xterm": "3.10.1",
"xterm-addon-ligatures-tmp": "^0.1.0-beta-1"
"xterm-addon-ligatures": "^0.1.0-beta-2"
},
"peerDependencies": {
"@angular/common": "4.0.1",

View File

@@ -110,12 +110,6 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
case 'reset-zoom':
this.resetZoom()
break
case 'home':
this.sendInput('\x1bOH')
break
case 'end':
this.sendInput('\x1bOF')
break
case 'previous-word':
this.sendInput('\x1bb')
break

View File

@@ -1,9 +1,11 @@
import { Component, Input } from '@angular/core'
import { Subscription } from 'rxjs'
import { first } from 'rxjs/operators'
import { BaseTabProcess } from 'terminus-core'
import { BaseTerminalTabComponent } from './baseTerminalTab.component'
import { SessionOptions } from '../api'
import { Session } from '../services/sessions.service'
import { WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild } from '../utils'
/** @hidden */
@Component({
@@ -13,11 +15,28 @@ import { Session } from '../services/sessions.service'
})
export class TerminalTabComponent extends BaseTerminalTabComponent {
@Input() sessionOptions: SessionOptions
private homeEndSubscription: Subscription
ngOnInit () {
this.logger = this.log.create('terminalTab')
this.session = new Session(this.config)
let isConPTY = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED) && this.config.store.terminal.useConPTY
this.homeEndSubscription = this.hotkeys.matchedHotkey.subscribe(hotkey => {
if (!this.hasFocus) {
return
}
switch (hotkey) {
case 'home':
this.sendInput(isConPTY ? '\x1b[H' : '\x1bOH')
break
case 'end':
this.sendInput(isConPTY ? '\x1b[F' : '\x1bOF')
break
}
})
this.frontendReady$.pipe(first()).subscribe(() => {
this.initializeSession(this.size.columns, this.size.rows)
})
@@ -73,4 +92,9 @@ export class TerminalTabComponent extends BaseTerminalTabComponent {
}
)).response === 1
}
ngOnDestroy () {
this.homeEndSubscription.unsubscribe()
super.ngOnDestroy()
}
}

View File

@@ -1,14 +1,11 @@
import { Frontend } from './frontend'
import { Terminal, ITheme } from 'xterm'
import * as fit from 'xterm/src/addons/fit/fit'
import * as ligatures from 'xterm-addon-ligatures-tmp'
import { fit } from 'xterm/src/addons/fit/fit'
import { enableLigatures } from 'xterm-addon-ligatures'
import 'xterm/lib/xterm.css'
import './xterm.css'
import deepEqual = require('deep-equal')
Terminal.applyAddon(fit)
Terminal.applyAddon(ligatures)
/** @hidden */
export class XTermFrontend extends Frontend {
enableResizing = true
@@ -25,6 +22,7 @@ export class XTermFrontend extends Frontend {
this.xterm = new Terminal({
allowTransparency: true,
enableBold: true,
experimentalCharAtlas: 'dynamic',
})
this.xtermCore = (this.xterm as any)._core
@@ -74,7 +72,7 @@ export class XTermFrontend extends Frontend {
this.resizeHandler = () => {
try {
(this.xterm as any).fit()
fit(this.xterm)
} catch {
// tends to throw when element wasn't shown yet
}
@@ -145,11 +143,14 @@ export class XTermFrontend extends Frontend {
configure (): void {
let config = this.configService.store
setTimeout(() => {
setImmediate(() => {
if (this.xterm.cols && this.xterm.rows) {
this.xtermCore.charMeasure.measure(this.xtermCore.options)
this.xtermCore.renderer._updateDimensions()
this.resizeHandler()
}
})
this.xterm.setOption('fontFamily', `"${config.terminal.font}", "monospace-fallback", monospace`)
this.xterm.setOption('bellStyle', config.terminal.bell)
this.xterm.setOption('cursorStyle', {
@@ -184,7 +185,7 @@ export class XTermFrontend extends Frontend {
}
if (config.terminal.ligatures && this.xterm.element) {
(this.xterm as any).enableLigatures()
enableLigatures(this.xterm)
}
}

View File

@@ -4,7 +4,7 @@ const webpack = require('webpack')
module.exports = {
target: 'node',
entry: 'src/index.ts',
devtool: 'source-map',
devtool: 'eval-source-map',
context: __dirname,
output: {
path: path.resolve(__dirname, 'dist'),

View File

@@ -253,10 +253,10 @@ windows-process-tree@^0.2.3:
dependencies:
nan "^2.10.0"
xterm-addon-ligatures-tmp@^0.1.0-beta-1:
xterm-addon-ligatures@^0.1.0-beta-2:
version "0.1.0-beta-2"
resolved "https://registry.yarnpkg.com/xterm-addon-ligatures-tmp/-/xterm-addon-ligatures-tmp-0.1.0-beta-2.tgz#1063a282b279b7586372dee7892cea59738c613e"
integrity sha512-d+UoX5dfP7ZSEE/DnQlqubs7Bpw5UxLfTAibpo4pOU2KFw+lRlsLgHg5fcmhXoEvD9rj01enYTsIjedNwnwC5Q==
resolved "https://registry.yarnpkg.com/xterm-addon-ligatures/-/xterm-addon-ligatures-0.1.0-beta-2.tgz#def635fd0ca671fe61179629f8492b76c66dec6e"
integrity sha512-MN5zCBxrF9xagzUYIpcgHS4L/Isod3m3ET5S7AUEEbymLJ+4zccio32eyq65Bcc50x/Bm57Hoh9gaSEUdojs8g==
dependencies:
font-finder "^1.0.2"
font-ligatures "^1.3.1"

161
yarn.lock
View File

@@ -423,6 +423,11 @@ ansi-regex@^3.0.0, ansi-regex@~3.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
ansi-regex@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -1367,6 +1372,15 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
character-parser@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
@@ -1465,10 +1479,10 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
cli-spinners@^1.0.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==
cli-spinners@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7"
integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==
cliui@^2.1.0:
version "2.1.0"
@@ -1587,10 +1601,10 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
colors@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b"
integrity sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==
colors@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
colors@~1.1.2:
version "1.1.2"
@@ -1997,7 +2011,7 @@ date-now@^0.1.4:
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.3, debug@^2.6.8:
debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -2025,6 +2039,13 @@ debug@^4.1.0:
dependencies:
ms "^2.1.1"
debug@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
dependencies:
ms "^2.1.1"
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@@ -2366,31 +2387,30 @@ electron-publish@20.38.3:
lazy-val "^1.0.3"
mime "^2.4.0"
electron-rebuild@^1.8.2:
version "1.8.2"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.8.2.tgz#bfffba64da78e1b403cb79d5150cfa3336645140"
integrity sha512-EeR4dgb6NN7ybxduUWMeeLhU/EuF+FzwFZJfMJXD0bx96K+ttAieCXOn9lTO5nA9Qn3hiS7pEpk8pZ9StpGgSg==
electron-rebuild@^1.8.4:
version "1.8.4"
resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.8.4.tgz#cd5384d38c2d6b4463103e375f3779d7abbae19b"
integrity sha512-QBUZg1due+R0bww5rNd4gEcsKczyhxyLrxSFZlKihwHRxaiHrGut532JAUe0fRz+VIU4WNSfNKyZ/ZwSGjaDhA==
dependencies:
colors "^1.2.0"
debug "^2.6.3"
colors "^1.3.3"
debug "^4.1.1"
detect-libc "^1.0.3"
fs-extra "^3.0.1"
node-abi "^2.0.0"
node-gyp "^3.6.0"
ora "^1.2.0"
rimraf "^2.6.1"
spawn-rx "^2.0.10"
yargs "^7.0.2"
fs-extra "^7.0.1"
node-abi "^2.7.0"
node-gyp "^3.8.0"
ora "^3.0.0"
spawn-rx "^3.0.0"
yargs "^12.0.5"
electron-to-chromium@^1.2.7:
version "1.3.58"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.58.tgz#8267a4000014e93986d9d18c65a8b4022ca75188"
integrity sha512-AGJxlBEn2wOohxqWZkISVsOjZueKTQljfEODTDSEiMqSpH0S+xzV+/5oEM9AGaqhu7DzrpKOgU7ocQRjj0nJmg==
electron@4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/electron/-/electron-4.0.5.tgz#d8e7d8a581a3e31071b2226129b26b6110c1d877"
integrity sha512-UWFH6SrzNtzfvusGUFYxXDrgsUEbtBXkH/66hpDWxjA2Ckt7ozcYIujZpshbr7LPy8kV3ZRxIvoyCMdaS5DkVQ==
electron@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/electron/-/electron-5.0.0.tgz#d8352e2c9625b3be0112ce0c1bf5c9b6f692557e"
integrity sha512-++emIe4vLihiYiAVL+E8DT5vSNVFEIuQCRxA+VfpDRVBcog85UB28vi4ogRmMOK3UffzKdWV6e1jqp3T0KpBoA==
dependencies:
"@types/node" "^10.12.18"
electron-download "^4.1.0"
@@ -2866,15 +2886,6 @@ fs-extra@0.26.7:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
fs-extra@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=
dependencies:
graceful-fs "^4.1.2"
jsonfile "^3.0.0"
universalify "^0.1.0"
fs-extra@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
@@ -2902,7 +2913,7 @@ fs-extra@^6.0.1:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^7.0.0:
fs-extra@^7.0.0, fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
@@ -3898,13 +3909,6 @@ jsonfile@^2.1.0:
optionalDependencies:
graceful-fs "^4.1.6"
jsonfile@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=
optionalDependencies:
graceful-fs "^4.1.6"
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -4219,7 +4223,7 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5,
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
log-symbols@^2.1.0:
log-symbols@^2.1.0, log-symbols@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
@@ -4662,10 +4666,10 @@ no-case@^2.2.0:
dependencies:
lower-case "^1.1.1"
node-abi@^2.0.0, node-abi@^2.4.4, node-abi@^2.5.0:
version "2.5.1"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.5.1.tgz#bb17288fc3b2f68fea0ed9897c66979fd754ed47"
integrity sha512-oDbFc7vCFx0RWWCweTer3hFm1u+e60N5FtGnmRV6QqvgATGFH/XRR6vqWIeBVosCYCqt6YdIr2L0exLZuEdVcQ==
node-abi@^2.5.0, node-abi@^2.7.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.8.0.tgz#bd2e88dbe6a6871e6dd08553e0605779325737ec"
integrity sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==
dependencies:
semver "^5.4.1"
@@ -4678,7 +4682,7 @@ node-fetch-npm@^2.0.2:
json-parse-better-errors "^1.0.0"
safe-buffer "^5.1.1"
node-gyp@^3.6.0, node-gyp@^3.8.0:
node-gyp@^3.8.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
@@ -5163,15 +5167,17 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
ora@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5"
integrity sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==
ora@^3.0.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
dependencies:
chalk "^2.1.0"
chalk "^2.4.2"
cli-cursor "^2.1.0"
cli-spinners "^1.0.1"
log-symbols "^2.1.0"
cli-spinners "^2.0.0"
log-symbols "^2.2.0"
strip-ansi "^5.2.0"
wcwidth "^1.0.1"
os-browserify@^0.3.0:
version "0.3.0"
@@ -6587,12 +6593,12 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
rxjs@^5.1.1:
version "5.5.12"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
rxjs@^6.3.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4"
integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==
dependencies:
symbol-observable "1.0.1"
tslib "^1.9.0"
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
@@ -6682,11 +6688,16 @@ semver-diff@^2.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.6.0:
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
semver@^5.4.1:
version "5.7.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -6948,14 +6959,14 @@ source-sans-pro@2.0.10:
resolved "https://registry.yarnpkg.com/source-sans-pro/-/source-sans-pro-2.0.10.tgz#c1ca859cf164a088944c5e83745085e87cd533a9"
integrity sha1-wcqFnPFkoIiUTF6DdFCF6HzVM6k=
spawn-rx@^2.0.10:
version "2.0.12"
resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.12.tgz#b6285294499426089beea0c3c1ec32d7fc57a376"
integrity sha512-gOPXiQQFQ9lTOLuys0iMn3jfxxv9c7zzwhbYLOEbQGvEShHVJ5sSR1oD3Daj88os7jKArDYT7rbOKdvNhe7iEg==
spawn-rx@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-3.0.0.tgz#1d33511e13ec26337da51d78630e08beb57a6767"
integrity sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==
dependencies:
debug "^2.5.1"
lodash.assign "^4.2.0"
rxjs "^5.1.1"
rxjs "^6.3.1"
spdx-correct@^3.0.0:
version "3.0.2"
@@ -7149,6 +7160,13 @@ strip-ansi@^4.0.0, strip-ansi@~4.0.0:
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
ansi-regex "^4.1.0"
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -7229,11 +7247,6 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
symbol-observable@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
tapable@^1.0.0, tapable@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
@@ -7901,7 +7914,7 @@ watchpack@^1.5.0:
graceful-fs "^4.1.2"
neo-async "^2.5.0"
wcwidth@^1.0.0:
wcwidth@^1.0.0, wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
@@ -8222,7 +8235,7 @@ yargs@^12.0.5:
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^11.1.1"
yargs@^7.0.0, yargs@^7.0.2:
yargs@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=