Scintilla icon SciTE Ru-Board Kernel
Документация   FAQ   Регулярные выражения   LUA   SciTE Director   Команды SciTE и Scintilla   Сборка Ru-Board   Ядро SciTE-Ru   История  

Текстовый редактор SciTE RU-Board 1.74 .52

Все модификации оригинального кода редактора SciTE версии 1.74 выполнены энтузиастами форума Ru-Board.
Данный файл содержит полный список всех доработок кода относительно исходной версии редактора.
Все изменения, внесенные в код редактора, помечались характерными комментариями, что позволяет при желании применить к оригинальному коду любое из них по отдельности.
Демонстрацию работы обновленного редактора с многочисленными примерами использования его расширенных возможностей, вы можете увидеть, загрузив пакет SciTE-Ru.

Для удобства восприятия список разбит на три раздела:

Интерфейс

[SubMenu] (Автор: HSolo, Доработка: Дмитрий Маслов)
Немного изменен вид меню Tools. Теперь встроенные команды отделены от пользовательских сепараторами.
В меню Tools теперь возможно вставлять разделители.
Например, command.separator.34=1 вставляет разделитель перед командой 34.

Добавлена возможность создания вложенных подменю в меню Tools.
Они создаются вначале меню и отделены от остальных пунктов разделителем.
Сначала задаются названия подменю:
command.submenu.name.2.*=Insert from Text
если они вложены в другое подменю, то задается номер родительского меню:
command.submenu.parent.2=4
Затем для команд, входящих в подменю, задается номер родительского меню:
command.parent.6=2
command.name.6.*=Date and Time

Текст всех пунктов меню и подменю Tools русифицируется так же как и основное меню - через файл locale.properties.
[ToolsMax] (Автор: Moon_aka_Sun, VladVRO)
Число допустимых пунктов в меню Tools увеличено до 300.
Для создания пользовательских команд в user.context.menu следует использовать формулу:
пользовательская команда = 9000 + номер этой команды в меню Tools
[ExtendedContextMenu] (Автор: Дмитрий Маслов)
Новые параметры в .properties позволяют ПОЛНОСТЬЮ настроить контекстные меню:
user.context.menu - контекстное меню редактора
user.tabcontext.menu - контекстное меню закладок
user.outputcontext.menu - контекстное меню консоли
С помощью параметров POPUPBEGIN и POPUPEND возможно создание подменю!
Формат:
user.context.menu=\
Имя команды1|IDM_COMMAND1|\
Имя команды2|IDM_COMMAND2|...
Чтобы вставить разделитель нужно оба поля оставить пустыми
user.context.menu=\
Имя команды1|IDM_COMMAND1|\
||\
Имя команды2|IDM_COMMAND2|...
Если параметр не задан в настройках, то отображается стандартное контекстное меню.
[user.toolbar] (Автор: Дмитрий Маслов)
Новый параметр user.toolbar в .properties позволяет ПОЛНОСТЬЮ настроить панель инструментов.
Формат:
user.toolbar=\
Всплывающая подсказка1|IDM_COMMAND1|номер иконки1|\
Всплывающая подсказка2|IDM_COMMAND2|номер иконки2|...
Чтобы вставить разделитель нужно все три поля оставить пустыми
user.toolbar=\
Всплывающая подсказка1|IDM_COMMAND1|номер иконки1|\
|||\
Всплывающая подсказка2|IDM_COMMAND2|номер иконки2|...
Если параметр не задан в настройках, то отображается стандартный тулбар.
[FindResultListStyle] (Автор: VladVRO, Дмитрий Маслов)
Улучшена наглядность строк, выводимых встроенным инструментом для поиска текста в файлах (Ctrl+Shift+F):
- строки результата поиска отображаются двумя цветами - путь до файла и номер строки - одним, найденная строка текста - другим цветом.
- в результирующем тексте табуляция заменяется на пробелы, вначале строки пробелы не выводятся, двойные пробелы заменяются одинарными.
- искомая подстрока может быть выделена в строках результата с помощью задания своего стиля отображения:
style.errorlist.30=fore:#000000 ,bold

Новый параметр в .properties lexer.errorlist.findliststyle=0 позволяет отключить эту возможность.
[TabsMoving] (Автор: VladVRO и Дмитрий Маслов)
В редактор добавлены две новых команды IDM_MOVETABLEFT и IDM_MOVETABRIGHT позволяющие перемещать текущую закладку. Они доступны в меню Вкладки.
Кроме того реализовано перемещение закладок с помощью мыши.
[TabbarTitleMaxLength] (Автор: VladVRO)
Новый параметр в .properties
tabbar.title.maxlength=число
накладывает ограничение на длину надписи (имя файла) в табе. Если текст надписи длиннее, то он будет урезан и завершен символом "…"
update [NewBufferPosition] (Автор: VladVRO)
Новый параметр в .properties
buffers.new.position=число
0 - открывать новую вкладку в конце списка (default), 1 - следующей за текущей, 2 - в начале списка.
new [ZorderSwitchingOnClose] (Автор: VladVRO)
Модификация параметра в .properties
buffers.zorder.switching=1
теперь, если установлена в 1, то после закрытия вкладки редактор возвращается к последней открытой до этого.
[new_on_dbl_clk] (Автор: Дмитрий Маслов)
Добавлен функционал: На двойной клик по свободному месту справа от закладок открывается новый файл (а ля FireFox)
[SetBookmark] (Автор: Midas)
Установка Bookmark'а по 1 щелчку на панели Bookmark'ов.
Новый параметр в .properties margin.bookmark.by.single.click=0 отключает эту возможность
[position.autosave] (Автор: Дмитрий Маслов)
Новый параметр в .properties
save.settings.path= позволяет задавать файл, в котором, при закрытии SciTE, будут автоматически сохранятся текущие размеры и позиция окна
[NewFind-MarkerDeleteAll] (Автор: Дмитрий Маслов)
Новый параметр в .properties
find.mark.delete=1
Если 1, то при нажатии на кнопку "Пометить все" удаляются все установленные ранее букмарки.
new [output.caret] (Автор: VladVRO)
Новые параметры в .properties
output.caret.fore
output.caret.line.back
output.caret.line.back.alpha
для задания стиля курсора в окне консоли.
[NewIcons] (Автор: VladVRO)
Новые иконки для файлов, ассоциированных с SciTE и для файлов сессий.
[AbbrevRefactoring] (Автор: VladVRO)
Использование символа '|' работает одинаково и для вставки сокращения (Ctrl+Shift+R) и для расшифровки сокращения (Сtrl+B).
[VarAbbrev] (Автор: mimir, VladVRO)
В списки сокращений (abbrev) можно добавлять пользовательские переменные.
- %SEL% - выделенный текст
- %CLP% - текст из буфера обмена
- %[имя_переменной]% - значение внутренней переменной SciTE (например, CurrentSelection, FileNameExt, SciteDefaultHome и т.п.)
- %GUID% - уникальный GUID нового объекта (идея принадлежит codewarlock1101)

Так, например, забив в файл abbrev такую строку:
<a+=<a href="%CLP%" title="|">%SEL%</a>
Копируем в буфер обмена текст "http://scite.ruteam.ru/"
Пишем "<a+Наш сайт", выделяем текст "Наш сайт", затем нажимаем Сtrl+B - получаем готовую конструкцию:
<a href="http://scite.ruteam.ru/" title="|">Наш сайт</a>
где курсор находится на месте символа '|'.

То же самое получится если написать "Наш сайт" и выделив этот текст, нажать Ctrl+Shift+R и выбрать "<a+" из раскрывающегося списка.

Новый параметр в .properties
abbrev.preserve.selection=1
позволяет вставлять выделенный текст без использования переменной %SEL%.
В этом случае выделенный текст размещается вместо последнего символа '|'.
[abbrev.always.update] (Автор: mimir)
Новый параметр в .properties
abbrev.always.update=1
позволяет обновлять файл сокращений без перезапуска Scite
[AbbrevExpandIncremental] (Автор: VladVRO)
Новый параметр в .properties
abbrev.expand.incremental=1
Изменяет порядок поиска сокращения по Ctrl+B от малого к большему, иначе говоря, сперва берется один символ, потом два и т.д.
[AbbrevMaxLength] (Автор: VladVRO)
Новый параметр в .properties
abbrev.maximum.length=[число]
Задает максимальную длину сокращения, обрабатываемого по Ctrl+B, иначе говоря, максимальную длину текста который будет сравниваться с набором сокращений.
[import] (Автор: mimir)
Возможно использование директивы import в файлах *.abbrev
[selection.hide.on.deactivate] (Автор: mozers)
Параметр selection.hide.on.deactivate=0 позволяет не снимать выделение с текста когда окно SciTE теряет фокус.
[scite.userhome] (Автор: gansA, mozers, VladVRO)
Новый параметр в .properties
scite.userhome позволяет задать путь к каталогу $SciteUserHome для сохранения пользовательских данных (SciTE.recent, SciTE.ses, SciTEUser.properties)
Позволяет использовать в пути внутренние переменные SciTE, например, так:
scite.userhome=$(SciteDefaultHome)\home
[IncrementalSearch.AddHotkeys] (Автор: Midas)
Добавляет в "Быстрый поиск" (Ctrl+Alt+I) горячие клавиши:
- Enter или F3 - следующее вхождение
- Shift+Enter или Shift+F3 - предыдущее вхождение
[WarningMessage] (Автор: VladVRO)
Добавлена возможность настроить отображение предупреждения для информационных событий редактора (warning), сообщения задаются параметрами:
warning.findwrapped.message=текст сообщения
warning.notfound.message=текст сообщения
warning.wrongfile.message=текст сообщения
warning.executeok.message=текст сообщения
warning.executeko.message=текст сообщения
warning.nootherbookmark.message=текст сообщения
[AutoComplete] (Автор: mimir)
Функция автозавершения (Ctrl+I) берет шаблоны как из редактируемого текста, так и из соответствующего .api файла
[CirillicKeywords] (Автор: VladVRO)
Поддержка русских операторов
[oem2ansi] (Автор: gansA)
Параметр output.code.page.oem2ansi=1 включает перекодировку текста, выводимого в окно консоли, из OEM в ANSI.
Это позволяет редактировать скрипт в кодировке win1251 и видеть его вывод в консоли в кодировке dos866 не прибегая к переключению.
[caret] (Автор: mimir)
Добавлена возможность настраивать ширину и цвет курсора индивидуально для каждого лексера, например, так:
caret.fore.$(file.patterns.cpp)=#FF0000
caret.width.$(file.patterns.cpp)=3
Это акктуально для тех, у кого для разных языков заданы принципиально отличающиеся цветовые решения, например, с разным (светлым и темным) фоном.
new [BetterCalltips] (Автор: chupakabra)
Новые параметры в .properties
calltip.lexer.automatic
calltip.*.automatic
Yстановка этого параметра в 0 означает что не будет происходить автоматическое отображение окошка с calltip'ом при наборе текста, но останется возможность вызвать его вручную.
calltip.lexer.show.per.page
calltip.*.show.per.page
Возможность указать количество определений, отображаемых одновременно в calltip'е. Значение по умолчанию - 1.
calltip.lexer.word.wrap
calltip.*.word.wrap
Опция включает возможность переноса по словам длинных calltip'ов, её значение определяет максимальный размер строки calltip'а в символах, 0 означает что данная функция будет отключена.

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

Добавлена возможность указывать несколько диапазонов подсветки для окошка calltip'а, введены новые команды Scintilla для этих целей (SCI_CALLTIPADDHLT, SCI_CALLTIPCLEARHLT, SCI_CALLTIPUPDATEHLT)

Расширения

[macro] (Автор: VladVRO)
Поддержка записи и воспроизведения макросов с помощью LUA
[OnMenuCommand] (Автор: VladVRO)
Добавлено новое событие SciTE - OnMenuCommand (msg, source)
msg - id функции (SCI_constant)
source - является вторым входным параметром внутренней функции редактора MenuCommand.
Он может быть равным IDM_SRCWIN (350) - окно редактора, или IDM_RUNWIN (351) - окно вывода, или еще чему-то тому, где находится фокус.
[OnSendEditor] (Автор: VladVRO)
Добавлено новое событие SciTE - OnSendEditor (msg, wp, lp)
Параметры теже что и у функции SendEditor.
msg - id функции (SCI_constant)
wp и lp - входные параметры для этой функции, причем wp - числовой параметр, lp - текстовый. В зависимости от функции они могут использоваться или нет.
OnSendEditor вызывается для команд доступных для записи в макрос и для SCI_SETREADONLY.

Пример вызова скрипта для смены регистра:
function OnSendEditor (msg)
  if msg == SCI_UPPERCASE then
    ChangeCase("U")
  elseif msg == SCI_LOWERCASE then
    ChangeCase("L")
  end
end
[MenuCommandString] (Автор: VladVRO)
Возможно так же использовать запись вида
scite.MenuCommand("IDM_COMMAND")
где "IDM_COMMAND" имя константы
[OnDoubleClick] (Автор: mimir, Дмитрий Маслов)
Расширена функция луа OnDoubleClick(), теперь в нее передается также состояние клавиш-модификаторов (Shift, Ctrl, Alt):
function OnDoubleClick(shift, ctrl, alt)
[OnKey] (Автор: Дмитрий Маслов)
Расширена функция луа OnKey, теперь в нее передается также нажатый символ:
function OnKey(key, shift, ctrl, alt, char)
[Perform] (Автор: VladVRO)
В SciTE Lua Scripting Extension добавлена новая команда
scite.Perform(actionList) - исполняет команды SciTE Director Interface
где actionList - одна или несколько команд разделенных символом новой строки.
[GetLexerLanguage] (Автор: Дмитрий Маслов)
Добавлено сообщение к Scitilla позволяющее получить имя текущего лексера:
Теперь editor.LexerLanguage - позволяет как установить лексер, так и получить текущий
[AbbrevRefactoring] (Автор: Дмитрий Маслов)
В SciTE Lua Scripting Extension добавлена новая команда
InsertAbbreviation(string)
где "string" - это текст, по формату аналогичный сокращениям (abbrev), например:
scite.InsertAbbreviation("<a href="|" title="">%SEL%</a>")
[os.run] (Автор: mimir)
В SciTE Lua Scripting Extension добавлена новая команда
os.run(Command, [WindowStyle], [WaitOnReturn])
позволяющая задать вид окна запускаемой внешней команды, приостановить выполнение скрипта на время ее выполнения и получить код завершения.
[MSGBOX] (Автор: Midas, mimir)
В SciTE Lua Scripting Extension добавлена новые команды
- os.msgbox (Text, [Title], [Options]) - Окно с сообщением. Возвращает выбранную кнопку;
- os.getfileattr (FileName) - возвращает атрибуты файла в виде числа;
- os.setfileattr (FileName, FileAttr) - устанавливает атрибуты файла;
[ParametersDialogFromLua] (Автор: VladVRO)
В SciTE Lua Scripting Extension добавлена новая команда для вызова диалогового окна "Параметры" (Shift+F8)
scite.ShowParametersDialog(text)
где text - короткий комментарий в окне параметров.
Возвращает false если пользователь отказался (нажал отмену или Escape) иначе true.
Пример:
  function Dialog()
    props["1"]=props["CurrentSelection"]
    props["2"]=props["SciteDefaultHome"]
    if scite.ShowParametersDialog("Please set params") then
    print ("1="..props["1"].."\n2="..props["2"].."\n3="..props["3"].."\n4="..props["4"])
    else
      print ("Cancel")
    end
  end
[FileAttr in PROPS] (Автор: Midas)
Теперь из скриптов доступны дополнительные свойства файла
FileAttr, FileTime, FileDate.
[CalltipBreaks] (Автор: Mitchell Foral)
Длинные всплывающие подсказки можно перенести на другую строку (добавлением символа \n в соответствующую строчку в api-файле)
[Euphoria] (Автор: Midas)
Добавлен новый лексер для языка Euphoria
[C_Word] (Автор: mimir)
Добавлено 3 новых класса ключевых слов для LexCpp (т.е. теперь можно задавать до 4х дополнительных наборов слов с разной подсветкой)

Устранение ошибок

[InputErr] (Автор: mimir)
Исправлена ошибка зависания SciTE при использовании command.input.
Если пользователь забыл выделить текст перед запуском скрипта, то SciTE зависал.
[SelectionErr] (Автор: mimir)
Исправлена ошибка с выводом текста по command.input и $(CurrentSelection) исключительно в кодировке UTF-8.
Это не позволяло передать русский текст во внешний скрипт или программу.
[Tread.SmartExecute] (Автор: Дмитрий Маслов)
Исправлен и дополнен оригинальный код редактора, чтобы поток не вызывал сам себя рекурсивно при определенных условиях. Пример:
function command(cmd, mode)
  local p0 = props["command.name.0.*"]
  local p1 = props["command.0.*"]
  local p2 = props["command.mode.0.*"]
  props["command.name.0.*"] = 'tmp'
  props["command.0.*"] = cmd
  props["command.mode.0.*"] = 'subsystem:'..mode..',replaceselection:no,savebefore:no'
  scite.MenuCommand(1100)
  props["command.name.0.*"] = p0
  props["command.0.*"] = p1
  props["command.mode.0.*"] = p2
end

command('CMD /C TIME /T', 'console')
[StyleDefault] (Автор: VladVRO, Дмитрий Маслов)
Убраны дефолтовые значения цвета символов (черный) и фона (белый), что позволяет не задавать их явно в файлах настройки во всех стилях для получения соответствующего фона при экспорте файла.
Если в style.*.32 явно не задан цвет символов и фона, то эти параметры берутся из настроек Windows, т.е. равными системным Window Text/Background.
[LowerUpperCase] (Автор: Midas)
Корректная работа с русскими символами
- при переводе в нижний/верхний регистр,
- при поиске без учета регистра
- при поиске с использованием регулярных выражений
[FindInFiles] (Автор: dB6)
Выделенный текст вставлялся в диалог поиска в файлах исключительно в кодировке UTF-8, поэтому русский текст превращался в "крякозяблы".
[FileReaderUnlimitedLen] (Автор: VladVRO)
Убрано ограничение на длину строк во встроенном поиске по файлам. Раньше в длинных строках поиск работал только до 1001 символа, все остальное в строке игнорировалось.
[no_wornings] (Автор: Дмитрий Маслов)
Добавлена совместимость с компилятором Visual C++ 6.0
Убраны причины некоторых предупреждений при компиляции в Visual C++ 6.0
warning C4702: unreachable code
[SQLcase] (Автор: mimir)
В LexSQL добавлено слово "case" для начала фолдинга
[LuaWord] (Автор: mimir)
Лексер для LUA воспринимает разделитель ":" так же как и "."


О найденных неточностях в описании прошу сообщать по адресу mozers(@)mail.ru