Cudatext Clipboard catcher (автоматическая вставка из буфера
-
- Posts: 21
- Joined: 05.05.2022 18:52
-
- Posts: 2236
- Joined: 25.08.2021 18:15
dimon40001 wrote:это скорее всего реализуемо с помощью AutoKey под Linux и AutoHotKey под Windows
Спасибо за идею!
Только сейчас обратил внимение
How to Use AutoKey to Automate Repetitive Tasks on Linux
AutoKey is a scripting application for Linux. It lets you automate repetitive and trivial operations on your computer so you can perform them quickly and efficiently.
Some of the tasks where AutoKey serves well include text expansion, correcting typos, launching programs, and inserting boilerplate texts. Besides, you can also use it to run custom scripts to automate complex system actions on your machine.
That said, though, AutoKey can be intimidating to its first-time users. To this end, here's a guide to help you install, set up, and use AutoKey on Linux.
What Is AutoKey?
AutoKey is a free and open-source desktop automation utility for Linux. It allows you to automate various repetitive operations on your computer using hotkeys or trigger phrases so you can perform them efficiently.
GitHub - autokey/autokey: AutoKey, a desktop automation utility for Linux and X11.
https://github.com/autokey/autokey
Вопрос.main Alexey wrote: для этого программа должна перехватчик буфера ставить.
Можно ли запустить (ненадолго, при необходимости) в CudaText простой (и неоптимальный из-за цикла каждые 0.1 с) скрипт
Code: Select all
import time
import sys
import pyperclip
# Based on https://github.com/bolapara/clipboardToTxt pull request.
# By preloading last_paste with the existing clipboard we avoid saving
# something from the clipboard that was put there when this tool was not
# running. That way you can safely kill it when copying a password and
# restart it afterwards and it will not steal your sensitive paste.
last_paste = pyperclip.paste().strip()
while True:
time.sleep(0.1)
paste = pyperclip.paste().strip()
if paste != last_paste:
try:
with open('clipboard.txt', 'a') as f:
f.write('{}\n$\n'.format(paste))
last_paste = paste
except Exception as e:
sys.stderr.write("Error: {}".format(e))
break
clipboardToTxt/clipboardToTxt.py at master · Crevette3/clipboardToTxt · GitHub
https://github.com/Crevette3/clipboardT ... rdToTxt.py )
Только модифицировав этот скрипт так, чтобы текст из clipboard писался не в файл во вкладке CudaText на место курсора.
Каким способом и какой функцией?
Где почитать?
В описании API?
-
- Posts: 2236
- Joined: 25.08.2021 18:15
наверное можно.
вот описание АПИ для clipboard:
4.3.5 app_proc - Clipboard
https://wiki.freepascal.org/CudaText_API
вот описание АПИ для clipboard:
4.3.5 app_proc - Clipboard
https://wiki.freepascal.org/CudaText_API
Здравствуйте, спасибо за ссылку!
Пытаюсь в консоли "прототипировать" фрагменты Cudatext Clipboard catcher.
В https://wiki.freepascal.org/CudaText#Console_panel
Пытаюсь запомнить текущую вкладку:
Перехожу в другую вкладку:
А мне нужно сохранить объект ed, связанный с одной вкладкой, куда хотел бы вставлять текст.
При переходе в другую вкладку и даже при смене фокуса на другое приложение, например, браузер.
Похоже, присваивание объектов в Python происходит по ссылке, а не по значению.
Поискал, не нашел описания.
Вопросы:
1. Как бы сохранить контекст одной вкладки даже при смене фокуса, чтобы вставлять текст именно в нее?
2. Может ли плагин работать в цикле в фоне, при смене фокуса на другое приложение? Как?
Пытаюсь в консоли "прототипировать" фрагменты Cudatext Clipboard catcher.
В https://wiki.freepascal.org/CudaText#Console_panel
Там есть примеры использование CudaText API в консоли.You can enter commands from CudaText API
Пытаюсь запомнить текущую вкладку:
Code: Select all
>>> t1 = ed
>>> =t1
<Editor h:0 id:19 title:"CudaText.wiki" gr:0 tab:18>
Code: Select all
>>> =t1
<Editor h:0 id:13 title:"lsp_md.json" gr:0 tab:12>
При переходе в другую вкладку и даже при смене фокуса на другое приложение, например, браузер.
Похоже, присваивание объектов в Python происходит по ссылке, а не по значению.
Поискал, не нашел описания.
Вопросы:
1. Как бы сохранить контекст одной вкладки даже при смене фокуса, чтобы вставлять текст именно в нее?
2. Может ли плагин работать в цикле в фоне, при смене фокуса на другое приложение? Как?
-
- Posts: 2236
- Joined: 25.08.2021 18:15
>>1. Как бы сохранить контекст одной вкладки даже при смене фокуса, чтобы вставлять текст именно в нее?
'ed' это всегда ссылка на активный таб. после смены фокуса - тоже.
вам надо запомнить хендл активного таба
h_my = ed.get_prop(PROP_HANDLE_SELF, '')
ed_my = Editor(h_my)
и вот ed_my это же ссылка на фиксированный таб!
она работает пока таб не закрыт.
работа с этим табом:
ed_my.xxxxxxxxxx()
>>2. Может ли плагин работать в цикле в фоне, при смене фокуса на другое приложение? Как?
нет. так как АПИ не дает потоков.
но можно юзать потоки питона.
но они не работают в простое программы.
реагировать на смену фокуса надо.
on_focus
on_app_deactivate
'ed' это всегда ссылка на активный таб. после смены фокуса - тоже.
вам надо запомнить хендл активного таба
h_my = ed.get_prop(PROP_HANDLE_SELF, '')
ed_my = Editor(h_my)
и вот ed_my это же ссылка на фиксированный таб!
она работает пока таб не закрыт.
работа с этим табом:
ed_my.xxxxxxxxxx()
>>2. Может ли плагин работать в цикле в фоне, при смене фокуса на другое приложение? Как?
нет. так как АПИ не дает потоков.
но можно юзать потоки питона.
но они не работают в простое программы.
реагировать на смену фокуса надо.
on_focus
on_app_deactivate
Спасибо!
Пока промежуточный вопрос:
CudaText API - Lazarus wiki
https://wiki.freepascal.org/CudaText_AP ... _-_General
--
on_open(self, ed_self):
Чем отличаются self и ed_self, что получает on_open при открытии файла (и другие обработчики событий) в self и ed_self?
В описании нашел только ed_self - объект, относящийся к текущая вкладке, насколько понял.
Пока промежуточный вопрос:
CudaText API - Lazarus wiki
https://wiki.freepascal.org/CudaText_AP ... _-_General
--
on_open(self, ed_self):
Чем отличаются self и ed_self, что получает on_open при открытии файла (и другие обработчики событий) в self и ed_self?
В описании нашел только ed_self - объект, относящийся к текущая вкладке, насколько понял.
-
- Posts: 2236
- Joined: 25.08.2021 18:15
self - конкретный экземпляр класса?self - параметр который нужен для классов. вам он не нужен.
Правильно?
Не могу сам разобраться вот с чем.
Code: Select all
from gi.repository import Gtk, Gdk
подвешивает CudaText!
Добавил по совету в инете
Code: Select all
import gi
gi.require_version("Gtk", "3.0")
Закомментарил, работает модуль (пока отладочная печать, подписка на events).
Gtk, Gdk нужны для работы с буфером обмена, нашел пример, как организовать обратный вызов (? hook? callback) при изменении буфера обмена.
Дело в том, что если в плагине следить в цикле за буфером обмена, то CudaText будет выполнять этот код плагина, в другую вкладку не перейдешь, чтобы редактировать или скопировать текст, команды не выполнишь, пока плагин не отдаст управление.
Посоветуйте, пожалуйста, как импортировать Gtk, Gdk и почему from gi.repository import Gtk, Gdk подвешивает плагин CudaText?
Искал "from gi.repository", нашел, что нужно установить PyGObject или python3-gi.
Но об этом были явные сообщения об ошибке Traceback. У меня же просто виснет.
PyGObject, который содержит gi.repository, установлен:
Code: Select all
pip3 install PyGObject
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: PyGObject in /usr/lib/python3/dist-packages (3.42.1)
Requirement already satisfied: pycairo>=1.16.0 in /usr/lib/python3/dist-packages (from PyGObject) (1.20.1)
Code: Select all
sudo apt install python3-gi
Уже установлен пакет python3-gi самой новой версии (3.42.1-0ubuntu1).
python3-gi помечен как установленный вручную.