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

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

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


Автор: codewarlock1101, Отправлено:10:26 09-11-2006
mozers

Цитата:
Неа. Не работает. Ты бы хоть проверил перед публикацией...

Я в шоке! Он - работает. И объясню почему.При перехвате IDM_MONOFONT вызывается функция смены шрифта, после которой посылается эта же IDM_MONOFONT (только в таком режиме чтобы не вызывался еще раз FontChange() и не было бесконечной рекурсии). При этом мы не возвращаем из перегруженной функции true, чтобы выполнилась реальная IDM_MONOFONT из ядра.
Короче:
1. Меняем шриф
2. IDM_MONOFONT
3. IDM_MONOFONT
Вызовы 2 и 3 взаимо поглощаемые - (то есть запуск этой функции 2 раза возвращает фонт в первоначальное состояние (которое было в момент (1) ), и так как при IDM_MONOFONT скайт запускает перерисовку мы видим изменения фонта!)

Цитата:
Единственное, что действительно принимается - это идея с nxt_font. Вот - действительно рабочий и проверенный вариант: Подробнее...

Твой рабочий и проверенный вариант - не работает, если открыт один файл! Ну не может скрипт переключить буфер, если файл один!


Добавлено:
Mozers! Багу может ты и прибил, только теперь фон назад не меняется когда из ReadOnly возвращаешься!
Автор: vladvro, Отправлено:11:47 09-11-2006
codewarlock1101 и всем

Цитата:
Если можешь - дай пожалуйста объяснения на примере.
1) Что значит на "выходе ожидают"???

согласен, неточная формулировка попробую переформулировать:

"SciTE на выходе от всех обработчиков кроме OnSendEditor ожидает булевское значение handled, и если оно равно true, то если в SciTE заложена дальнейшая обработка события - она не делается,
причем nil, которое возвращается по умолчанию, приравнивается к false,
в случае с OnSendEditor - SciTE на выходе ожидает текстовое значение, и если оно не NULL, то тогда событие не отправляется далее на обработку к ядру Scitilla, а возвращается полученый от обработчика результат,
причем нюанс нынешней реализации состоит в том, что в NULL превращается не только nil, но и булевские значения (false и true)"


пример стандартного обработчика:

Код:
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand (msg, source)
local result
-- вызов исходного обработчика если он был
if old_OnMenuCommand then result = old_OnMenuCommand(msg, source) end
if MyFunction() then return true end
return result
end

важно: мы возвращием true только, если нам требуется отменить стандартную реакцию SciTE на команду меню, иначе мы возвращаем то, что вернул исходный обработчик, либо nil, если его не было.

пример для OnSendEditor:

Код:
local old_OnSendEditor = OnSendEditor
function OnSendEditor (msg, wp, lp)
local result
-- вызов исходного обработчика если он был
if old_OnSendEditor then result = old_OnSendEditor (msg, wp, lp) end
if msg == SCI_UPPERCASE then
ChangeCase("U")
return ""
elseif msg == SCI_LOWERCASE then
ChangeCase("L")
return ""
end
return result
end

важно: для отмены стандартной функции замены, надо вернуть что-либо отличное от nil, true или false, например пустую строку.
Автор: codewarlock1101, Отправлено:12:07 09-11-2006
vladvro
Спасибо! Очень познавательно!
Еще несколько вопросов:
Допусти у нас два (или больше) своих обработчика на одну команду + стандартный обработчик SciTE.
1) Какая будет последовательность выполнения "наших"?
2) Схема, описанная тобой говорит о том, что ВСЕ "наши" обработчки отработают, и при этом, если хотя бы один из них вернет true то стандартный обработчик глушится, я правильно понял?
Автор: vladvro, Отправлено:12:14 09-11-2006
codewarlock1101

Цитата:
Вызовы 2 и 3 взаимо поглощаемые - (то есть запуск этой функции 2 раза возвращает фонт в первоначальное состояние (которое было в момент (1) ), и так как при IDM_MONOFONT скайт запускает перерисовку мы видим изменения фонта!)

проблема состоит в том, что помимо перерисовки, SciTE при этом еще и перезачитывает фонты из конфига (вызов функции ReadFontProperties)


Цитата:
Допусти у нас два (или больше) своих обработчика на одну команду + стандартный обработчик SciTE.
1) Какая будет последовательность выполнения "наших"?
2) Схема, описанная тобой говорит о том, что ВСЕ "наши" обработчки отработают, и при этом, если хотя бы один из них вернет true то стандартный обработчик глушится, я правильно понял?

1) "наши" будут выполнятся по типу: первым был загружен в редактор (первый в файле SciTEStartup.lua), первым и выполнится (хотя вызван будет последним, но в силу построения обратчика, первым отрабатывает исходный).
2) абсолютно правильно. только в каждом случае важно знать, что именно в SciTE заложенно в качестве стандартного обработчика.
Автор: codewarlock1101, Отправлено:12:38 09-11-2006
vladvro

Цитата:
проблема состоит в том, что помимо перерисовки, SciTE при этом еще и перезачитывает фонты из конфига (вызов функции ReadFontProperties)

Разве это пробелма? - это наоборот нам на руку, так как и надо перечитать фонты которые мы подменили.... Или я не прав?

Спасибо за ответы.
Автор: vladvro, Отправлено:13:23 09-11-2006
codewarlock1101

Цитата:
Разве это пробелма? - это наоборот нам на руку, так как и надо перечитать фонты которые мы подменили.... Или я не прав?

прав
точно, именно это нам и надо, согласен с твоим вариантом.
Автор: mozers, Отправлено:16:31 09-11-2006
codewarlock1101 vladvro
Если я вас правильно понял, то оба решения по подмене встроенных обработчиков своими скриптами вполне рабочие.
Более универсален вариант vladvro, но в рассматриваемом случае удобнее использовать вариант codewarlock1101.
Все правильно изложил?
Автор: vladvro, Отправлено:17:08 09-11-2006
mozers

Цитата:
Если я вас правильно понял, то оба решения по подмене встроенных обработчиков своими скриптами вполне рабочие.
Более универсален вариант vladvro, но в рассматриваемом случае удобнее использовать вариант codewarlock1101.
Все правильно изложил?

м... думаю что нет ты немного напутал. я писал правило как надо делать обработчики и что при этом надо учитывать, а не решение конкретной задачи. а вот ты и codewarlock1101
предлагали конкретное решение для смены шрифтов. так вот из этих решений более правильное предложил codewarlock1101, в чем я с ним и согласился
Автор: mozers, Отправлено:19:00 09-11-2006
vladvro Говоря, про твое решение я имел в виду это:
Код:
local old_OnEvent = OnEvent
function OnEvent (param1, param2)
    local result
    if old_OnEvent then result = old_OnEvent(param1, param2) end
        if My_Function() then return true end
    return result
end

Автор: vladvro, Отправлено:13:12 10-11-2006
всем
никогда не пользовал функционал сокращений (аббревиатур) в SciTE, а тут решил попробовать,
и первое что обнаружил - это то, что при вставке сокращения остается поле %SEL%, это так и задумывалось или это баг?
и второе - так и не понял, а как же можно задействовать это поле %SEL%?

mozers

Цитата:
Говоря, про твое решение я имел в виду это:
Код:
local old_OnEvent = OnEvent
function OnEvent (param1, param2)
local result
if old_OnEvent then result = old_OnEvent(param1, param2) end
if My_Function() then return true end
return result
end

я бы назвал это схемой, и мне кажется, что решение от codewarlock1101 вполне укладывается в эту схему,
либо я так и не понял, что же ты хотел сказать

Автор: codewarlock1101, Отправлено:14:14 10-11-2006
vladvro
задействовать можно так:
это в файле abbrev
++=%SEL%:=%SEL%+1

потом в скайте:
++privet

privet выделяешь (главная тонкость - чтобы после выделения курсор находился в начале (то есть надо выделять справа налево), жмешь раскрыть аббреаивтуру - и у тебя получается
privet:=privet+1.

А ты наверное аббревиатуру вставляешь через окошко - там этой функции нету... не помню кто делал.... В общем, мульки доступны только в режиме Ctrl+B (то бишь IDM_ABBREV) и не доступны в режиме Ctrl+Shift+R (IDM_INS_ABBREV)

Автор: vladvro, Отправлено:15:23 10-11-2006
codewarlock1101

Цитата:
privet выделяешь (главная тонкость - чтобы после выделения курсор находился в начале (то есть надо выделять справа налево), жмешь раскрыть аббреаивтуру - и у тебя получается
privet:=privet+1.

А ты наверное аббревиатуру вставляешь через окошко - там этой функции нету... не помню кто делал.... В общем, мульки доступны только в режиме Ctrl+B (то бишь IDM_ABBREV) и не доступны в режиме Ctrl+Shift+R (IDM_INS_ABBREV)

вот до этой "тонкости" я сам и не додумался, теперь понятно, спасибо
и конечно я сперва попробовал режим вставки (IDM_INS_ABBREV), и мне он показался даже удобнее...
а делал это mimir, а сейчас куда-то пропал, вобщем получается, что кто бы довел начатое до ума...

Автор: mozers, Отправлено:15:39 10-11-2006
Обновил сборку.
Исправлены все ошибки на которые тыкнули носом и которые нашел сам.
СПАСИБО codewarlock1101 и LEX1 за усовершенствованные варианты скриптов и всем примавшим участие за советы и подсказки

Обновил список Нерешенные задачи и вопросы
Благодаря усилиям наших программистов он стал значительно меньше
Может добавим пожеланий ?

vladvro codewarlock1101
Цитата:
доступны только в режиме Ctrl+B (то бишь IDM_ABBREV) и не доступны в режиме Ctrl+Shift+R (IDM_INS_ABBREV)
Да. Об этом в SciTE.Ru_kernel_changes написано. Дико раздражает, поскольку я Ctrl+B почти не пользуюсь (чаще - Ctrl+Shift+R)

Автор: codewarlock1101, Отправлено:16:51 10-11-2006
Если кто вдруг пользуется для работы TotalCommander'ом, то существует чудесный wlx-плагин, который в Lister'е раскрашивает фалы в соответствии с настройками скайта.
Плагин можно забрать тут:
http://wincmd.ru/plugring/SciLister.html

Он старенький, и у него маленькая бяка - он не знает параметр caret.line.back.alpha, поэтому отображает "как есть" caret.line.back. А это напрягает.
Например мои настройки:

caret.line.back=#0000FF
caret.line.back.alpha=15

кои в Скайте отображаются прияным, еле заметным фиолетовым в листере становятся ядовито-синим, что портит всю малину.
Поэтому на всякий случай даю лекарство:
Пропатчить файл SciLister.wlx (по указанному смещению заменить PLAT_WINNT):
[0x32238]=SCI_LISTER
После этого можно в SciteGlobal.properties написать (после оригинального caret.line.back):

caret.line.back=#0000FF
if SCI_LISTER
caret.line.back=#DCE6FF
endif
Это будет переопределять цвет для плагина
Автор: vladvro, Отправлено:17:08 10-11-2006
mozers

Цитата:
Об этом в SciTE.Ru_kernel_changes написано.

точно, написанно... надо будет внимательнее читать...

а "тонкость" с позицией курсора можно подправить, заменив на позицию начала выделения:
в файле SciTEBase.cxx меняем
    int currentPos = GetCaretInLine();
    int position = SendEditor(SCI_GETCURRENTPOS); // from the beginning
на
    int position = SendEditor(SCI_GETSELECTIONSTART); // from the beginning
    int line = SendEditor(SCI_LINEFROMPOSITION, position);
    int lineStart = SendEditor(SCI_POSITIONFROMLINE, line);
    int currentPos = position - lineStart;

Автор: codewarlock1101, Отправлено:17:36 10-11-2006
vladvro
а если ничего не выделено, совпадают ли эти величины (дожны совпадать, но лучше перестраховаться вопросом )?

SendEditor(SCI_GETCURRENTPOS)==SendEditor(SCI_GETSELECTIONSTART)

Если да - то это хорошо. В противном случае - нехорошо.
Автор: vladvro, Отправлено:19:42 10-11-2006
codewarlock1101

Цитата:
а если ничего не выделено, совпадают ли эти величины (дожны совпадать, но лучше перестраховаться вопросом )?

да они совпадают (проверено по коду)
Автор: mozers, Отправлено:01:51 11-11-2006
codewarlock1101
Цитата:
Если кто вдруг пользуется для работы TotalCommander'ом, то существует чудесный wlx-плагин

Честно говоря, автору руки бы отбить за этот плагин, да только он сгинул куда то насовсем... Не только курсор, а и шрифты плагин уродует. Почему - непонятно. А дело то - элементарное - вызвать SciTE из Тотала с указанием любых нужных параметров.
Я вот сляпал на скорую руку JS скрипт и вызываю его из Тотала по Alt+F3:
Код:
var filename = WScript.Arguments(0).replace(/\\/g,"\\\\");
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run('"G:\\Program Files\\SciTE\\SciTE.exe" -open:'+filename+' -property:user.shortcuts=Escape|IDM_QUIT| -property:save.recent=0 -property:save.session=0 -menucommand:416 -menucommand:408',1);
Вот только выделенная строчка значение user.shortcuts меняет (проверено), но шорткат почему то не работает

Автор: Linch, Отправлено:03:00 11-11-2006
Нашел шрифт для себя удобный называется Triskweline и пытаюсь заменить шрифт тот что в сборке на него. Меняю тут:

Код:

# Вторая подборка шрифтов - proportional (заменяет 1й набор после нажатия на Ctrl+F11)
font.1.base=font:Triskweline,size:10
font.1.small=font:Triskweline,size:10
font.1.comment=font:Triskweline,size:9

Но почему то он отображается не так как должен, может я что то не так делаю?
http://www.netalive.org/tinkering/triskweline/shot.gif - примерно вот так вот он должен отображаться.
Автор: unreal666, Отправлено:06:26 11-11-2006
Linch

Цитата:
Но почему то он отображается не так как должен,
...
примерно вот так вот он должен отображаться.

А как отображается ?


Добавлено:
Не поделишься этим шрифтом ?



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