(CudaText) Использование complete_alt в плагине Python

Alex842
Posts: 40
Joined: 25.10.2015 09:43

(CudaText) Использование complete_alt в плагине Python

Post by Alex842 »

Алексей, добрый день.

Можете привести пример использования "complete_alt" для вставки сниппета?
Хочу сделать кнопку, по которой бы выделенный текст обрамлялся тэгами и курсор ставился в определенное место, напр.:

Code: Select all

"{color=${0:#FFFFFF}}"+"sample text"+"{/color}"
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

ed.complete
нашел в Н плагинах-
Python Intel
HTML Completion
....

ed.complete_alt
нашел в 1 плаге-
Intext Complete
https://github.com/kvichans/cuda_intext ... nt_cmpl.py
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

Для вставки достаточно и этого
text read/write
http://wiki.freepascal.org/CudaText_API ... ad.2Fwrite
Alex842
Posts: 40
Joined: 25.10.2015 09:43

Post by Alex842 »

Спасибо за ответ. Нашёл решение, которое меня устроила, в плагине html_ops в файле "ops.py".

Code: Select all

    def font_color(self):
        s = ed.get_text_sel() 
        carets = ed.get_carets()
        if len(carets)!=1: return msg_status('Need single caret')

        x1, y1, x2, y2 = carets[0]
        
        if (y1, x1)>(y2, x2):
            x1, y1, x2, y2 = x2, y2, x1, y1

        text = '<%s>%s</%s>' % ("color=#FFFFFF", s, "color")
        ed.replace(x1, y1, x2, y2, text)
        ed.set_caret(x1+14, y1, x1+7, y1, CARET_SET_ONE)
        sel = ed.get_text_sel()
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

надеюсь, покажите плагин когда будет готово.
Alex842
Posts: 40
Joined: 25.10.2015 09:43

Post by Alex842 »

Это не плагин. Есть такая бесплатная программа RenPy для создание визуальных новелл. Вся игра пишется в редакторе на питоне + свои функции, методы и классы. Меня не устраивают идущие в комплекте редакторы кода. Хочу внедрить Cudatext. Уже сделал лексер, некоторые примеры кода закинул в сниппеты, написал плагин для обрамления выделенного текста в часто используемые тэги и повесил их на кнопки. И теперь не знаю, как лучше писать функции.
Встроенное автодополнение не очень устраивает. Оно удобно для небольших функций. Например, не хватает табстопов или хотя бы первоначальной установки курсора в нужное место. Но при этом оно нагляднее, чем сниппеты. Сразу можно понять тип записи+подсказку прочитать.
Сейчас у меня функции, где не нужны табстопы "загнаны" в автодополнение, а где много параметров - в сниппеты. Это не слишком удобно. Приходится, то ctrl-enter жать, то на tab.
В идеале мне хотелось бы в сниппетах иметь большие фрагменты кода, напр., код какой-нибудь функции, чтобы можно было легко из проекта в проект её переносить, а в автодополнении уже саму функцию с возможностью подстановки параметров.
Вот и решил разобраться с complete_alt. Возможно, что-то получится. Но пока не очень...
Делаю так:

Code: Select all

def on_complete(self, ed_self):
       txt = 'sample1\tTest\tFirst file\nsample2\tTest\tSecond'
       ed.complete_alt(txt,'sam',3,selected=0)
       return True 
В результате по ctrl-enter появляется окно с двумя строками, но при нажатии на любую из строк ничего не вставляется.
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

не вставилось потому что complete_alt сам не вставляет--
on_snippet(self, ed_self, snippet_id, snippet_text): Called when user chooses snippet to insert, in ed.complete_alt() call.
этот on_snippet еще надо как евент регнуть в install.inf.

сам вставляет только ed.complete()
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

еще тут описано
Function gets None and listbox stays open. When user chooses listbox item, event on_snippet is called, with params:

Param "snippet_id": value from complete_alt() call; on_snippet should handle only known value of snippet_id.
Param "snippet_text": text of selected item (last column).
Alex842
Posts: 40
Joined: 25.10.2015 09:43

Post by Alex842 »

Зарегистрировал . Все равно не работает. Не могу понять в чём. Алексей, а можете сделать работающий пример?
У меня сейчас в install.inf

Code: Select all

[info]
title=MySample
desc=Some description
type=cudatext-plugin
subdir=cuda_sample1
homepage=

[item1]
section=events
events=on_complete,on_snippet
В плагине:

Code: Select all

import os
from cudatext import *

class Command:

    def on_complete(self, ed_self):
        txt = 'sample1\tTest\t{color=${1:#ffffff}}{/color} file\nsample2\tTest\tSecond'
        ed.complete_alt(txt,'sam',3,selected=0)
        return True 
        
    def on_snippet(self, ed_self, snippet_id, snippet_text):
        return
Alexey
Posts: 1633
Joined: 05.10.2012 22:10

Post by Alexey »

Fixed

Code: Select all

import os
from cudatext import *

MYID='dddd'

class Command:

    def on_complete(self, ed_self):
        txt = 'sample1\tTest\t{color=${1:#ffffff}}{/color} file\nsample2\tTest\tSecond'
        ed.complete_alt(txt,MYID,3,selected=0)
        return True
       
    def on_snippet(self, ed_self, snippet_id, snippet_text):
        if snippet_id!=MYID: return
        carets=ed.get_carets()
        x, y, x1, y1 = carets[0]
        ed.insert(x, y, snippet_text)
        
        
Post Reply