LINUX.ORG.RU

Kate, Klipper, D-Bus и Python

 , , ,


0

3

Много работаю с историей буфера обмена, там десятки фрагментов, которые быстрее найти и вставить, чем набирать. Но история быстро забивается фрагментами, нужными всего 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)

Вопросы:

  1. Возможно ли менее костыльное решение? Чтобы скрипт читал текст из редактора напрямую, без временного файла или буфера среднего пальца.
  2. Существует ли документация на доступные через D-Bus API Kate и Klipper (история буфера обмена KDE)?
  3. Где смотреть определения форматов, выдаваемые Introspection? https://www.freedesktop.org/software/systemd/man/latest/sd_bus_message_read.html — здесь?
  4. Когда 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 переменными выдаёт ошибку.
  5. Что дают многочисленные методы activate и Activate? Все, что пробовал, ничего не делали.
  6. Правда ли, что функции для чтения текста из Kate удалили, как сложные для поддержки? Или прочитать текст из активного документа можно?
★★★★★

Последнее исправление: question4 (всего исправлений: 2)

dbus introspect example

@anonymous2

Мне нужны пояснения, что эти функции делают, и какие данные ждут. Названия не очень информативны, а описания в выводе Introspect сводятся к тем же названиям и форматам данных.

question4 ★★★★★
() автор топика

Возможно ли менее костыльное решение?

Дописать в буфер обмена механизм, который будет всё к чему чаще обращение поднимать выше. Каждый выбор элемента в буфере обмена даёт этому элементу +1 балл, и он поднимается выше. Каждый новый элемент попавший в буфер обмена по умолчанию имеет 0 баллов и вставляется ниже всего у чего баллов >=1 и над всеми у кого 0

Элемент - 10 обращений
Элемент - 3 обращения
Элемент - 2 обращения
-------
Элемент - Только что попал в буфер обмена 0 обращений
-------
Элемент -.
Элемент - \___ все остальные эдементы попавшие в буфер с 0 обращения к ним 
Элемент -./
...

Итого всё к чему часто обращаешься ползёт вверх и там и сидит. 
Всё только что попавшее всегда ровно под тем к чему часто обращаешься и по тихоньку проталкивается вниз
если обращений так и нету

Если будет бесить что то к чему обращаешься постоянно прыгает на позицию вверх. Может добавить сортировку по кнопке, а до этого оно просто запоминает к чему было обращение и сколько раз, а потом вжух и всё.

LINUX-ORG-RU ★★★★★
()

С dbus всё довольно печально у KDE, чаще проще плагин написать.

Не проще ли слепить свой виджет для редактирования буфера обмена?

Dr64h ★★★★
()
Ответ на: комментарий от Dr64h

Не проще ли слепить свой виджет для редактирования буфера обмена?

Не проще :) Эту задачу я уже решил (за несколько часов), а к написанию графического виджета не знаю, как подступиться.

Разве что занести на Kate фичреквест по работе с D-Bus. Неужели так сложно сделать простейшие копирование и вставку, пусть даже с привязкой к активному документу и позиции курсора?

question4 ★★★★★
() автор топика
Ответ на: комментарий от Dr64h

в нём самом встроенный редактор есть.

Есть. Но как в него добавить пару десятков фрагментов, генерируемых скриптом? Как в него прочитать десяток страниц и затем скриптом объединить? Или только руками?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Посмотри help, по крайней мере там есть вот такое:

Insert some texts to the history:

copyq add -- 'first item' 'second item' 'third item'

Print content of the first three items:

copyq read 0 1 2

copyq separator "," read 0 1 2

Dr64h ★★★★
()
Ответ на: комментарий от yars068
Процессор (CPU)
  Минимум: 1 ГГц, одноядерный (x86_64)
  Рекомендуется: 2 ГГц, двухъядерный или быстрее

Оперативная память (RAM)
  Минимум: 512 МБ свободной памяти
  Рекомендуется: 2 ГБ или больше (для больших историй буфера обмена)

Место на диске
  Минимум: 50 МБ для установки
  Рекомендуется: 200 МБ+ (данные буфера обмена растут с сохранением изображений и файлов)

Для штуки, которая байтики хранит. Чудны дела твои.

bbc69
()

Глянул, что родной клиппер умеет. Добавлять в избранное, исправлять содержимое, поиск по истории и даже rq-код! С ума сойти, неужели этого мало?

bbc69
()
Ответ на: комментарий от bbc69

Можешь продолжать пользоваться стоковым буфером обмена, разрешаю. А за дополнительные возможности надо платить. Как-то так.

yars068 ★★★★★
()
Ответ на: комментарий от bbc69

Добавлять в избранное

Годная функция, жалко что недавно появилась и на работе у меня в kde5 её нет.

ptah_alexs ★★★★★
()
Ответ на: комментарий от bbc69

исправлять содержимое

В окне 200х200 пикселов. Горячая клавиша не работает, только мышью.

поиск по истории

В окне видно не более 8 записей. Удалять можно строго по одной. Поэтому и возникло желание развернуть на весь экран.

question4 ★★★★★
() автор топика

В KDE дофига чего удалили из D-Bus. Например, возможность запуска нужной софтины через org.kde.KLauncher.exec_blind

Stanson ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария