Много работаю с историей буфера обмена, там десятки фрагментов, которые быстрее найти и вставить, чем набирать. Но история быстро забивается фрагментами, нужными всего 1 раз. В родном интерфейсе Klipper (история буфера обмена KDE) легко удалить не то, но долго удалять, если много копировал. Поэтому пытаюсь сделать скрипт, который через D-Bus из Питона откроет в редакторе всю историю для ненпаряжного редактирования, затем по сигналу удалит из истории всё, что отсутствует в редакторе.
Пока получилось следующее:
import subprocess
import dbus
bus = dbus.SessionBus()
# Известно, что запущен 1 экземпляр Kate
kate_name = [name for name in bus.list_names() if name.startswith('org.kde.kate')][0]
kate_main = bus.get_object(kate_name, '/MainApplication')
klipper_o = bus.get_object('org.kde.klipper', '/klipper')
history_joined = '\n'.join(_ for _ in klipper_o.get_dbus_method('getClipboardHistoryMenu')())
kate_main.get_dbus_method('openInput', 'org.kde.Kate.Application')(history_joined, '')
print('В Kate удали ненужное из истории. Закончив, нажми Ctrl-A, вернись в скрипт, нажми Enter.')
input()
edited = subprocess.getoutput('xclip -out -selection primary')
history_array = klipper_o.get_dbus_method('getClipboardHistoryMenu')()
history_array = [_ for _ in history_array if _ in edited]
if len(history_array) == 0:
print('В истории пусто. Если действительно хочешь всё удалить, очисть историю из Klipper.')
else:
for n, element in enumerate(history_array[-1::-1]):
klipper_o.get_dbus_method('setClipboardContents', 'org.kde.klipper.klipper')(element)
Вопросы:
- Возможно ли менее костыльное решение? Чтобы скрипт читал текст из редактора напрямую, без временного файла или буфера среднего пальца.
- Существует ли документация на доступные через D-Bus API Kate и Klipper (история буфера обмена KDE)?
- Где смотреть определения форматов, выдаваемые Introspection? https://www.freedesktop.org/software/systemd/man/latest/sd_bus_message_read.html — здесь?
- Когда
qdbus6показывает несколько методов с одним именем, но разными сигнатурами, как использовать из Питона метод с меньшим числом переменных? Например, естьmethod QString org.kde.Kate.Application.tokenOpenUrl(QString url, QString encoding)иmethod QString org.kde.Kate.Application.tokenOpenUrl(QString url, QString encoding, bool isTempFile), но с 2 переменными выдаёт ошибку. - Что дают многочисленные методы
activateиActivate? Все, что пробовал, ничего не делали. - Правда ли, что функции для чтения текста из Kate удалили, как сложные для поддержки? Или прочитать текст из активного документа можно?





