Adding keyboard shortcut for direct access + Fixes for Linux clipboard reading (#1479)

* feat: add ctrl+d keyboard shortcut to open direct access

* fix: make sure direct access promt only get shown once

* fix: linux clipboard acess on non x11 systems

xclip not present on all linux machines: using the electron mechanism instead
This commit is contained in:
kubectl
2025-11-11 05:16:23 +01:00
committed by GitHub
parent dda3d2dda9
commit 56b13ae4cb
5 changed files with 57 additions and 23 deletions

View File

@@ -31,6 +31,8 @@ export const useSearchStore = defineStore('Search', () => {
const quickSearchItems = ref([]);
const friendsListSearch = ref('');
const directAccessPrompt = ref(null);
const stringComparer = computed(() =>
Intl.Collator(appearanceSettingsStore.appLanguage.replace('_', '-'), {
usage: 'search',
@@ -217,12 +219,21 @@ export const useSearchStore = defineStore('Search', () => {
return results;
}
function directAccessPaste() {
AppApi.GetClipboard().then((clipboard) => {
if (!directAccessParse(clipboard.trim())) {
promptOmniDirectDialog();
}
});
async function directAccessPaste() {
let cbText = '';
if (LINUX) {
cbText = await window.electron.getClipboardText();
} else {
cbText = await AppApi.GetClipboard().catch((e) => {
console.log(e);
return '';
});
}
let trimemd = cbText.trim();
if (!directAccessParse(trimemd)) {
promptOmniDirectDialog();
}
}
function directAccessParse(input) {
@@ -335,8 +346,10 @@ export const useSearchStore = defineStore('Search', () => {
return false;
}
function promptOmniDirectDialog() {
ElMessageBox.prompt(
async function promptOmniDirectDialog() {
if (directAccessPrompt.value) return;
directAccessPrompt.value = ElMessageBox.prompt(
t('prompt.direct_access_omni.description'),
t('prompt.direct_access_omni.header'),
{
@@ -346,21 +359,24 @@ export const useSearchStore = defineStore('Search', () => {
inputPattern: /\S+/,
inputErrorMessage: t('prompt.direct_access_omni.input_error')
}
)
.then(({ value, action }) => {
if (action === 'confirm' && value) {
const input = value.trim();
if (!directAccessParse(input)) {
ElMessage({
message: t(
'prompt.direct_access_omni.message.error'
),
type: 'error'
});
}
);
try {
const { value, action } = await directAccessPrompt.value;
if (action === 'confirm' && value) {
const input = value.trim();
if (!directAccessParse(input)) {
ElMessage({
message: t('prompt.direct_access_omni.message.error'),
type: 'error'
});
}
})
.catch(() => {});
}
} catch {
} finally {
directAccessPrompt.value = null;
}
}
function showGroupDialogShortCode(shortCode) {