From 71953e0fdf69ca04b884339c194865e823cf243f Mon Sep 17 00:00:00 2001 From: Jason Gauci Date: Mon, 14 Oct 2019 17:09:30 -0700 Subject: [PATCH] Allow plugins to set the parent/predecessor of a new session (#3723) --- app/commands.js | 6 +++--- app/ui/window.js | 5 +++-- lib/actions/sessions.js | 4 ++-- lib/actions/term-groups.js | 12 +++++++----- lib/index.js | 12 ++++++------ lib/reducers/sessions.js | 2 +- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/commands.js b/app/commands.js index 4791b8bf..2cba5bca 100644 --- a/app/commands.js +++ b/app/commands.js @@ -10,16 +10,16 @@ const commands = { }, 'tab:new': focusedWindow => { if (focusedWindow) { - focusedWindow.rpc.emit('termgroup add req'); + focusedWindow.rpc.emit('termgroup add req', {}); } else { setTimeout(app.createWindow, 0); } }, 'pane:splitRight': focusedWindow => { - focusedWindow && focusedWindow.rpc.emit('split request vertical'); + focusedWindow && focusedWindow.rpc.emit('split request vertical', {}); }, 'pane:splitDown': focusedWindow => { - focusedWindow && focusedWindow.rpc.emit('split request horizontal'); + focusedWindow && focusedWindow.rpc.emit('split request horizontal', {}); }, 'pane:close': focusedWindow => { focusedWindow && focusedWindow.rpc.emit('termgroup close req'); diff --git a/app/ui/window.js b/app/ui/window.js index 73d25b02..6cba8cd1 100644 --- a/app/ui/window.js +++ b/app/ui/window.js @@ -89,7 +89,7 @@ module.exports = class Window { // If no callback is passed to createWindow, // a new session will be created by default. if (!fn) { - fn = win => win.rpc.emit('termgroup add req'); + fn = win => win.rpc.emit('termgroup add req', {}); } // app.windowCallback is the createWindow callback @@ -166,7 +166,8 @@ module.exports = class Window { uid: options.uid, splitDirection: options.splitDirection, shell: session.shell, - pid: session.pty.pid + pid: session.pty ? session.pty.pid : null, + activeUid: options.activeUid }); // If this is the initial session, flush any events that might have diff --git a/lib/actions/sessions.js b/lib/actions/sessions.js index 1990da49..49d249be 100644 --- a/lib/actions/sessions.js +++ b/lib/actions/sessions.js @@ -17,7 +17,7 @@ import { SESSION_SEARCH_CLOSE } from '../constants/sessions'; -export function addSession({uid, shell, pid, cols, rows, splitDirection}) { +export function addSession({uid, shell, pid, cols, rows, splitDirection, activeUid}) { return (dispatch, getState) => { const {sessions} = getState(); const now = Date.now(); @@ -29,7 +29,7 @@ export function addSession({uid, shell, pid, cols, rows, splitDirection}) { cols, rows, splitDirection, - activeUid: sessions.activeUid, + activeUid: activeUid ? activeUid : sessions.activeUid, now }); }; diff --git a/lib/actions/term-groups.js b/lib/actions/term-groups.js index a9bf0f0d..582ecaa1 100644 --- a/lib/actions/term-groups.js +++ b/lib/actions/term-groups.js @@ -12,14 +12,15 @@ import getRootGroups from '../selectors'; import {setActiveSession, ptyExitSession, userExitSession} from './sessions'; function requestSplit(direction) { - return () => (dispatch, getState) => { + return activeUid => (dispatch, getState) => { dispatch({ type: SESSION_REQUEST, effect: () => { - const {ui} = getState(); + const {ui, sessions} = getState(); rpc.emit('new', { splitDirection: direction, - cwd: ui.cwd + cwd: ui.cwd, + activeUid: activeUid ? activeUid : sessions.activeUid }); } }); @@ -37,7 +38,7 @@ export function resizeTermGroup(uid, sizes) { }; } -export function requestTermGroup() { +export function requestTermGroup(activeUid) { return (dispatch, getState) => { dispatch({ type: TERM_GROUP_REQUEST, @@ -46,7 +47,8 @@ export function requestTermGroup() { const {cwd} = ui; rpc.emit('new', { isNewGroup: true, - cwd + cwd, + activeUid }); } }); diff --git a/lib/index.js b/lib/index.js index d2d0c740..181b5659 100644 --- a/lib/index.js +++ b/lib/index.js @@ -142,16 +142,16 @@ rpc.on('session search close', () => { store_.dispatch(sessionActions.closeSearch()); }); -rpc.on('termgroup add req', () => { - store_.dispatch(termGroupActions.requestTermGroup()); +rpc.on('termgroup add req', ({activeUid}) => { + store_.dispatch(termGroupActions.requestTermGroup(activeUid)); }); -rpc.on('split request horizontal', () => { - store_.dispatch(termGroupActions.requestHorizontalSplit()); +rpc.on('split request horizontal', ({activeUid}) => { + store_.dispatch(termGroupActions.requestHorizontalSplit(activeUid)); }); -rpc.on('split request vertical', () => { - store_.dispatch(termGroupActions.requestVerticalSplit()); +rpc.on('split request vertical', ({activeUid}) => { + store_.dispatch(termGroupActions.requestVerticalSplit(activeUid)); }); rpc.on('reset fontSize req', () => { diff --git a/lib/reducers/sessions.js b/lib/reducers/sessions.js index 23801c87..c3e25f6a 100644 --- a/lib/reducers/sessions.js +++ b/lib/reducers/sessions.js @@ -42,7 +42,7 @@ const reducer = (state = initialState, action) => { cols: action.cols, rows: action.rows, uid: action.uid, - shell: action.shell.split('/').pop(), + shell: action.shell ? action.shell.split('/').pop() : null, pid: action.pid }) );