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

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

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


Автор: codewarlock1101, Отправлено:11:08 26-10-2006
Небольшое дополнение... Теперь выдеделние внутри строки не снимается, когда перемещаешь одну строку.


Код:

local sel_start_line = editor:LineFromPosition(editor.SelectionStart)
local sel_end_line = editor:LineFromPosition(editor.SelectionEnd)
local slend=editor:GetLineSelEndPosition(sel_end_line)
local slend2=editor:GetLineSelEndPosition(sel_end_line-1)
local nap=0
local sel_txt=editor:GetSelText()
if slend==slend2 then
nap=1
end
if gorizont==1 then
for i = sel_start_line, sel_end_line-nap do
editor.LineIndentation [i]=editor.LineIndentation [i]+-1*d
end
else
if (sel_txt == "") or (sel_start_line==sel_end_line) then
local xsel_s=editor.SelectionStart-editor:PositionFromLine(sel_start_line)
local xsel_e=editor.SelectionEnd-editor:PositionFromLine(sel_end_line)

if d==1 then
if sel_end_line-nap<editor.LineCount-1 then
editor:LineDown()
editor:LineTranspose()
else
d=0
end
else
editor:LineTranspose()
editor:LineUp()
end
if (sel_txt ~= "") then
xsel_s = editor:PositionFromLine(sel_start_line+d)+xsel_s
xsel_e = xsel_s + string.len(sel_txt)
editor:SetSel(xsel_s,xsel_e)
end
else

if (sel_start_line>0 and d==-1) or (sel_end_line-nap<editor.LineCount-1 and d==1) then
editor:BeginUndoAction()
if d==1 then
-- Down
editor:GotoLine(sel_end_line)
for i = sel_end_line-nap, 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-nap do
editor:LineTranspose()
editor:LineDown()
end
end
local sel_start = editor:PositionFromLine(sel_start_line+d)
nap=math.abs(nap-1)
local sel_end = editor:PositionFromLine(sel_end_line+d+nap)
editor:SetSel(sel_start,sel_end)
editor:EndUndoAction()
end
end
end



Вопрос Всем!
Как думаете, нужно ли реализовать перемещение кусочка текста (то есть выделил кусочек - только кусочек и двигаешь)... Наработка уже есть, вот только на счет ее пользы сомневаюсь.... Ваши предложения!
Автор: vladvro, Отправлено:17:55 26-10-2006
codewarlock1101

Цитата:
Как думаете, нужно ли реализовать перемещение кусочка текста (то есть выделил кусочек - только кусочек и двигаешь)...

теоретически - вещь не лишняя, единственно, я рекомендовал бы реализовывать отдельным алгоритмом, что бы это не повлекло за собой чрезмерное усложнение кода и появления неизбежных багов в уже созданном.
Автор: codewarlock1101, Отправлено:18:46 26-10-2006
vladvro
Багов нет! И код не особо усложняется...
Автор: vladvro, Отправлено:09:13 27-10-2006
codewarlock1101

Цитата:
Багов нет! И код не особо усложняется...

гуд, а этот кусочек двигается по всем направлениям, вправо, влево, вверх, вниз?
Автор: codewarlock1101, Отправлено:11:15 27-10-2006
vladvro
Влево-вправо (от вверх-вниз отказался, потому что меняет "концепцию" скрипта - удобство по перемещению строк - потому что когда пытешься перетащить кусок через пустую строку он сам становится строкой и как кусок перемещаться не хочет, да и вообще - вырезать/вставить для перемещения на дальние дистанции намного удобнее и привычнее).
А вот таскать в одной строке влево вправо - это удобно....

Код:

--[[***********************************************************************************************
* PIE_MOVE_TYPE
* 0 Не премещать
* 1 Для цикличного перемещения по соседним строкам
* 2 Для цикличного перемещения по одной строке
* 3 блокировка цикличности
*************************************************************************************************]]
local PIE_MOVE_TYPE=2
local sel_start_line = editor:LineFromPosition(editor.SelectionStart)
local sel_end_line = editor:LineFromPosition(editor.SelectionEnd)
local slend=editor:GetLineSelEndPosition(sel_end_line)
local slend2=editor:GetLineSelEndPosition(sel_end_line-1)
local sel_txt=editor:GetSelText()
local nap=0

if slend==slend2 then
nap=1
end
local anti_nap=math.abs(nap-1)
if gorizont==1 then
if PIE_MOVE_TYPE==0 or (sel_start_line~=sel_end_line or sel_txt=="" or (editor:PositionFromLine(sel_start_line)==editor.SelectionStart and editor.LineEndPosition[sel_end_line]==editor.SelectionEnd)) then
for i = sel_start_line, sel_end_line-nap do
editor.LineIndentation [i]=editor.LineIndentation [i]+d*(-1)
end
else
if editor.SelectionStart~=0 or d==-1 then
editor:ReplaceSel('')
if editor.SelectionStart==editor:PositionFromLine(sel_start_line) and d==1 then
if PIE_MOVE_TYPE==1 then editor:CharLeft() end
if PIE_MOVE_TYPE==1 or PIE_MOVE_TYPE==3 then editor.SelectionStart=editor.SelectionStart+d end
if PIE_MOVE_TYPE==2 then editor.SelectionStart=editor.LineEndPosition[sel_end_line]+d end
end
if editor.SelectionStart==editor.LineEndPosition[sel_start_line] and d==-1 then
if PIE_MOVE_TYPE==1 then editor:CharRight() end
if PIE_MOVE_TYPE==1 or PIE_MOVE_TYPE==3 then editor.SelectionStart=editor.SelectionStart+d end
if PIE_MOVE_TYPE==2 then editor.SelectionStart=editor:PositionFromLine(sel_start_line)+d end
end
editor.SelectionStart=editor.SelectionStart+(-1)*d
local strt=editor.SelectionStart
editor:InsertText(editor.SelectionStart, sel_txt)
if d==1 then
editor.SelectionEnd=editor.SelectionStart-1
editor.SelectionStart=editor.SelectionStart-string.len(sel_txt)
else
editor.SelectionStart=strt

editor.SelectionEnd=editor.SelectionStart+string.len(sel_txt)
end
end
end
else
if (sel_txt == "") or (sel_start_line==sel_end_line) then
local xsel_s=editor.SelectionStart-editor:PositionFromLine(sel_start_line)
local xsel_e=editor.SelectionEnd-editor:PositionFromLine(sel_end_line)
if d==1 then
if sel_end_line-nap<editor.LineCount-1 then
editor:LineDown()
editor:LineTranspose()
else
d=0
end
else
editor:LineTranspose()
editor:LineUp()
end
if (sel_txt ~= "") then
xsel_s = editor:PositionFromLine(sel_start_line+d)+xsel_s
xsel_e = xsel_s + string.len(sel_txt)
editor:SetSel(xsel_s,xsel_e)
end
else

if (sel_start_line>0 and d==-1) or (sel_end_line-nap<editor.LineCount-1 and d==1) then
editor:BeginUndoAction()
if d==1 then
-- Down
editor:GotoLine(sel_end_line+anti_nap)
for i = sel_end_line-nap+anti_nap, sel_start_line+anti_nap, -1 do
editor:LineTranspose()
editor:LineUp()
end
else
-- Up
editor:GotoLine(sel_start_line)
for i = sel_start_line, sel_end_line-nap 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+anti_nap)
editor:SetSel(sel_start,sel_end)
editor:EndUndoAction()
end
end
end


Исправил офигенный косяк (который таился еще с первых весий). Если при множественном выделении строк вернуть каретку в конец последней строки (шифт-лефт) и перемещать вниз то начиналась заморочь...
Автор: vladvro, Отправлено:14:30 27-10-2006
всем
натолкнулся на баг:
если в конфиге задан параметр code.page=1251, то перестает работать переключение кодировок (файл->кодировка), точнее переключить в UTF-8 получается, а вот обратно уже никак.

Автор: codewarlock1101, Отправлено:15:04 27-10-2006
vladvro
Да... Косячина еще та! http://slil.ru/23310964 вот что бывает когда перекодишь слово "Привет!" и жмакнешь какой-нидь хоткей... Глюкает через раз....
Автор: mozers, Отправлено:14:31 28-10-2006
codewarlock1101
К сожалению, ситуация знакома. Или зависания или unknown software exception
Избежать этого можно только одним способом (другого, увы, не нашел):
Компилить ядро только в Microsoft Visual Studio .NET 2003 (ядро в последней сборке откомилено именно в нем, а ты, очевидно, его заменил...)
Я обычно проверяю работоспособность SciTE пытаясь сосчитать 2+2 в Калькуляторе от Kein-Hong Man (он есть в сборке)
Автор: mozers, Отправлено:23:58 29-10-2006
vladvro
Цитата:
если в конфиге задан параметр code.page=1251, то перестает работать переключение кодировок (файл->кодировка), точнее переключить в UTF-8 получается, а вот обратно уже никак
Есть такое дело. Недаром Нейл грозился попортить жизнь всем пользователям пользующимся кодировкой, отличной от тех что описаны в HELP.
Хотя выход нашелся на удивление простой - грохаем строчку code.page=1251 и все работает просто прекрасно
Автор: pete, Отправлено:10:13 30-10-2006
vladvro

Цитата:

если в конфиге задан параметр code.page=1251, то перестает работать переключение кодировок (файл->кодировка), точнее переключить в UTF-8 получается, а вот обратно уже никак

Ну вот, еще одна проблема которой нет в 1.68

Мне по работе приходится писать на MapBasic, но компилятор выдает ошибки в формате, который Scite не понимает (т.е. по двойному щелчку не переходит на строку с ошибкой). Можно ли задать формат строки с ошибкой? Если нет, то можно ли повесить обработчик на появление строки в окне output на конкретный лексер? Сейчас я вижу только возможность навесить свой обработчик на OnOutputLine, но как определить какой лексер в активном буфере не знаю
Автор: pete, Отправлено:09:23 31-10-2006

Цитата:
Компилить ядро только в Microsoft Visual Studio .NET 2003

Собрал с использованием mingw. Тест с калькулятором проходит После перекодировки хоткеи работают. Правда в 8-bit не перекодирует после UTF, но это надо в консерватории править насколько я понял.
Автор: mozers, Отправлено:11:42 31-10-2006
pete
Цитата:
Можно ли задать формат строки с ошибкой?

На офф. форуме Neil Hodgson 8 июня отвечал на аналогичный вопрос:
Цитата:
> 2. How do I tell SciTE how to parse the error messages so that it
> will move to the correct line (and column?) in the source file?
> I've read something documenting "output.format", but don't know
> how to link that with this command. Can I define a regular expression
> telling SciTE how to parse the message, or is this hard-coded?

It is hard coded so you'll have to modify the source code.
Classification of the type of message is performed by
scintilla/src/LexOthers.cxx RecogniseErrorListLine and decoding into
file/line is performed by scite/src/SciTEBuffers.cxx DecodeMessage. It
is done this way to allow recognising the messages produced by
different tools within one session without the overhead of matching
many regular expressions against each line.


Цитата:
Сейчас я вижу только возможность навесить свой обработчик на OnOutputLine, но как определить какой лексер в активном буфере не знаю

Так editor.Lexer и всех делов. Пример вывода текстового значения я тут давал.

Да и проблему с "8-bit после UTF" проблемой не считаю. Чтобы убрать code.page=1251 из .properties даже не надо быть программистом.

Добавлено:

Цитата:
Собрал с использованием mingw
А это что за зверь? (Я - неграмотный).
Можно компилить без установки как описано тут?
Автор: codewarlock1101, Отправлено:11:51 31-10-2006
ВСЕМ
Как бы программно менять размер output'а ?
props["output.horizontal.size"]="800" например переменную устанавливает, но SciTE ее не перечитывает.... так бы очень удобно было
mozers
Да, бинарник я заменил последней поделкой HSolo.
Когда будете вставлять в сборку эту поделку, подумайте на тему хранения менюшных команд в конфиге - я предложение выкладывал (ничего не меняется, просто все меню-команды иерархически упорядочены и находятся в разделе User Submenu (где возле каждой через два слеша написано имя вызываемой мульки)). И не нужно для настройки меню шмыгать из секции в секцию....

Оффтоп - Microsoft Visual Studio .NET 2003 - платный?
Автор: pete, Отправлено:13:23 31-10-2006

Цитата:
А это что за зверь? (Я - неграмотный).

Это портированный под винду gcc, заголовочные файлы win32api и т.д. http://mingw.org

Цитата:
Можно компилить без установки как описано тут?

Можно, скачать дистрибутив, прописать в path, и вперед

Автор: mozers, Отправлено:22:45 03-11-2006
pete
Цитата:
http://mingw.org
14Mb однако... Оно конечно не Visual Studio но и не 2МБ кастрированного Borland C++ Compiler.
Вот кто бы почикал этот дистрибутивчик на предмет "лишних" файлов, там глядишь мегабайтиков 10 и сократилось бы... Написал бы батничек для компиляции, чтоб любой чайник мог SciTE изготовить с одной кнопки...
На scite.ruteam.ru ждут новых авторов

codewarlock1101
Цитата:
props["output.horizontal.size"]="800" например переменную устанавливает, но SciTE ее не перечитывает....
Как выяснилось он много когда "не перечитывает"...
В новой сборке некоторые скрипты убраны из меню Tools. Теперь скрипты смены регистра, Ctrl+F11, установка ReadOnly вызываются непосредственно из главного меню, подменяя собой встроенные команды. Но тут как раз и выплыла это проблема.
Сейчас с ней борется vladvro. Я думаю - победит
Неохота недоведенную сборку выкладывать... Все думаю о ftp аккаунте для разобранного по файлам дистрибутива, в который каждый мог бы вносить свои изменения...

По поводу твоего замечательного скрипта:
Если в перемещаемом вправо выделении имеется пустая строка, то она постепенно заполняется пробелами. Так бесит... Может поправишь чтоб ничего в пустые строки не вставлялось?

Автор: codewarlock1101, Отправлено:22:58 03-11-2006
mozers
Не вопрос. Подправлю. Твое мнение - оставлять или нет перетаскивание части строки (сам я этим не пользуюсь).
***
Засунуть следующую строку в условие:

Код:

if string.gsub(editor:textrange(editor:PositionFromLine(i),editor.LineEndPosition[i]),' ','')~='' then
editor.LineIndentation [i]=editor.LineIndentation [i]+d*(-1)
end

Автор: mozers, Отправлено:00:17 04-11-2006
codewarlock1101
Цитата:
оставлять или нет перетаскивание части строки (сам я этим не пользуюсь)
Я - тоже. Но еще в сборке от Moon_aka_Sun показалось дико прикольным. ОСТАВЛЯТЬ однозначно

Цитата:
Засунуть следующую строку в условие
Ты быстр как пуля Только таких строк в твоем скрипте не наблюдается. Куда сувать?

Автор: codewarlock1101, Отправлено:19:50 04-11-2006
mozers
Ё-маё! в скрипте, на который ты дал ссылку, эта строка есть - Смотри первый цикл for или ищи строку по фразе editor.LineIndentation
Автор: mozers, Отправлено:11:30 05-11-2006
codewarlock1101
Действительно есть (простите, системный сбой)
А вообще, отредактировал бы ты свой пост - и всех делов
Автор: codewarlock1101, Отправлено:21:55 05-11-2006
mozers
обязательно! вот только бы протрезветь.....
Короче всех с праздником!!!!!!!!!!!!!!!!!!!!!!!!!! Новая версия доступна с "Бордо 89"... то есть........



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