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

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

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


Автор: Jus, Отправлено:11:10 04-10-2006
Народ, подскажите как сделать выранивание(сдвиг) выделенного блока редактируемого текста (вправо/влево). Похоже стандартной возможности нет... а жаль Может есть готовы скрипт для этого?
Автор: dB6, Отправлено:12:57 04-10-2006
Jus

Цитата:
Народ, подскажите как сделать выранивание(сдвиг) выделенного блока редактируемого текста (вправо/влево).

Выделяем текст. Нажимаем Tab - вправо.
Shift+Tab - влево.
Можно так.

Добавлено:
Если 1 строка выделена - курсор должен быть вначале текста.
Если несколько строк выделено - то все равно где.
Автор: Jus, Отправлено:13:31 04-10-2006
dB6
Премного благодарен за подсказку!
Автор: vladvro, Отправлено:15:30 04-10-2006
mozers

Цитата:
Весь скрипт помещаешь в отдельный файл. В конце его не забудь добавить scite_OnUpdateUI(MyFunction), где MyFunction - имя твоей функции ...

замечание по работе этой функции:
ее нельзя (!) использовать в скриптах подключеных в качестве дополнения для лексера.
пример определения такого дополнения:
extension.$(file.patterns.html)=$(SciteDefaultHome)\tools\html_functions.lua
т.к. при этом происходит многократное добавление функции и последующий многократный ее вызов.
Автор: mozers, Отправлено:09:11 05-10-2006
vladvro
Цитата:
т.к. при этом происходит многократное добавление функции и последующий многократный ее вызов

Да, именно так будет если не позаботиться о удалении этой функции после ее использования. Такой пример есть в сборке Ru-Board (InsertSpecialChar.lua).
А вообще у меня была мысль подкорректировать этот скрипт (я про append_handler.lua) просто запретив добавление нового обработчика если его имя совпадает с уже имеющимся (тогда можно будет вообще не заботится об удалении), но что то не допетрил как это сделать.
Автор: LASC, Отправлено:09:15 05-10-2006
а какой нибуть скрипт для автоформата c-like языков есть?
Автор: vladvro, Отправлено:09:48 05-10-2006
mozers

Цитата:
Да, именно так будет если не позаботиться о удалении этой функции после ее использования.

далеко не всегда есть возможность удалять функцию после использования, например ее нет, если мы вешаем функцию на прерывание OnChar.

Цитата:
А вообще у меня была мысль подкорректировать этот скрипт (я про append_handler.lua) просто запретив добавление нового обработчика если его имя совпадает с уже имеющимся (тогда можно будет вообще не заботится об удалении), но что то не допетрил как это сделать.

угу правильная мысль, у меня она тоже возникла
самое интересное, что автора того скрипта она тоже посещала, и он ее реализовал, но (!) на вход подается не имя фунции а указатель, он и проверяется на уникальность, но он всякий раз новый, и эта проверка не спасает.
вобщем я пока что всех нюансов этой ситуации не разобрал, но попробую реализовать способ регистрации функции по имени.

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

Код:
old_OnChar = OnChar
function OnChar (c)
if old_OnChar then old_OnChar(c) end
...
end

Автор: unreal666, Отправлено:00:06 06-10-2006
Чего-то команда "Выбрать цвет" у меня не работает.
Выдает такое:

Код:
Сценарий:    C:\Program Files\Текстовые редакторы\SciTE\tools\ColorSet.js
Строка:    34
Символ:    1
Ошибка:    Класс не лицензирован для использования
Код:    80040112
Источник:     (null)

Версия файла COMCTL32.OCX - 6.0.80.22.

Если это из-за версии файла, то выложьте куда-нибудь нормальную версию.

------------
Еще.
Ошибка при установке SciTE Helper. При попытке регистрации (вручную или через setup.vbs) выскакивает окно:

Код:
Ошибка при вызове LoadLibrary("C:\Program Files\Текстовые редакторы\SciTE\tools\Helper\SciTE.dll") - Не найден указанный модуль.


Автор: dB6, Отправлено:14:40 06-10-2006
LASC

Цитата:
а какой нибуть скрипт для автоформата c-like языков есть?


Для этих целей можно юзать astyle.

Free. http://astyle.sourceforge.net/

Если надо пример подключения - пиши.
Автор: mozers, Отправлено:17:46 06-10-2006
unreal666
Цитата:
Ошибка: Класс не лицензирован для использования
Смотри в комментах тут

Цитата:
C:\Program Files\Текстовые редакторы\SciTE\tools\Helper\SciTE.dll") - Не найден указанный модуль
Очевидно виноваты русские символы в пути.
И зачем вы русские имена каталогам даете??? Сразу на кучу разных проблем нарываетесь (эта - далеко не единственная).
Или переименуй "Текстовые редакторы" в "Text Editors"
или скопируй SciTE.dll в каталог %WINDIR%\SYSTEM32 и зарегистрируй вручную, выполнив из ком.строки:
Код:
Regsvr32 SciTE.dll


Автор: unreal666, Отправлено:21:47 07-10-2006
mozers

Цитата:
Очевидно виноваты русские символы в пути.

Это тут ни причем. Он у меня даже из корня диска не хочет регистрироваться (из system32 тоже).

Цитата:
зарегистрируй вручную, выполнив из ком.строки:

Я для этого не использую командную строку. У меня на dll-км давно уже внесены пункты меню для регистрации и дерегистрации (в реестре добавлял).
Автор: mozers, Отправлено:16:25 08-10-2006
unreal666
Я так понял что с лицензией на COMCTL32.OCX ты разобрался?
Тогда по поводу регистрации SciTE.dll - возможно у тебя в системе отсутствует файлик msvbvm50.dll. Он имееется во всех виндах, и только в ХР SP2 гады мелкософтовцы его заменили на msvbvm60.dll ("гады" - потому что не добавили, а заменили, обеспечив тем самым неработоспособность многих прог, написанных на VB5). Найти и поставить его, конечно, не проблема, но зачем лишний раз напрягать пользователей?

Цитата:
У меня на dll-км давно уже внесены пункты меню для регистрации и дерегистрации (в реестре добавлял)
На OCX - еще понимаю, а на DLL?... Большинство никакой регистрации не требуют, поскольку являются обычными библиотеками...

vladvro
Цитата:
короче есть простое решение, на примере OnChar
Извини, но я чой то туплю... И как это работает? (Если можно - какой нить простенький практический пример)

ALL
Тут как то звучало пожелание о скрипте, чтоб двигал не одну строку, а несколько выделенных строк вверх/вниз. Ну вот я тут изобразил:
[more]
Код:
command.name.23.*=• Lines -> upwards
#~ command.23.*=dostring editor:LineTranspose() editor:LineUp()
command.23.*=dostring d=-1 dofile(props["SciteDefaultHome"].."\\tools\\LinesUpDown.lua")
command.mode.23.*=subsystem:lua,savebefore:no
command.shortcut.23.*=Ctrl+Up

command.name.24.*=• Lines -> downwards
#~ command.24.*=dostring editor:LineDown() editor:LineTranspose()
command.24.*=dostring d=1 dofile(props["SciteDefaultHome"].."\\tools\\LinesUpDown.lua")
command.mode.24.*=subsystem:lua,savebefore:no
command.shortcut.24.*=Ctrl+Down

LinesUpDown.lua

Код:
if editor:GetSelText() == "" then
local cur_line = editor:LineFromPosition(editor.CurrentPos)
local pos_start_cur_line = editor:PositionFromLine(cur_line)
local pos_end_cur_line = editor:PositionFromLine(cur_line + 1)
editor:SetSel(pos_start_cur_line, pos_end_cur_line)
end

local sel_start_line = editor:LineFromPosition(editor.SelectionStart)
local sel_end_line = editor:LineFromPosition(editor.SelectionEnd)

if (sel_start_line>0 and d==-1) or (sel_end_line<editor.LineCount and d==1) then
editor:BeginUndoAction()
if d==1 then
-- Down
editor:GotoLine(sel_end_line)
for i = sel_end_line-1, sel_start_line, -1 do
editor:LineTranspose()
editor:LineUp()
end
else
-- Up
editor:GotoLine(sel_start_line)
for i = sel_start_line, sel_end_line-1 do
editor:LineTranspose()
editor:LineDown()
end
end

local sel_start = editor:PositionFromLine(sel_start_line+d)
local sel_end = editor:PositionFromLine(sel_end_line+d)
editor:SetSel(sel_start,sel_end)
editor:EndUndoAction()
end
[/more]
Жду корректив и доработок (есть небольшие проблемы когда выделенные строки находятся в самом низу файла). Да и всю остальню конструкцию элегантной не назовешь...

Добавлено:
Добавлено:
Еще пара вопросов для знающих С++:
  • Почему то
    Код:
print(SCLEX_ASP,SCLEX_PHP)
возвращает nil
Это - баг SciTE? (С другими то лексерными константами - все путем).

  • Никто не решится добавить событие onMenuSelect ?
    Просто уже позарез надо.
    По просьбе dB6 cделал скрипт, для замены стандартной команды меню IDM_READONLY. Теперь и в статусной строке отображается режим EDIT или VIEW, и фон закладок с файлами, защищенными от редактирования подсвечивается... Удобно. НО. Это - отдельная команда меню Tools, одноименная с существующей. Причем, если пользователь выберет не ее, а команду "Только для чтения" из меню "Настройки", то никакого "кина" не будет
    Нехорошо все это И с командами "Перевести в верхний/нижний регистр" - такая же фигня
    Вот если бы был евент onMenuSelect куда можно было бы запузырить свой обработчик, заменив существующую команду своим скриптом - это было бы - идеально...

Автор: unreal666, Отправлено:06:19 09-10-2006

Цитата:
Я так понял что с лицензией на COMCTL32.OCX ты разобрался?

Я с ней даже не разбирался.
Я поставил Visual FoxPro 9 (мне нужно было) и вместе с ней установился этот COMCTL32.OCX.

Цитата:
На OCX - еще понимаю, а на DLL?... Большинство никакой регистрации не требуют, поскольку являются обычными библиотеками...

А мне так удобнее. У меня эти пункты меню и на ocx и на dll.

Цитата:
Тогда по поводу регистрации SciTE.dll - возможно у тебя в системе отсутствует файлик msvbvm50.dll.

Правильно думаешь. Как видно из моей подписи, у меня Win2k3 R2. Нашел у себя на винте этот файлик в папке маткада, скопировал в папку system32 и SciTE.dll нормально зарегался.
Сенкс.
Автор: vladvro, Отправлено:09:32 09-10-2006
mozers

Цитата:
И как это работает? (Если можно - какой нить простенький практический пример)

для перехвата события в скрипте подключаемом для конкретного лексера, например так:
extension.$(file.patterns.html)=$(SciteDefaultHome)\tools\html_functions.lua
рекомендуется использовать следующие описание функции например OnChar:

Код:
old_OnChar = OnChar
function OnChar (c)
-- вызов исходного обработчика если он был
if old_OnChar then old_OnChar(c) end
-- тело функции
if c == "=" then
local nStyle = editor.StyleAt[editor.CurrentPos - 2]
if nStyle == 3 or nStyle == 4 then
editor:InsertText(editor.CurrentPos, "\"\"")
editor:GotoPos(editor.CurrentPos + 1)
end
end
end



Цитата:
Почему то
Код:
print(SCLEX_ASP,SCLEX_PHP)
возвращает nil

цитата из исходников ядра scintilla:
SCLEX_ASP and SCLEX_PHP should not be used in new code: use SCLEX_HTML instead.
видимо выкинули их


Цитата:
Никто не решится добавить событие onMenuSelect ?

я собираюсь попробовать реализовать, но несколько иное событие:
onIMessage - перехват события в ядре scintilla, обработчиком которого является процедура:
sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam).
вероятно спорное решение, но перехватом onMenuSelect мы например не решим проблему с командами смены регистра в макросах, как впрочем и с любыми другими командами, которые мы захотим переопределить.

P.S.
а реализовывать onMenuSelect все равно прийдется, я как то сразу то не подумал что IDM_READONLY с ядру scintilla никакого отношения не имеет...
Автор: codewarlock1101, Отправлено:17:19 09-10-2006
Добрый день!
Скажите с почему в последней версии комбинации Ctrl+Tab и Ctrl+Shift+Tab поменялись местами(рулят по буферу файлов наоборот)??? Отвыкать очень хреново

Сорри... ступил... идею понял
Автор: mozers, Отправлено:18:18 09-10-2006
vladvro
Что то я не врублюсь, как твой вариант ликвидирует многократную загрузку обработчика. Имхо сколько раз вызвал твою конструкцию - столько дублей скриптов загрузилось...
Код:
-- вызов исходного обработчика если он был
после 1 запуска функция ниже и станет этим "исходным обработчиком"... ну и т.д.

Цитата:
SCLEX_ASP and SCLEX_PHP should not be used in new code: use SCLEX_HTML instead.
видимо выкинули их
Точно. Ты - прав. Совсем я забыл что нету отдельных лексеров ни на ASP ни на PHP.

Цитата:
но перехватом onMenuSelect мы например не решим проблему с командами смены регистра в макросах
Почему? Я то думал что событие onMenuSelect будет возникать не только при выборе пункта меню, но и при вызове этого пункта меню с помощью шортката. Т.е. правильнее ее было бы назвать OnRunIDM_COMMAND

Автор: Moon_aka_Sun, Отправлено:08:18 10-10-2006
mozers
Цитата:
Тут как то звучало пожелание о скрипте, чтоб двигал не одну строку, а несколько выделенных строк вверх/вниз.
Хм. Как альтернатива, можно использовать отметку строк (по Ctrl+F2) а потом Copy/Move их в одно место.

Ещё идея - несколько буферов (0-9 или a-z) и отдельные клавиши для Copy/Paste с параметром. (То, что М.Ф. сделал кольцо буферов я знаю, это немного не то.)

А вопрос вот такой - в меню Language есть Text, Наверное, настроенный на *.txt и т.п. Как бы сделать в простых текстовых файлах выделение цветом http и email адесов, и можно ещё, чисел, некоторых знаков препинания. Это сканер надо текстовый? Или есть уже какой-то подходящий? Не хочется копать, задача не очень важная, но может кто-то что-то знает про это?


Автор: vladvro, Отправлено:08:28 10-10-2006
mozers

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

а надо было просто проверить
дело в том, что скрипт для лексера загружается своим блоком видимости переменных, локальным относительно прежних, и когда мы покидаем его или он перезагружается, то все переменные откатываются к своему исходному состоянию.


Цитата:
но перехватом onMenuSelect мы например не решим проблему с командами смены регистра в макросах
Почему? Я то думал что событие onMenuSelect будет возникать не только при выборе пункта меню, но и при вызове этого пункта меню с помощью шортката. Т.е. правильнее ее было бы назвать OnRunIDM_COMMAND

правильнее назвать OnMenuCommand. т.к. в коде будет перехватываться работа функции MenuCommand. точнее я ее так и назвал и реализовал, код будет чуток по позже, хочу сперва доделать событие OnSendEditor, от перевого варианта я отказался, перекидываться событиями с ядром то еще занятие, но и со вторым вариантом есть серьезные проблемы, видимо прийдется фильтровать поток событий, скажем до списка макросных.
про меню верно, при вызове через шорткат будет вызываться функция MenuCommand, а вот из макроса - нет,
т.к. там записываются команды уже другого уровня, уровня самого редактора, ну или иначе говоря ядра scintilla. и отправляются они напрямую через вызов функции SendEditor.
и это еще не все проблемы с макросами, основная - это возникающая при переопределении внутренних функций путаница с тем, какие команды надо писать в макрос, а какие являются результатом работы переопределения. в результате надо это отслеживать и корректно обрабатывать.
Автор: HSolo, Отправлено:08:40 10-10-2006
Ребята здорово поработали за что вам большое спасибо.
Есть одна идейка, которую собственными силами реализовать вряд ли смогу, по крайней мере быстро. Очень хотелось бы чтобы меню TOOLS можно было конфигурить в подменю.
Когда очень много скриптов (которые конечно можно разделить separator'ом) зачастую все не влазит на экран, да и глаза разбегаются. Вот если бы можно было реализовать подменю все стало бы просто замечательно.
Автор: codewarlock1101, Отправлено:13:00 10-10-2006
Привет! Еще вопрос.
Будут ли ру-тим изменения наследоваться для Линух-версий... потому что други, которым ОЧЕНЬ понравился редактор сидят именно в нем...
Простой запуск с эмуляцие win32 нормально работает, но хочеца родной скомпиленый



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