Add ipc method to invoke keybinds
e.g. create gnome keybind with following command: `bash -c 'echo run-shortcut:toggleMute | nc -U $XDG_RUNTIME_DIR/vesktop.sock'`
This commit is contained in:
@@ -52,8 +52,6 @@ const options = {
|
|||||||
"toggleMute",
|
"toggleMute",
|
||||||
"toggleDeafen",
|
"toggleDeafen",
|
||||||
"toggleStreamerMode",
|
"toggleStreamerMode",
|
||||||
"toggleCamera",
|
|
||||||
"toggleScreenShare",
|
|
||||||
"disconnectFromVoiceChannel"
|
"disconnectFromVoiceChannel"
|
||||||
] satisfies Array<ShortcutAction>
|
] satisfies Array<ShortcutAction>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import { CommandLine } from "./cli";
|
|||||||
import { DATA_DIR } from "./constants";
|
import { DATA_DIR } from "./constants";
|
||||||
import { createFirstLaunchTour } from "./firstLaunch";
|
import { createFirstLaunchTour } from "./firstLaunch";
|
||||||
import { sendRendererCommand } from "./ipcCommands";
|
import { sendRendererCommand } from "./ipcCommands";
|
||||||
|
import { initSocket } from "./ipcSocket";
|
||||||
import { registerKeyBinds } from "./keyBinds";
|
import { registerKeyBinds } from "./keyBinds";
|
||||||
import { createWindows, mainWin } from "./mainWindow";
|
import { createWindows, mainWin } from "./mainWindow";
|
||||||
import { registerMediaPermissionsHandler } from "./mediaPermissions";
|
import { registerMediaPermissionsHandler } from "./mediaPermissions";
|
||||||
@@ -124,6 +125,7 @@ function init() {
|
|||||||
registerScreenShareHandler();
|
registerScreenShareHandler();
|
||||||
registerMediaPermissionsHandler();
|
registerMediaPermissionsHandler();
|
||||||
registerKeyBinds();
|
registerKeyBinds();
|
||||||
|
initSocket();
|
||||||
|
|
||||||
bootstrap();
|
bootstrap();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2026 Vendicated and Vesktop contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { app } from "electron";
|
||||||
|
import { rmSync } from "fs";
|
||||||
|
import { rm } from "fs/promises";
|
||||||
|
import { createServer, Server } from "net";
|
||||||
|
import { join } from "path";
|
||||||
|
import { IpcCommands } from "shared/IpcEvents";
|
||||||
|
|
||||||
|
import { sendRendererCommand } from "./ipcCommands";
|
||||||
|
|
||||||
|
const { env, platform } = process;
|
||||||
|
|
||||||
|
let server: Server;
|
||||||
|
|
||||||
|
const SOCKET_PATH =
|
||||||
|
platform === "win32"
|
||||||
|
? "\\\\?\\pipe\\vesktop.sock"
|
||||||
|
: join(env.XDG_RUNTIME_DIR || env.TMPDIR || env.TMP || env.TEMP || "/tmp", "vesktop.sock");
|
||||||
|
|
||||||
|
export async function initSocket() {
|
||||||
|
await rm(SOCKET_PATH, { force: true });
|
||||||
|
|
||||||
|
server = createServer(socket => {
|
||||||
|
socket.setEncoding("utf-8");
|
||||||
|
|
||||||
|
const reply = (message: string) => {
|
||||||
|
socket.write(message);
|
||||||
|
socket.end();
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.on("data", async (data: string) => {
|
||||||
|
try {
|
||||||
|
const [command, ...args] = data.trim().split(":");
|
||||||
|
|
||||||
|
if (command === "run-shortcut") {
|
||||||
|
await sendRendererCommand(IpcCommands.KEY_BINDS_HANDLE, args[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reply("Unknown Command");
|
||||||
|
} catch (e) {
|
||||||
|
reply("Unknown Error");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
server.listen(SOCKET_PATH);
|
||||||
|
server.on("error", err => {
|
||||||
|
console.error("Vesktop IPC Socket Error:", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
app.on("will-quit", () => {
|
||||||
|
server?.close();
|
||||||
|
rmSync(SOCKET_PATH, { force: true });
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user