Выполните команду bash из виджета QLM KDE-Plasma

Я пытаюсь создать виджет в KDE Plasma, который позволит мне быстро подключить диск через rClone. Это означает, что на панели задач у меня есть значок, с помощью которого я могу выбрать, какие диски монтировать. Однако я не нашел способа выполнить команду bash из файла QLM.

Что у меня есть: У меня есть команда bash, которая монтирует папку OneDrive с помощью rClone.

// Example:
rclone mount remote:path/to/files /path/to/local/mount

Что я хочу: Я хочу создать ярлык (желательно на панели задач, например виджет KDE), по которому я могу щелкнуть, чтобы запустить указанную команду (монтировать).

Что я пробовал: Я создал виджет, который добавил на панель задач. У него есть кнопка, которая должна запускать указанную команду (как показано ниже).

PlasmaComponents.Button {
   text: i18n("Mount")
   onClicked: ???
}

Проблема: Вот где я застрял. Как я могу выполнить команду bash при нажатии кнопки в виджете Plasma (написанном в QLM)? Есть ли какая-нибудь библиотека/плагин/API для этого? Или есть совершенно другой способ добиться этого или чего-то подобного?

Почему QLM? Почему бы просто не написать сценарий, сохранить его как текстовый файл (включая #!/bin/bash), сделать его исполняемым (chmod 0755 /path/to/yourscript), а затем создать значок (файл .desktop), используя kmenuedit, который использует ваш сценарий в качестве исполняемого файла, а затем просто поместить значок приложения в панели задач? Вы даже можете включить диалоги из своего скрипта, используя kdialog, чтобы предоставить диалоговое окно подтверждения, показывающее успешное монтирование, и т. д.

David C. Rankin 13.06.2024 09:28

См. Руководство по редактору меню KDE. Вы также можете использовать kdialog для отображения диалогового окна KDE («Да», «Нет», «Отмена» и т. д.), которое будет делать то, что вы хотите.

David C. Rankin 13.06.2024 09:38

@DavidC.Rankin Спасибо, что указали мне на kmenuedit и kdialog, я определенно смогу ими воспользоваться.

ChemistryGull 13.06.2024 19:23

Рад, что это помогло! Я использую KDE уже более 20 лет и обычно просто думаю о простом способе сделать что-то :). Приятно осознавать, что подход QLM также будет работать, хотя, признаться, я еще не рискнул в него вникать. Удачи вам в написании сценариев. (всегда не забывайте вставлять все скрипты в ShellCheck, чтобы ничего не пропустить). Это фантастический инструмент, который весьма полезен даже для тех, кто пишет сценарии десятилетиями.

David C. Rankin 14.06.2024 07:20

Спасибо за предложение ShellCheck, я проверю! Я новичок как в QLM, так и в написании сценариев Shell, поэтому думаю, что это мне очень поможет.

ChemistryGull 14.06.2024 15:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Дэвид К.Ранкин указал мне на kmenuedit (и kdialog), который является более простым способом достижения этой цели. Однако я также нашел ответ на свой первоначальный вопрос:

На другом сайте пользователь предоставил мне ответ, которым я хочу поделиться здесь. Действительно, можно запускать команды bash из виджетов QLM:

Предполагая, что вы используете Plasma 6, вы сможете сделать это через "Источник данных".

Если вы посмотрите на код Toggle Обзор виджета для Plasma 6, когда вы перейдете к коду, вы увидите, как он используется. у меня есть на самом деле я сам использовал соответствующий код для одного из своих собственных модифицированных виджеты.

Что вам нужно сделать, это импортировать org.kde.plasma.plasma5support как Plasma5Support, а затем настройте Plasma5Support.DataSource оттуда. (проверьте код, на момент написания статьи он должен быть из строк 81–92 этот). Если вы используете код оттуда, вы сможете использовать следующее:

executable.exec('bash command goes here');

Вы также можете поместить exec в функцию, а затем вызвать эту функцию. при нажатии кнопки.

(Из Reddit)

Подводя итог: вам нужно

import org.kde.plasma.plasma5support as Plasma5Support

а затем добавьте кнопку и источник данных в виджет:

PlasmaComponents.Button {
    text: i18n("Execute")
    onClicked: executable.exec('bash_code_here')
}

Plasma5Support.DataSource {
    id: executable
    engine: "executable"
    connectedSources: []
    onNewData: function(source, data) {
        disconnectSource(source)
    }

    function exec(cmd) {
        executable.connectSource(cmd)
    }
}

Альтернативно вы также можете выполнить файл сценария:

onClicked: executable.exec('bash /path/to/yourscript')

Другие вопросы по теме