Open terminals in a new tab

Jeremy Tuloup 5 years ago
parent ffbaab1e23
commit 93331d4488

@ -72,6 +72,8 @@ async function main() {
require('@jupyterlab-classic/application-extension'),
require('@jupyterlab-classic/docmanager-extension'),
require('@jupyterlab-classic/notebook-extension'),
// to handle opening new tabs after creating a new terminal
require('@jupyterlab-classic/terminal-extension'),
// @jupyterlab plugins
require('@jupyterlab/apputils-extension').default.filter(({ id }) =>
@ -114,8 +116,7 @@ async function main() {
'@jupyterlab-classic/tree-extension:factory'
].includes(id)
),
require('@jupyterlab/running-extension'),
require('@jupyterlab-classic/terminal-extension')
require('@jupyterlab/running-extension')
]);
} else if (page === 'notebooks') {
mods = mods.concat([
@ -141,8 +142,6 @@ async function main() {
['@jupyterlab-classic/tree-extension:factory'].includes(id)
)
]);
} else if (page === 'terminals') {
mods = mods.concat([require('@jupyterlab-classic/terminal-extension')]);
}
const extension_data = JSON.parse(

@ -105,8 +105,6 @@ export class ClassicShell extends Widget implements JupyterFrontEnd.IShell {
if (area === 'main' || area === undefined) {
if (this._main.widgets.length > 0) {
// do not add the widget if there is already one
// TODO: should the widget be closed?
widget.close();
return;
}
this._main.addWidget(widget);

@ -37,7 +37,9 @@
},
"dependencies": {
"@jupyterlab/application": "^3.0.0-rc.12",
"@jupyterlab/terminal": "^3.0.0-rc.12"
"@jupyterlab/coreutils": "^5.0.0-rc.12",
"@jupyterlab/terminal": "^3.0.0-rc.12",
"@lumino/algorithm": "^1.3.3"
},
"devDependencies": {
"rimraf": "~3.0.0",

@ -7,6 +7,12 @@ import {
JupyterFrontEndPlugin
} from '@jupyterlab/application';
import { PageConfig } from '@jupyterlab/coreutils';
import { ITerminalTracker } from '@jupyterlab/terminal';
import { find } from '@lumino/algorithm';
/**
* A plugin to terminals in a new tab
*/
@ -39,9 +45,30 @@ const opener: JupyterFrontEndPlugin<void> = {
}
};
/**
* Open terminals in a new tab.
*/
const redirect: JupyterFrontEndPlugin<void> = {
id: '@jupyterlab-classic/terminal-extension:redirect',
requires: [ITerminalTracker],
autoStart: true,
activate: (app: JupyterFrontEnd, tracker: ITerminalTracker) => {
const baseUrl = PageConfig.getBaseUrl();
tracker.widgetAdded.connect((send, terminal) => {
const widget = find(app.shell.widgets('main'), w => w.id === terminal.id);
if (widget) {
// bail if the terminal is already added to the main area
return;
}
const name = terminal.content.session.name;
window.open(`${baseUrl}classic/terminals/${name}`);
});
}
};
/**
* Export the plugins as default.
*/
const plugins: JupyterFrontEndPlugin<any>[] = [opener];
const plugins: JupyterFrontEndPlugin<any>[] = [opener, redirect];
export default plugins;

Loading…
Cancel
Save