Skip to content

Commit

Permalink
feat: add default open position setting
Browse files Browse the repository at this point in the history
  • Loading branch information
UziTech committed Feb 19, 2020
1 parent 4a0f85c commit 7c10a3c
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 16 deletions.
6 changes: 6 additions & 0 deletions spec/config-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -420,3 +420,9 @@ describe('Call to getDefaultPromptToStartup()', () => {
expect(configDefaults.getDefaultPromptToStartup()).toBe(false)
})
})

describe('Call to getDefaultApiOpenPosition()', () => {
it('return \'Center\'', () => {
expect(configDefaults.getDefaultApiOpenPosition()).toBe('Center')
})
})
20 changes: 20 additions & 0 deletions src/lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,10 @@ export const configDefaults = {
getDefaultPromptToStartup () {
return false
},

getDefaultApiOpenPosition () {
return 'Center'
},
}

function configOrder (obj) {
Expand Down Expand Up @@ -503,6 +507,22 @@ export const config = configOrder({
type: 'string',
default: configDefaults.getDefaultTitle(),
},
defaultOpenPosition: {
title: 'Default Open Position',
description: 'Position to open terminal through service API or x-terminal:open.',
type: 'string',
enum: [
'Center',
'Split Up',
'Split Down',
'Split Left',
'Split Right',
'Bottom Dock',
'Left Dock',
'Right Dock',
],
default: configDefaults.getDefaultApiOpenPosition(),
},
xtermOptions: {
title: 'xterm.js Terminal Options',
description: 'Options to apply to xterm.js Terminal objects. (https://xtermjs.org/docs/api/terminal/interfaces/iterminaloptions/#properties)',
Expand Down
87 changes: 71 additions & 16 deletions src/lib/x-terminal.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,11 @@ class XTerminalSingleton {

// Add commands.
this.disposables.add(atom.commands.add('atom-workspace', {
'x-terminal:open': () => {
this.openInCenterOrDock(atom.workspace)
},
'x-terminal:open': () => this.open(
this.profilesSingleton.generateNewUri(),
this.addDefaultPosition(),
),
'x-terminal:open-center': () => this.openInCenterOrDock(atom.workspace),
'x-terminal:open-split-up': () => this.open(
this.profilesSingleton.generateNewUri(),
{ split: 'up' },
Expand All @@ -177,15 +179,9 @@ class XTerminalSingleton {
this.profilesSingleton.generateNewUri(),
{ split: 'right' },
),
'x-terminal:open-split-bottom-dock': () => {
this.openInCenterOrDock(atom.workspace.getBottomDock())
},
'x-terminal:open-split-left-dock': () => {
this.openInCenterOrDock(atom.workspace.getLeftDock())
},
'x-terminal:open-split-right-dock': () => {
this.openInCenterOrDock(atom.workspace.getRightDock())
},
'x-terminal:open-split-bottom-dock': () => this.openInCenterOrDock(atom.workspace.getBottomDock()),
'x-terminal:open-split-left-dock': () => this.openInCenterOrDock(atom.workspace.getLeftDock()),
'x-terminal:open-split-right-dock': () => this.openInCenterOrDock(atom.workspace.getRightDock()),
'x-terminal:toggle-profile-menu': () => this.toggleProfileMenu(),
'x-terminal:reorganize': () => this.reorganize('current'),
'x-terminal:reorganize-top': () => this.reorganize('top'),
Expand Down Expand Up @@ -229,13 +225,12 @@ class XTerminalSingleton {
})
}

openInCenterOrDock (centerOrDock) {
const options = {}
openInCenterOrDock (centerOrDock, options = {}) {
const pane = centerOrDock.getActivePane()
if (pane) {
options.pane = pane
}
this.open(
return this.open(
this.profilesSingleton.generateNewUri(),
options,
)
Expand Down Expand Up @@ -286,6 +281,7 @@ class XTerminalSingleton {
* @return {XTerminalModel} Instance of XTerminalModel.
*/
async openTerminal (profile, options = {}) {
options = this.addDefaultPosition(options)
return this.open(
XTerminalProfilesSingleton.instance.generateNewUrlFromProfileData(profile),
options,
Expand All @@ -301,13 +297,72 @@ class XTerminalSingleton {
* @return {XTerminalModel} Instance of XTerminalModel.
*/
async runCommands (commands) {
const model = await this.open(XTerminalProfilesSingleton.instance.generateNewUri())
const options = this.addDefaultPosition()
const model = await this.open(
XTerminalProfilesSingleton.instance.generateNewUri(),
options,
)
await model.element.initializedPromise
for (const command of commands) {
model.pasteToTerminal(command + os.EOL)
}
}

addDefaultPosition (options = {}) {
const position = atom.config.get('x-terminal.terminalSettings.defaultOpenPosition')
switch (position) {
case 'Center': {
const pane = atom.workspace.getActivePane()
if (pane && !('pane' in options)) {
options.pane = pane
}
break
}
case 'Split Up':
if (!('split' in options)) {
options.split = 'up'
}
break
case 'Split Down':
if (!('split' in options)) {
options.split = 'down'
}
break
case 'Split Left':
if (!('split' in options)) {
options.split = 'left'
}
break
case 'Split Right':
if (!('split' in options)) {
options.split = 'right'
}
break
case 'Bottom Dock': {
const pane = atom.workspace.getBottomDock().getActivePane()
if (pane && !('pane' in options)) {
options.pane = pane
}
break
}
case 'Left Dock': {
const pane = atom.workspace.getLeftDock().getActivePane()
if (pane && !('pane' in options)) {
options.pane = pane
}
break
}
case 'Right Dock': {
const pane = atom.workspace.getRightDock().getActivePane()
if (pane && !('pane' in options)) {
options.pane = pane
}
break
}
}
return options
}

/**
* Function providing service functions offered by 'atom-xterm' service.
*
Expand Down

0 comments on commit 7c10a3c

Please sign in to comment.