Ru-Board.club
← Вернуться в раздел «Программы»

» SciTE - Open Source Text Editor for Windows & Linux

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


Код:
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
Дата сообщения: 26.10.2006 16:55
codewarlock1101

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

теоретически - вещь не лишняя, единственно, я рекомендовал бы реализовывать отдельным алгоритмом, что бы это не повлекло за собой чрезмерное усложнение кода и появления неизбежных багов в уже созданном.
Автор: codewarlock1101
Дата сообщения: 26.10.2006 17:46
vladvro
Багов нет! И код не особо усложняется...
Автор: vladvro
Дата сообщения: 27.10.2006 08:13
codewarlock1101

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

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

Цитата:

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

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

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

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

Собрал с использованием mingw. Тест с калькулятором проходит После перекодировки хоткеи работают. Правда в 8-bit не перекодирует после UTF, но это надо в консерватории править насколько я понял.
Автор: mozers
Дата сообщения: 31.10.2006 10:42
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
Дата сообщения: 31.10.2006 10:51
ВСЕМ
Как бы программно менять размер output'а ?
props["output.horizontal.size"]="800" например переменную устанавливает, но SciTE ее не перечитывает.... так бы очень удобно было
mozers
Да, бинарник я заменил последней поделкой HSolo.
Когда будете вставлять в сборку эту поделку, подумайте на тему хранения менюшных команд в конфиге - я предложение выкладывал (ничего не меняется, просто все меню-команды иерархически упорядочены и находятся в разделе User Submenu (где возле каждой через два слеша написано имя вызываемой мульки)). И не нужно для настройки меню шмыгать из секции в секцию....

Оффтоп - Microsoft Visual Studio .NET 2003 - платный?
Автор: pete
Дата сообщения: 31.10.2006 12:23

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

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

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

Можно, скачать дистрибутив, прописать в path, и вперед
Автор: mozers
Дата сообщения: 03.11.2006 21:45
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
Дата сообщения: 03.11.2006 21:58
mozers
Не вопрос. Подправлю. Твое мнение - оставлять или нет перетаскивание части строки (сам я этим не пользуюсь).
***
Засунуть следующую строку в условие:

Код:
if string.gsub(editor:textrange(editor:PositionFromLine(i),editor.LineEndPosition[i]),' ','')~='' then
editor.LineIndentation [i]=editor.LineIndentation [i]+d*(-1)
end
Автор: mozers
Дата сообщения: 03.11.2006 23:17
codewarlock1101
Цитата:
оставлять или нет перетаскивание части строки (сам я этим не пользуюсь)
Я - тоже. Но еще в сборке от Moon_aka_Sun показалось дико прикольным. ОСТАВЛЯТЬ однозначно

Цитата:
Засунуть следующую строку в условие
Ты быстр как пуля Только таких строк в твоем скрипте не наблюдается. Куда сувать?
Автор: codewarlock1101
Дата сообщения: 04.11.2006 18:50
mozers
Ё-маё! в скрипте, на который ты дал ссылку, эта строка есть - Смотри первый цикл for или ищи строку по фразе editor.LineIndentation
Автор: mozers
Дата сообщения: 05.11.2006 10:30
codewarlock1101
Действительно есть (простите, системный сбой)
А вообще, отредактировал бы ты свой пост - и всех делов
Автор: codewarlock1101
Дата сообщения: 05.11.2006 20:55
mozers
обязательно! вот только бы протрезветь.....
Короче всех с праздником!!!!!!!!!!!!!!!!!!!!!!!!!! Новая версия доступна с "Бордо 89"... то есть........
Автор: mozers
Дата сообщения: 07.11.2006 10:21
SciTE 1.71 .23Ru-Board Edition [Сборка 07.11.2006]
Автор: codewarlock1101
Дата сообщения: 07.11.2006 17:20
mozers
Че-то намутили! Теперь статус бар не прорисовывается автоматически!
Автор: unreal666
Дата сообщения: 07.11.2006 18:15
codewarlock1101
А чего там не прорисовывается? Выделяю например что-нибудь (или изменяю лексер) - в строке состояния это показывается.

Добавлено:
mozers
Обзывай файл в инсталляторе не SciTE, а например SciTE_setup. А то имя файла (и его иконка) перекликается с самим исполняемым файлом SciTE.

Добавлено:
mozers
А чем ты компилировал SciTE.exe и с какими опциями ?
Чего-то пытаюсь компилить Visual Studio 2003 - файл получается 620 кб, а у тебя 452 кб (а SciLexer.dll вообще 788 кб против 330 кб твоих).
Как у тебя такой размер получился?
Автор: codewarlock1101
Дата сообщения: 07.11.2006 20:07
unreal666
Попробуй это сделать при редактировании главного файла настроек
Автор: ALeXkRU
Дата сообщения: 07.11.2006 21:52
unreal666

Цитата:
А чем ты компилировал SciTE.exe и с какими опциями ?
Чего-то пытаюсь компилить Visual Studio 2003 - файл получается 620 кб, а у тебя 452 кб (а SciLexer.dll вообще 788 кб против 330 кб твоих).
Как у тебя такой размер получился?

так, наверняка - этим
Автор: mozers
Дата сообщения: 07.11.2006 22:33
codewarlock1101
Цитата:
Че-то намутили! Теперь статус бар не прорисовывается автоматически!
Ага. Есть такая ошибочка. Надо поправить SciTEGlobal_ToggleFold.lua [more]
Код: -- Скрипт для автоматического сворачивания всех секций SciTEGlobal.properties
-- при его открытии или при первом переключении на его закладку
-- mozers™
-----------------------------------------------
local function ToggleFoldAll()
if props['fold.compess'] ~= '1' then
for i = 0,editor.LineCount do
if editor.FoldLevel[i] > SC_FOLDLEVELHEADERFLAG then
editor:MarkerAdd(i,1)
editor:ToggleFold(i)
end
end
props['fold.compess']='1'
end
end

-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
local result
if old_OnOpen then result = old_OnOpen(file) end
if props['FileNameExt'] == 'SciTEGlobal.properties' then
props['fold.compess'] = '0'
end
return result
end

-- Добавляем свой обработчик события OnUpdateUI
local old_OnUpdateUI = OnUpdateUI
function OnUpdateUI ()
local result
if old_OnUpdateUI then result = old_OnUpdateUI() end
if props['FileNameExt'] == 'SciTEGlobal.properties' then
if ToggleFoldAll() then return true end
end
return result
end
Автор: unreal666
Дата сообщения: 07.11.2006 23:40

Цитата:
Поставил Microsoft Visual Studio .NET 2003

Аналогично. Только после запуска твоего батника вылазит такая фигня:

Цитата:
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

    cl -Zi -TP -W4 -Zc:forScope -Zc:wchar_t -D_CRT_SECURE_NO_DEPRECATE=1 -O1 -MT -DNDEBUG -GL -I../include -I../src -c -Fo.\AutoComplete.obj ..\src\AutoComplete.cxx
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

Command line error D2016 : '/Ze' and '/Za' command-line options are incompatible
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.

Т.е. чего-то с опциями компилятора. Только где они хранятся - хрен его знает.
Кстати, такой большой размер получился при компиляции через GUI (файлы проектов для VC - SciTE.dsp и SciLexer.dsp). Выставлял и оптимизация по размеру и по скорости. Один хрен - одинакового большого размера получаются.
Автор: IMPOMEZIA
Дата сообщения: 07.11.2006 23:58
unreal666

Цитата:
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

и

Цитата:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

это говорит только об одном - для компиляции используется Microsoft Visual Studio 6.0 почему-то
Автор: unreal666
Дата сообщения: 08.11.2006 01:00
IMPOMEZIA

Цитата:
это говорит только об одном - для компиляции используется Microsoft Visual Studio 6.0 почему-то

Спасибо за подсказку. Не обратил на это внимание.
Просто у меня стоит и Visual Studio 6 (точнее стоял - я его сейчас удалил).
А при копировании содержимого батника из поста в конце строк с SET вставились пробелы. Поэтому он их не находил и искал в путях из переменных окружения, а в них у меня как раз прописан Visual Studio 6.
Удалил 6-ку (можно было просто убрать пробелы в конце строк с SET ) и при попытке компиляции выдало, что файл nmake не является внутренней или внешней командой и я догадался, что что-то не так с путями в файле.
Убрал эти пробелы и все откомпилилось нормально.
Автор: codewarlock1101
Дата сообщения: 08.11.2006 10:01
Если открыт один файл, то переключение шрифтов по Ctrl+F11 не работает.

В файле Common.lua находится функция CurrentWord, которая не используется ни каким из скриптов

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: LeechGet


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.