Как расширить окно повторного использования путей кода в vscode и Azure Data Studio?
Я работаю в репозитории microsoft/azuredatastudio github, который в значительной степени разветвлен из vscode. Я пытаюсь расширить нашу обработку командной строки для обработки параметра повторного использования окна, чтобы, если мы передадим соединение с сервером вместе с -r, мы откроем указанное соединение. Наш текущий сервис обработки командной строки загружается с помощью src \ vs \ workbench \ Electron-browser \ workbench.ts в Workbench.initServices.
Есть ли какая-либо предоставляемая платформой служба, которая видна как электронному, так и рабочему столу \ электронному браузеру, которую я мог бы изменить или использовать, чтобы получать информацию о повторном использовании приложения с новыми аргументами командной строки?
Я обнаружил, что LaunchService, определенный в src \ vs \ code \ Electron-main \ launch.ts, по-видимому, отвечает за захват аргументов и открытие или повторное использование окна, но неясно, как я могу направить уведомление от LaunchService к нашим услугам, которые загружены верстаком.
2/12/2019 обновление: похоже, мне нужно добавить эквивалент этой функции в src \ vs \ code \ Electron-Main \ Windows.ts
private doOpenFilesInExistingWindow(configuration: IOpenConfiguration, window: ICodeWindow, filesToOpen: IPath[], filesToCreate: IPath[], filesToDiff: IPath[], filesToWait: IPathsToWaitFor): ICodeWindow {
window.focus(); // make sure window has focus
window.ready().then(readyWindow => {
const termProgram = configuration.userEnv ? configuration.userEnv['TERM_PROGRAM'] : void 0;
readyWindow.send('vscode:openFiles', { filesToOpen, filesToCreate, filesToDiff, filesToWait, termProgram });
});
return window;
}
который имеет новое сообщение, как "объявления:openconnection". Теперь, чтобы узнать, как обработать сообщение.
1 ответ
Я закончил тем, что использовал сервис ipcRenderer и добавил вызов ipc в сервис запуска в main.
// {{SQL CARBON EDIT}}
// give the first used window a chance to process the other command line arguments
if (args['reuse-window'] && usedWindows.length > 0 && usedWindows[0])
{
let window = usedWindows[0];
usedWindows[0].ready().then(() => window.send('ads:processCommandLine', args));
}
// {{SQL CARBON EDIT}}