Page 4 of 6

Posted: 25.07.2023 15:19
by mix-7
> зачем ed передавать в тред?

почему-то при выполнении в треде

Code: Select all

new_clip = app_proc(PROC_GET_CLIP, "")
появляется модальное окно, Куда зависает.
Подумал, что не хватает среды.
Оказалось, нет, т.к.

Code: Select all

new_clip = app_proc(PROC_ENUM_FONTS, "")
работает.
И ed печатает в треде тот же, что и в основном коде плагина.

И еще.
Простенький пример с
Pyperclip module in Python - GeeksforGeeks
https://www.geeksforgeeks.org/pyperclip ... in-python/

Code: Select all

# importing the library
import pyperclip as pc
text1 = "GeeksforGeeks"
# copying text to clipboard
pc.copy(text1)
# pasting the text from clipboard
text2 = pc.paste()
print(text2) 

В консоли Python в терминале работает,
а в консоли CudaText почему-то зависает!
на

Code: Select all

pc.copy(text1)
Почему?!!

(Пытался найти альтернативный способ прочитать буфер обмена в треде)
В основном коде плагина

Code: Select all

app_proc(PROC_GET_CLIP, "")
работает

Posted: 25.07.2023 15:24
by mix-7
Можно кратко вот еще по этим 2 вопросам:
def run(self):
def callBack(*args): - что это за функции?
В CudaText API - Free Pascal wiki
https://wiki.freepascal.org/CudaText_API
def run(self): только один раз упоминается в примере без комментария.

А callBack тоже нет подробного описания.
Это функция, которая может передаваться как параметр?
Правильно понял?

Posted: 25.07.2023 15:46
by main Alexey
def callBack - просто какая-то ф-ция из ваешго кода, она не относится к Куд АПИ.

def run - тоже не относится к АПИ. но run (именно с такой сигнатурой - def run(self)) - можно привязать к команде плагина в install.inf. любой метод с такой сигнатурой можно там же привязать.

Posted: 25.07.2023 20:39
by mix-7
Спасибо!


А по работе с буфером обмена в моем предпоследнем посте?
app_proc(PROC_GET_CLIP, "") в треде зависает
app_proc(PROC_ENUM_FONTS, "") в треде работает.
pyperclip не работает даже консоли CudaText

Отчего так?
Есть какой-то выход?
Искать еще функции для получения clipboard?

Posted: 26.07.2023 05:18
by main Alexey
не знаю почему... под Вин я смогу попробовать только через Н недель..

Posted: 26.07.2023 07:09
by mix-7
>
Я в Linux
Ubuntu 22.04
CudaText 1.196.0.0, linux-x86_64-gtk2, fpc 3.2.3

Видимо, какая-то неполная/кривая реализация Python в Lazarus?

Имеет ли смысл попробовать скопировать и попробовать мою заготовку плагина в чистой Куде?


> def callBack - просто какая-то ф-ция из ваешго кода, она не относится к Куд АПИ.
Неправильно сформулировал, сорри.

Про Callback я это имел в виду:
Callback parameter
Callback parameter is supported in several API functions: dlg_proc, timer_proc, menu_proc, button_proc etc. For all functions, "string form" of callback is supported. For most but not all functions, "callable form" is supported too.
Parameter can be in these forms:
https://wiki.freepascal.org/CudaText_AP ... _parameter

Имеется в виду функции или лямбда-функции, передаваемые в качестве параметра?


(Немного не могу воспринять термин "обратный вызов".
С чего так назвали?
Все время ассоциация с реакцией на события.)



> под Вин я смогу попробовать только через Н недель..

А в какой ОС работаете, если не секрет?

Posted: 26.07.2023 07:29
by main Alexey
окей, я в Кубунту 22.
взял пример из поста
https://synwrite.sourceforge.net/forums ... 608#p17608
и сделал плагин.
да, он выдает пустое окно примерно 200*100 и виснет. но в IDE я еще получаю exception - метод CheckSynchronize вызван не из главного треда.
не знаю что это.

Posted: 26.07.2023 07:32
by main Alexey
https://wiki.freepascal.org/CudaText_AP ... _parameter

Имеется в виду функции или лямбда-функции, передаваемые в качестве параметра?
да. некоторые АПИ вызовы требуют парамент "колбек". и вот вики и описывает как надо декларировать этот парам.

(Немного не могу воспринять термин "обратный вызов".
С чего так назвали?
Все время ассоциация с реакцией на события.)
по сути это и есть события. паскаль код дергает эти "колбеки" когда настает их время.

Posted: 26.07.2023 12:00
by mix-7
> метод CheckSynchronize вызван не из главного треда.

Пытался передавать из главной функции в тред параметром функцию с параметрами app_proc(PROC_GET_CLIP, "")
и без параметров app_proc:
thread = threading.Thread(target=clip_loop(app_proc(PROC_GET_CLIP, "")))
thread = threading.Thread(target=clip_loop(app_proc))

Виснет.

Posted: 26.07.2023 14:02
by main Alexey
тут дали подсказку:
https://github.com/Alexey-T/CudaText/is ... 1651584089