сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Архив SciTE-форума


Автор: unreal666, Отправлено:12:55 20-09-2006
mozers

Цитата:
Я вообще думал что сам догадаешся...

Я вообще предполагал, что нужно создавать какую-то переменную, связанную с событиями. Но я не знаю, какие события вообще есть в Скайте.
Где взять список этих стандартных событий?

Еще вопрос
Где устанавливается максимальная длина строки состояния? А то у меня уже не влазит в строку состояния всё нужное мне.

И надо как-то поправить исходники Скайта, что при поиска русских слов он искал без учета регистра.

mozers
Сделал все как ты написал. Нифига не показывает текущий лексер. Просто пустые [] выводятся.

ЗЫ. Функцию OnUpdateUI() тоже добавил в SciTEStartup.lua.

Автор: mozers, Отправлено:13:19 20-09-2006
Билин! Какой Moon_aka_Sun хитрый! Он сделал оказывается, то, чего я так добивался от Нейла и его отказ вынудил меня написать скрипт для автодополнения!
Его SciTE позволяет использовать точку в качестве символа запускающего автодополнение! Таааак... Интересно... Копаем дальше... Как ты это сделал?....

Автор: gansA, Отправлено:13:21 20-09-2006
mozers

Цитата:
А со мной поделился кодом Мишель Форал. Теперь из встроенного LUA можно выполнять команды вида scite.MenuCommand(IDM_WHATEVER)

Вот это действительно мощная вещь ))))
Тока где применять её практически хз , можно пару примеров.


Автор: mozers, Отправлено:13:46 20-09-2006
unreal666

Цитата:
Где взять список этих стандартных событий?
\SciTE\help\SciTEExtension.html

Цитата:
Еще вопрос
Где устанавливается максимальная длина строки состояния?
Это не вопрос, а пожелание (я так же присоединяюсь) для наших программистов
Можно, конечно, писать не в statusbar.text.1 а в statusbar.text.2 или в другие, но как то кликать по статусбару мне обломно

Цитата:
Нифига не показывает текущий лексер
Все должно работать. Что то ты не так сделал. Вставь в OnUpdateUI че нить типа print("test") и погляди. Потом замени на props["lexer.name"]=test . Ну и т.д.... У меня - работает - значит и у тебя будет.


Добавлено:
gansA
Даже не знаю... (С новыми идеями - вообще туго). Мне это понадобилось для того чтобы автоматизировать переключение раскраски С++ со стандартной на ту классическую, что сделал mimir. Как выяснилось, добавление строчки import languages\cpp_style_classic_ ничего не дает - надо обязательно сохранить измененный файл. Как??? Сейчас - запросто:
Код:
scite.MenuCommand(106)


Автор: unreal666, Отправлено:14:12 20-09-2006
mozers
Нашел, где была проблема. Просто оказывается у меня уже была такая функция, а я создал такую же в начале файла.
Перенес props["lexer.name"] = GetLexerName() в существующую функцию и все стало ОК.
Сенкс.
Автор: Jus, Отправлено:15:44 20-09-2006
mozers
calltip.pyton.parameters.start= (
autocomplete.pyton.start.characters=.
Установленны уже изначально - вот как раз то когда вставляешь точку в код Питона список автодополнения не появляется, а если его принудетельно вызвать то этот список явно не полный...
Прошу прощения, а как отключить скрипт с алгоритмом автозаполнения?
Автор: mozers, Отправлено:15:58 20-09-2006
Jus
Я же выше написал, что дело - не в этом! Просто Moon_aka_Sun правил код чтобы точка срабатывала! В оригинале она не работает или работает только со скриптом (который надо маленько настроить).
Тот список, что появляется по Ctrl+Enter не зависит ни от скрипта ни от кода (только от api-файла)
Вообще то я подключил python.api от Moon_aka_Sun (он действительно значительно полнее). И теперь у меня по Crll+Enter возникает классический список автодополнения, а при записи вида operator. после нажатия на точку - срабатывает скрипт и возникает список свойств/методов operator.

Добавлено:
Добил список Нерешенные задачи и вопросы.
Вообще то если бы в меню Language (Lexer) ставились галочки при выборе пункта, то вопроса unreal666 могло бы и не быть...

Автор: Moon_aka_Sun, Отправлено:19:51 20-09-2006
я написал:

Цитата:
(про вызов ехе без создания окна) Или Луу саму модифицировать
Оказалось проще всего. Сделал os.execute через CreateProcess и теперь у него три параметра - cmd_line, start_path, flags. Естественно, для совместимости можно не указыать второй и третий параметры. В flags можно, напрмер, написать 134217728, что есть 0x08000000 (Луа 5.0.2 не понимает хекс) или, по-человечески, CREATE_NO_WINDOW (см. документацию по CreateProcess). Будет в следующем билде

mozers написал:

Цитата:
Как
Хм. Скорее всего, не знаю. Я в этом не копался. Может М.Форал что-то менял, я у него брал некоторые изменения. Или ещё кто. А разве точка раньше не работала?

Я помню, что раньше беда с числами была. Набираешь 1. и можно уходить за кофе - SciTE собирал дополнение со всего python.api, который был у меня под 1.5 мегабайта. Сейчас - лучше: 1) на числа автодополнение не реагирует, 2) разумно всё-таки разбить питоновский api на части, которыми действительно пользуешься и части, которые представляют чисто академический интерес.


Цитата:
Как бы увеличить допустимую длину строки в параметре
Очень похоже, что это ограничения (или скорее, умолчания) Виндовс.

В месте создания статусбара он "делится" на одну часть о четырёх тысячах пикселей:
    ::SendMessage(reinterpret_cast<HWND>(wStatusBar.GetID()),
     SB_SETPARTS, 1,
     reinterpret_cast<LPARAM>(widths)); // тут { 4000 }

SciTE просто берёт, что ему дают (s) и передаёт дальше:
    ::SendMessage(reinterpret_cast<HWND>(wStatusBar.GetID()),
     SB_SETTEXT, 0, reinterpret_cast<LPARAM>(s));

3/4 ширины окна, если не больше, отданы под сообщение.

Другое дело, что можно было бы переключение статусбара на клавишу навесить - надо обработку NM_CLICK в SciTEWinBar.cxx превратить в функцию, добавить IDM_команду и т.д. и т.п.

Автор: mozers, Отправлено:22:11 20-09-2006
Moon_aka_Sun
Цитата:
Сделал os.execute через CreateProcess
Вах, молодец! Интересно, а на nix-ах это будет работать?

Цитата:
А разве точка раньше не работала?
А ты попробуй (только чтобы всплывающая подсказка при этом не пропала) У меня - так и не получилось. Вот написал скрипт - теперь радуюсь - родное автодополнение как и раньше по ctrl+Enter работает, а мое врубается автоматом как поставишь точку или двоеточие, причем выводит не всю конструкцию как родное, а как путные редакторы - только символы после точки. Попробуй - понравится
Кстати, подключив твой python.api сразу маленькую ошибочку в скрипте выявил.
Ща все путем - автодополнение и вплывающая подсказка работают как часы

Цитата:
Очень похоже, что это ограничения (или скорее, умолчания) Виндовс
Может и так Предельное число символов - где то как раз 256.

Цитата:
можно было бы переключение статусбара на клавишу навесить
Нахрена? Если мышой лень тыкать? Имхо - не стоит. Лучше подумать о том так ли уж необходима вся представленная инфа именно на 1й статусной строке. Может проще перенести ее на следующую?
А в случае с unreal666 идеальным решением было бы проставление галок в меню напротив выбранного лексера.


Добавлено:
Вопрос к знатокам LUA
Есть таблица со значениями, я ее отсортировал
Код:
table.sort(my_table)
как теперь мне из нее удалить все повторяющиеся строки, чтобы остались только уникальные? Можно как нить 1 оператором это сделать? (а то чето у меня очень громоздко получается)
Автор: Moon_aka_Sun, Отправлено:23:12 20-09-2006
mozers

Цитата:
Интересно, а на nix-ах это будет работать?
Нет, конечно. Там что-то другое должно быть. Я оттуда только fork знаю А, вспомнил, там spawn* и exec* есть. Но cmd.exe они не запускают. В общем, там всё по-другому. Может им и старого os.execute хватало.


Цитата:
Лучше подумать о том так ли уж необходима вся представленная инфа именно на 1й статусной строке. Может проще перенести ее на следующую?
У меня две строки. Вполне счастлив. Это я так, для поддержания беседы написал


Цитата:
автодополнение
Автодополнения я сейчас как следует не проверял. Помню, что в старом (1.68) почему-то не делались многострочные подсказки (но Форал теперь как-то лихо там всё обошёл). Что-то я ещё делал для посказок для констант и модулей, но всё пропало вместе со старым диском.


Автор: mozers, Отправлено:00:21 21-09-2006

Цитата:
Нет, конечно. Там что-то другое должно быть

тогда может лучше вместо новой os.execute сделать новый метод типа os.run ? (а то нас люниксоиды побъют).

Цитата:
Автодополнения я сейчас как следует не проверял. Помню, что в старом (1.68) почему-то не делались многострочные подсказки (но Форал теперь как-то лихо там всё обошёл).
Я - про раскрывающийся список с автодополнением, а ты - про вплывающие подсказки!
А Форал действительно поступил элементарно просто - включил в список символов разрешенных в тексте подсказки \n и все

Ща все таки собрался и доделал SciTE.Helper (COM-сервер для управления SciTE).
Добавил всего один метод - Send. Смысл его в том что он с помощью SciTE Director Interface посылает Скайту команду (их достаточно много) и читает полученный результат. (Подробности - в файле SciTEDirector.html в дистрибутиве Скайта). С отсылкой проблем нет - все отправляется и послушно выполняется подопытным Скайтом. С получаемыми от Скайта - данными - такая комедия...
Ща пробую... Смеюсь и плачу...
Если кто хочет посмеятся (а еще лучше истолковать результат) - выложу
Автор: vladvro, Отправлено:09:48 21-09-2006
mozers

Цитата:
Во-первых - поздравляю с регистрацией!

Ага, спасиб, только правильние было бы поздравлять с первым сообщением, зарегистрировался я (как сам с удивлением выяснил!) с полгода назад

Цитата:
Может быть тебя заинтересуют какие то из еще нерешенных вопросов ? (в шапке)

Может, особенно если пересекутся с моими пожеланиями в расширении функционала

Цитата:
А насчет макросов я, честно говоря, до конца не въехал...
Где же они хранятся? С именами - ясно, а сами команды? Можно ли их выудить из памяти и записать в файл?

Хранятся в глобальной переменной glb_macros_table в виде таблицы.
Извлекаются без проблем, предлагаю вашему вниманию функции для извлечения из памяти в текущий буфер (MacroFillToBuffer) и загрузку из выделенного текста (MacroLoadFromSelection),

Код:
function MacroFillToBuffer ()
for i,macro in glb_macros_table do
editor:BeginUndoAction()
editor:append("\n--- record"..i.." ---\n")
for _,val in macro do
local c,lp,wp = unpack(val)
editor:append(c..";"..wp..";"..lp.."\n")
end
editor:EndUndoAction()
end
end

function MacroLoadFromSelection ()
local macro = {}
local text = editor:GetSelText().."\n"
for str in string.gfind(text, "([^\n]*)[\n]") do
if string.sub(str, 1, 3) == "---" then
MacroAddToList(macro)
macro = {}
else
for c,wp,lp in string.gfind(str, "(%d+);(%d+);(.*)") do
table.insert(macro, {c,lp,wp})
end
end
end
MacroAddToList(macro)
end

function MacroAddToList (macro)
if table.getn(macro) > 0 then
table.insert(glb_macros_table, 1, macro)
while table.getn(glb_macros_table) > MAX_MACRO_RECORDS do
table.remove(glb_macros_table)
end
end
end


Можно сделать текстовое представление более читаемым, если добавить преобразование кода в название функции.
Думаю что я сделаю это в ближайшее время и выложу обновление на сайт.
Автор: mozers, Отправлено:14:31 21-09-2006
vladvro
Цитата:
функции для извлечения из памяти в текущий буфер (MacroFillToBuffer) и загрузку из выделенного текста (MacroLoadFromSelection),
Круть! Работает
Только с порядком как то нелогично. Последний записанный макрос получает 1 номер. Первый - последний. При добавлении - то же... Поправить бы...

Цитата:
Можно сделать текстовое представление более читаемым, если добавить преобразование кода в название функции.
Вообще - мечта
Записал нужную последовательность действий, маленько отредактировал, заменив конкретные буквы и цифры на переменные, добавил цикл по условию - вот и готово очередное средство автоматизации - запускай где хошь и когда хошь только входные параметры меняй


Автор: St_MPA3b, Отправлено:22:47 21-09-2006
Отличная прога

А вот оболочка для настроек: http://sourceforge.net/projects/tsct/

Добавлено:
Даже так
http://sourceforge.net/project/showfiles.php?group_id=152041&package_id=169261
Автор: Jus, Отправлено:09:04 22-09-2006
mozers

Цитата:
Кстати, подключив твой python.api сразу маленькую ошибочку в скрипте выявил.

Обновленный скрипт где можно взять? или подскажи где и что поправить.

Скрипт gen_python_api.py для генерации python.api можно скачать тут:
http://www.scintilla.org/gen_python_api.zip
http://scintilla.sourceforge.net/gen_python_api.zip
Автор: vladvro, Отправлено:13:29 22-09-2006
mozers

Цитата:
Только с порядком как то нелогично. Последний записанный макрос получает 1 номер. Первый - последний. При добавлении - то же... Поправить бы...

Согласен с порядком не логично получилось
В новой версии порядок идет четко по возрастающей, можно выбрать куда в списке будут добавлятся новые записанные макросы, за это отвечает параметр MACRO_LIST_NEW_RECORDED_POS
кроме того при загрузке макросов считываются и их имена, можно задать любое состоящее из букв, цифр и подчерка.
Новая версия выложена взамен старой:
http://scite.ruteam.ru/scite/realizaciya-zapisi-makrosov-s-pomoschyu-lua


Цитата:
Записал нужную последовательность действий, маленько отредактировал, заменив конкретные буквы и цифры на переменные, добавил цикл по условию - вот и готово очередное средство автоматизации - запускай где хошь и когда хошь только входные параметры меняй

Сперва я такую возможность даже не рассматривал, макросы на это не расчитаны, там нет управляющих конструкций (циклы, условия), да на мой взгляд и не особо нужно, всегда же можно написать функцию на Луа.
Но посмотрев на то, что получается в тектовом представлении макроса, решил что можно формировать и Луа скрипт, который можно уже использовать для написания своих функций, правда понятно что обратно в макрос это уже не загрузить
Автор: Grisper, Отправлено:16:05 22-09-2006
Многострочные подсказки в SciTe:
\scite\src\SciTEBase.cxx
находим
SendEditorString(SCI_CALLTIPSHOW, lastPosCallTip - currentCallTipWord.length(), functionDefinition.c_str());
вставляем перед ней
functionDefinition.substitute("\\n", "\n");
всё.

идея Форала...
пересобрал бы кто .RU сборку с этой фичей....
Автор: mozers, Отправлено:17:27 22-09-2006
Jus
Цитата:
Обновленный скрипт где можно взять? или подскажи где и что поправить.

Код:
local end_str = string.find(str_method,'[^a-zA-Z_]')
подчеркивание добавил
в python_.properties (только исправленные строки):
Код:
# Символы, после ввода которых возникает подсказка
calltip.python.parameters.start= (
# Символы - разделители параметров
calltip.python.parameters.separators=,

# Символ, после которого включается автодополнение
autocomplete.python.start.characters=.

# Символы, из которых строятся операторы языка (используется для всплывающей подсказки)
calltip.python.word.characters=$(chars.alpha)$(chars.numeric)_-.

vladvro
Качаю...

Grisper
В новой сборке будет столько фич, что эта среди них - затеряется
Потом, поскольку перенос надо вставлять вручную, то надо все api файлы ревизировать и вставлять \n где это необходимо...
Не люблю обещать (а вдруг в выходные загрузят?) но постаряюсь на следующей неделе выложить новую сборку...
Автор: mozers, Отправлено:13:22 25-09-2006
Ядро 1.71 .17Ru
Source: SciTE_171_17Ru_src.rar [185kB] (только измененные файлы)
EXE + DLL: SciTE_171_17Ru.rar [375kB]
Список всех доработок: Version_Changes.txt

Компилировал в Visual Studio .NET 2003. Размер EXE и DLL получился поменьше и тот хитрый скрипт о котором я уже говорил не вызывает теперь крушения SciTE

Со сборкой ситуация хуже. Слишком много чего хотелось бы исправить и добавить. Не успел пока оформить все по человечески...

Автор: Grisper, Отправлено:16:00 25-09-2006
билд 1.71.17

Код:

keywordclass2.lua4=word1 \
word2 word3 \
<пустая строка>
word4 \
word5

после word3 всё отваливается. с предыдущим работает нормально



1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 / 23 / 24 / 25 / 26 / 27 / 28 / 29 / 30 / 31 / 32 / 33 / 34 / 35 / 36 / 37 / 38 / 39 / 40 / 41 / 42 / 43 / 44 / 45 / 46 / 47 / 48 / 49 / 50 / 51 / 52 / 53 / 54 / 55 / 56 / 57 / 58 / 59 / 60 / 61 / 62 / 63 / 64 / 65 / 66 / 67 / 68 / 69 / 70 / 71 / 72 / 73 / 74 / 75 / 76 / 77 / 78 / 79 / 80 / 81 / 82 / 83 / 84 / 85 / 86 / 87 / 88 / 89 / 90 / 91 / 92 / 93 / 94 / 95 / 96 / 97 / 98 / 99 / 100 / 101 / 102 / 103 / 104 / 105 / 106 / 107 / 108 / 109 / 110 / 111 / 112 / 113 / 114 / 115 / 116 / 117 / 118 / 119 / 120 / 121 / 122 / 123 / 124 / 125 / 126 / 127 / 128 / 129 / 130 / 131 / 132 / 133 / 134 / 135 / 136 / 137 / 138 / 139 / 140 / 141 / 142 / 143 / 144 / 145 / 146 / 147 / 148 / 149 / 150 / 151 / 152 / 153 / 154 / 155 / 156 / 157 / 158 / 159 / 160 / 161 / 162 / 163 / 164 / 165 / 166 / 167 / 168 / 169 / 170 / 171 / 172 / 173 / 174 / 175 / 176 / 177 / 178 / 179 / 180 / 181 / 182 / 183 / 184 / 185 / 186 / 187 / 188 / 189 / 190 / 191 / 192 / 193 / 194 / 195 / 196 / 197 / 198 / 199 / 200 / 201 / 202 / 203 / 204 / 205 / 206 / 207 / 208 / 209 / 210 / 211 / 212 / 213 /
SciTE © 2004 - 2011