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

» SciTE - Open Source Text Editor for Windows & Linux

Автор: DJ makrus
Дата сообщения: 15.02.2007 11:18
vladvro
Цитата:
...нет надобности выносить в сборке этот раздел в отдельный файл. при апдейте его легко подправить под себя
спасибо за подсказку с NULL, я тоже против еще одного файла настроек для тех кто не умеет и не хочет читать , предлагаю mozers'у следующий вариант для тех кто впервые ставит сборку:
1. в поддиректории home бросаем файл SciTE.ses следующего содержания:
Цитата:
<pos=-1> home\ReadMe.txt

2. там же ложим файл ReadMe.txt примерно следующего содержания:
Цитата:
Внимание!!! В сборке по умолчанию подсветка синтаксиса всех поддерживаемых Scite'ом языков и типов файлов отключена по причинам указанным здесь: http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=3215&start=1460, для включения подсветки синтаксиса раскомментируйте в файле SciTEGlobal.properties в секции [Languages] только те строки которые вам необходимы, для чего удалите в начале соотвествующей строки символ "#". Для изменения остальных свойств вносите соотвествующие настройки в файл SciTEUser.properties расположенный в поддиректории "home", более подробно про настройку Scite'а и работу с файлами настройки читайте здесь: http://scite.ruteam.ru/scite/faq/podumaite-zachem-vam-stolko-properties
ссылку с оффсайта сборки можно подобрать более подходящую, если таковая имеется, т.к. эту я взял из кэша;

3. там же ложим файл SciTEUser.properties содержащий только напоминание о необходимости изменять настройки Scite'а только через этот файл;

4. напоминание о том что надо раскомментировать только используемые языки надо внести в начало секции [Languages] взамен имеющемуся там сейчас.

Таким образом:
1. 90% новичков при первом запуске увидят эту информацию и количество вопросов "а почему у меня ничего не подсвечивает?" будет чуть-чуть поменьше;
2. количество вопросов "а почему лучший язык программирования ля-ля не подсвечивается, хотя написано что он тоже поддерживается?" тоже должно быть поменьше;
3. еще одно напоминание о том как правильно использовать мощные возможности Scite'а в области настроек - тоже не помешает;
- это естественно все в теории

По-поводу использования в качестве вьювера в Тотале: тоже оставил простой запуск с параметрами, единственное добавил еще один: -property:check.if.already.open=0 что бы открывал в отдельном процессе, а не табом в уже существующим (он у меня практически постоянно открыт).

Еще одно хотелка созрела в связи с режимом ReadOnly - можно ли передалать существующий ReadOnly.lua что бы режим отображался не фоном, а цветом поля нумерации строк и отключением мерцания курсора (как я до этого предлагал)? Обозвать его например ReadOnly2.lua, а я бы его уже в SciTEStartup.lua подключил взамен старому варианту.
Автор: vladvro
Дата сообщения: 15.02.2007 13:09
DJ makrus, mozers
идею с ReadMe.txt поддерживаю, хорошая идея.
а вот кидать в сборку SciTEUser.properties не рекомендую, при апдейте можно потереть существующий файл настроек, который по идее должен быть создан пользователем.
Автор: mozers
Дата сообщения: 15.02.2007 21:13
DJ makrus vladvro
А не буду я с вами спорить Лучше подумаю как это реализовать поаккуратней

Поскольку тутошний народ пользует Тотал - вот вам еще скриптик RunReg.js для открытия в ТС ветки реестра, выделенной в редакторе.
Код: var key = WScript.StdIn.ReadAll();
if (key == "") {
WScript.Quit();
}

key = key.replace(/^HKLM\\/,'HKEY_LOCAL_MACHINE\\');
key = key.replace(/^HKCR\\/,'HKEY_CLASSES_ROOT\\');
key = key.replace(/^HKCU\\/,'HKEY_CURRENT_USER\\');

var total = '"G:\\Total Commander\\TOTALCMD.EXE" /O /T /L="\\\\\\Registry\\'+ key +'" /I=".\\Profiles\\work\\main.ini" /F=".\\Profiles\\work\\ftp.ini"';
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run(total, 0, false);
Автор: vladvro
Дата сообщения: 16.02.2007 12:18
DJ makrus

Цитата:
Еще одно хотелка созрела в связи с режимом ReadOnly - можно ли передалать существующий ReadOnly.lua что бы режим отображался не фоном, а цветом поля нумерации строк и отключением мерцания курсора

поменяй в файле ReadOnly.lua функцию SetReadOnly на:

Код: local function SetReadOnly(ro)
    if ro then
        props["caret.period.normal"] = props["caret.period"]
        props["caret.width.normal"] = props["caret.width"]
        props["style.*.33.normal"] = props["style.*.33"]
        props["caret.period"] = 0
        props["caret.width"] = 0
        props["style.*.33"] = "back:#8080C0"
        scite.Perform("reloadproperties:")
        props["scite.readonly"] = "VIEW"
    else
        if props["style.back.readonly"]~='' and props["scite.readonly"] == "VIEW" then
            props["caret.period"] = props["caret.period.normal"]
            props["caret.width"] = props["caret.width.normal"]
            props["style.*.33"] = props["style.*.33.normal"]
            scite.Perform("reloadproperties:")
        end
        props["scite.readonly"] = "EDIT"
    end
    scite.UpdateStatusBar()
end
Автор: nemo2007
Дата сообщения: 16.02.2007 13:17
Доброе время суток. Надо предупреждать, архив то с сюрпризом:
http://scite.ruteam.ru/engine/upfiles/mozers/SciTE_172_31Ru_160107.zip содержит Trojan-Downloader.JS.Gen.
Автор: dB6
Дата сообщения: 16.02.2007 15:25
nemo2007
Господа, учимся читать топик перед такими заявлениями. На предудыщей странице (с переходом на эту) это уже обсуждали.
Автор: mozers
Дата сообщения: 18.02.2007 01:06

Код: -- Замена команды "Открыть выделенный файл"
-- В отличии от встроенной команды SciTE, понимающей только явно заданный путь,
-- обрабатывает переменные SciTE, переменные окружения, конструкции LUA, относительные пути
-- Подключение: Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\Open_Selected_Filename.lua")
-- mozers™
-- version 1.0
--------------------------------------------------------------


local function Open_Selected_Filename()
--~ local filename = props['CurrentSelection'] -- Ни хрена не работает Почему ???
local filename = editor:GetSelText()

-- Example: $(SciteDefaultHome)\tools\RunReg.js
local pattern_sci = '^$[(](.-)[)]'
local _, _, scite_var = string.find(filename,pattern_sci)
if scite_var ~= nil then
filename = string.gsub(filename, pattern_sci, props[scite_var])
end

-- Example: %APPDATA%\Opera\Opera\profile\opera6.ini
local pattern_env = '^[%%](.-)[%%]'
local _, _, os_env = string.find(filename, pattern_env)
if os_env ~= nil then
filename = string.gsub(filename, pattern_env, os.getenv(os_env))
end

-- Example: props["SciteDefaultHome"].."\\tools\\Zoom.lua"
local pattern_props = '^props%[%p(.-)%p%]%.%.%p(.*)%p'
local _, _, scite_prop1, scite_prop2 = string.find(filename,pattern_props)
if scite_prop1 ~= nil then
filename = props[scite_prop1]..scite_prop2
end

-- Example: Calculator\SciTECalculatorPD.lua
local pattern_path = '^(%a:\\)'
local _, _, scite_var = string.find(filename,pattern_path)
if scite_var == nil then
filename = props['FileDir']..'\\'..filename
end

filename = string.gsub(filename, '\\\\', '\\')
scite.Open (filename)
return true
end

-- Добавляем свой обработчик события OnMenuCommand
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand (msg, source)
local result
if old_OnMenuCommand then result = old_OnMenuCommand(msg, source) end
if msg == 103 then --IDM_OPENSELECTED
if Open_Selected_Filename() then return true end
end
return result
end
Автор: mozers
Дата сообщения: 18.02.2007 11:41

Код: -- Скрипт для автоматического сворачивания всех секций при открытии файлов заданного типа
-- Подключение:
-- Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\ToggleFoldAll.lua")
-- Задайте расширеня файлов в файле .properties
-- toggle.foldall.ext=properties,ini
-- mozers™
-----------------------------------------------

local function CheckExt()
local toggle_foldall_ext = string.upper(props['toggle.foldall.ext'])
local file_ext = '('..string.upper(props['FileExt'])..')'
local _, _, toggle_foldall = string.find(toggle_foldall_ext, file_ext)
if toggle_foldall ~= nil then
scite.MenuCommand('IDM_TOGGLE_FOLDALL')
end
end

-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
local result
if old_OnOpen then result = old_OnOpen(file) end
if CheckExt() then return true end
return result
end
Автор: AzAlt
Дата сообщения: 19.02.2007 12:36
Не даёт мне покоя ещё вот какая проблема. Довольно удобно юзать
fold.on.open=1 - т.е. автоматический фолдинг открываемых файлов. Но катастрофически неудобно то, что под это сворачивание подпадают не просто ветки кода, а целиком секции. Т.е., если файл представляет собой исключительно скрипт <?php ... ?>, то при открытии увидим лишь "+ <?php". И всё время надо лезть мышью открывать его. В html-страницах всё работает схожим образом.
Подскажите пожалуйста, можно как-то этот момент подтюнить?
И заодно, если кто вдруг в курсе, как настроить стили для самих тегов <?php ?> ? Нигде не нашёл

Спасибо.
Автор: vladvro
Дата сообщения: 19.02.2007 14:27
AzAlt

Цитата:
Но катастрофически неудобно то, что под это сворачивание подпадают не просто ветки кода, а целиком секции. Т.е., если файл представляет собой исключительно скрипт <?php ... ?>, то при открытии увидим лишь "+ <?php"....Подскажите пожалуйста, можно как-то этот момент подтюнить?

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

Цитата:
как настроить стили для самих тегов <?php ?> ?

в файле languages\html_.properties
настройко параметра style.hypertext.18


Добавлено:
mozers
Цитата:
Замена команды "Открыть выделенный файл"
замечательно! давно уже подумывал о таком
Автор: Midas
Дата сообщения: 19.02.2007 21:02
Извиняюсь, если тема обсуждалась...
Можно заставить Scite искать русские буквы вне зависимости от регистра если изменить функцию MakeUpperCase(файл Document.cxx ~950 строка) на следующий код:
<code>
    if (ch < 'a' || ch > 'z')
    { if (ch<'а' || ch > 'я')
        return ch;
     else
        return static_cast<char>(ch - 'а' + 'А'); } // Буквы А-русские
    else
        return static_cast<char>(ch - 'a' + 'A');
</code>
Минусы:
- На всех кодовых страницах кроме 1251 будет косячить поиск символов, от "а" до "я"
(223-255)
Плюсы:
+ Работает Поиск без учета Регистра
+ Работает замена без учета Регистра

1<2
Автор: vladvro
Дата сообщения: 20.02.2007 14:43

Цитата:
-- Замена команды "Открыть выделенный файл"

1) обнаружил что с этим скриптом перестает работать открытие файлов вида "../имя.файла"
2) не понял зачем блок обработки для -- Example: Calculator\SciTECalculatorPD.lua, оно и так работает

предлагаю к рассмотрению модификацию [more]
Код: -- Замена команды "Открыть выделенный файл"
-- В отличии от встроенной команды SciTE, понимающей только явно заданный путь,
-- обрабатывает переменные SciTE, переменные окружения, конструкции LUA, относительные пути
-- Подключение: Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\Open_Selected_Filename.lua")
-- mozers™
-- version 1.0
--------------------------------------------------------------

local function Open_Selected_Filename()
    local filename = editor:GetSelText()
    local foropen = nil

    -- Example: $(SciteDefaultHome)\tools\RunReg.js
    local pattern_sci = '^$[(](.-)[)]'
    local _, _, scite_var = string.find(filename,pattern_sci)
    if scite_var ~= nil then
        foropen = string.gsub(filename, pattern_sci, props[scite_var])
    else

        -- Example: %APPDATA%\Opera\Opera\profile\opera6.ini
        local pattern_env = '^[%%](.-)[%%]'
        local _, _, os_env = string.find(filename, pattern_env)
        if os_env ~= nil then
            foropen = string.gsub(filename, pattern_env, os.getenv(os_env))
        else

            -- Example: props["SciteDefaultHome"].."\\tools\\Zoom.lua"
            local pattern_props = '^props%[%p(.-)%p%]%.%.%p(.*)%p'
            local _, _, scite_prop1, scite_prop2 = string.find(filename,pattern_props)
            if scite_prop1 ~= nil then
                foropen = props[scite_prop1]..scite_prop2
            end
        end
    end

    if foropen ~= nil then
        foropen = string.gsub(foropen, '\\\\', '\\')
        scite.Open (foropen)
        return true
    end
end

-- Добавляем свой обработчик события OnMenuCommand
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand (msg, source)
    local result
    if old_OnMenuCommand then result = old_OnMenuCommand(msg, source) end
    if msg == 103 then --IDM_OPENSELECTED
        if Open_Selected_Filename() then return true end
    end
    return result
end
Автор: Midas
Дата сообщения: 20.02.2007 20:20
Так кому-нибудь интересна тема поддержки русских символов Scite'ом ?
if TRUE then
Я посмотрел исходники N++, добавил аналогичные изменения в Scite'ое ядро, теперь работают для русских символов:
- Make Lower Case;
- Make Upper Case;
- Find;
- Find in files;

Нерешенные проблемы:
- Все это будет работать (скорее всего) только в Win, т.к. исп-ся системные функции;
- Соответственно поддерживается только кодировка 1251
Могу выложить измененные файлы.
end if
Автор: Midas
Дата сообщения: 21.02.2007 07:54
Измененные файлы (для сборки Ru-Board) для поддержки русских букв.
http://kmidas.narod.ru/files/Scite_RU.zip
Автор: mozers
Дата сообщения: 21.02.2007 23:33
vladvro
Цитата:
Замена команды "Открыть выделенный файл"
предлагаю к рассмотрению модификацию
Я верил что умный человек поправит мои апшибки

Цитата:
2) не понял зачем блок обработки для -- Example: Calculator\SciTECalculatorPD.lua, оно и так работает
Х.з. у меня почему то срабатывает не всегда - эта несправедливость и подвигла меня на написание скрипта. и только потом уже подумал о расширении функционала...
А че ты коммент
Код: local filename = props['CurrentSelection'] -- Ни хрена не работает Почему ???
Автор: vladvro
Дата сообщения: 22.02.2007 15:40
mozers
Цитата:
А че ты коммент
Код: local filename = props['CurrentSelection'] -- Ни хрена не работает Почему ???
убрал, а так и не объяснил отчего же так ?
С props['CurrentSelection'] можно было бы текст и из окна консоли обрабатывать... (editor:GetSelText() этого не могет)
Автор: Midas
Дата сообщения: 23.02.2007 21:38
Еще блок мелких доработок:

1) Если заменить код в scite\win32\SciTEWinDlg.cxx в процедуре SciTEWin::IncrementFindMessage(HWND hDlg, UINT message, WPARAM wParam) на


Код:
    case WM_INITDIALOG:{
        wFindIncrement = hDlg;
        LocaliseDialog(hDlg);
        SetWindowLong(hDlg, GWL_STYLE, WS_TABSTOP || GetWindowLong(hDlg, GWL_STYLE));
        dlg.SetItemTextU(IDC_INCFINDTEXT, ""); //findWhat.c_str()
        SetFocus(hDlg);

        PRectangle aRect = wFindIncrement.GetPosition();
        PRectangle aTBRect = wStatusBar.GetPosition();
        PRectangle aNewRect = aTBRect;
        aNewRect.top = aNewRect.bottom - (aRect.bottom - aRect.top);
        aNewRect.right = aNewRect.left + aRect.right - aRect.left;
        //~ RegisterHotKey(hDlg,1,0,VK_F3);
        //~ RegisterHotKey(hDlg,2,MOD_SHIFT,VK_F3);
    // Midas 23.02.2007
    if (props.GetInt("find.inc.adv.keys")){
         // if: Shift+ENTER - next search does not work
            RegisterHotKey(hDlg,2,MOD_CONTROL, VK_RETURN);
            RegisterHotKey(hDlg,3,0,VK_UP);
            RegisterHotKey(hDlg,4,0,VK_DOWN);
    }

        wFindIncrement.SetPosition(aNewRect);


        return TRUE;
    }

    case WM_SETFOCUS:
        return 0;

    case WM_HOTKEY:
        if (wParam == 1)
            FindNext(false,false);
        if (wParam == 2)
            FindNext(true,false);
     if (wParam == 3 || wParam == 4)
::SendMessage(hDlg, WM_CLOSE, 0, 0);

        break;

    case WM_CLOSE:
        //~ UnregisterHotKey(hDlg,1);
        //~ UnregisterHotKey(hDlg,2);
    // Midas
    if (props.GetInt("find.inc.adv.keys")){
     UnregisterHotKey(hDlg,2);
    UnregisterHotKey(hDlg,3);
    UnregisterHotKey(hDlg,4);
        }

        ::SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
        break;

    case WM_COMMAND:
Автор: mozers
Дата сообщения: 25.02.2007 17:06
Ядро 1.72 .34Ru
EXE + DLL [446kB]
Source [324kB] (только измененные файлы)
Список всех доработок

Цитата:
[LowerUpperCase] (Автор: Midas) | Последняя правка: 24.02.2007
Корректная работа с русскими символами
- при переводе в нижний/верхний регистр (т.е. ChangeCase.lua больше не нужен!),
- при поиске без учета регистра
- при поиске с использованием регулярных выражений

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[IncrementalSearch.AddHotkeys] (Автор: Midas) | Последняя правка: 20.02.2007
Добавляет в "Быстрый поиск" (Ctrl+Alt+I) горячие клавиши:
- Enter или F3 - следующее вхождение
- Shift+Enter или Shift+F3 - предыдущее вхождение
Есть и еще одно незадокумментированное маленькое исправление, которое сделал сам Нейл. Раньше такая команда рушила SciTE:
Код: command.name.15.*=Run command in console
command.15.*=*cmd /k $(1)
command.mode.15.*=subsystem:shellexec
Автор: vladvro
Дата сообщения: 26.02.2007 08:38
Midas
Цитата:
Следующии исправления добавляют "[R/O]" в Табе для файлов "только для чтения"

у меня пожелание, добавить при открытии файла считывание его статуса R/O с параметров файла на диске.

и хочу выразить благодарность за доработки редактора, особо за более полную поддержку кирилицы
Автор: mozers
Дата сообщения: 26.02.2007 09:44
А я бы мечтал чтобы SciTE наконец научился писать (конечно, с предупреждением) в r/o файлы....
Автор: Midas
Дата сообщения: 26.02.2007 17:16
1)

Цитата:
у меня пожелание, добавить при открытии файла считывание его статуса R/O с параметров файла на диске.

Позавчера сделал
С этими изменениями в скриптах становятся доступными: FileAttr, FileDate, FileTime.

Код:

SciTEBase.cxx:3139
-----------------------------------------------------------------------
void SciTEBase::UpdateStatusBar(bool bUpdateSlowData) {
    if (sbVisible) {
        if (bUpdateSlowData) {
            SetFileProperties(propsStatus);
//!-start-[FileAttr in PROPS]    Midas 24.02.2007
            SetFileProperties(props);
//!-end
        }
-----------------------------------------------------------------------
SciTEIO.cxx:103
-----------------------------------------------------------------------
    props.Set("FilePath", filePath.AsFileSystem());
    props.Set("FileDir", filePath.Directory().AsFileSystem());
    props.Set("FileName", filePath.BaseName().AsFileSystem());
    props.Set("FileExt", filePath.Extension().AsFileSystem());
    props.Set("FileNameExt", FileNameExt().AsFileSystem());
//!-start-[FileAttr in PROPS]    Midas 24.02.2007
    SetFileProperties(props);
//!-end
    SetWindowName();
-----------------------------------------------------------------------
SciTEIO.cxx:783
-----------------------------------------------------------------------
bool SciTEBase::SaveBuffer(FilePath saveName) {
    bool retVal = false;
    // Perform clean ups on text before saving

//!-start-[FileAttr in PROPS]    Midas 24.02.2007
    SetFileProperties(props);
//!-end
-----------------------------------------------------------------------
Автор: vladvro
Дата сообщения: 27.02.2007 12:07
Midas, mozers

Цитата:
Скрипт ROCheck.lua - при открытии ReadOnly, Hidden, System файлов включает режим ReadOnly в SciTE

замечательно! проверил, работает
для скрипта есть небольшая оптимизация [more]
Код: local function ROCheck()
    -- Если среди аттрибутов ReadOnly/Hidden/System, и НЕ установлен режим R/O
    if string.find(props['FileAttr'], "[RHS]") and not editor.ReadOnly then
        -- то установим режим R/O
        scite.MenuCommand("IDM_READONLY")
    end
end
Автор: Midas
Дата сообщения: 27.02.2007 17:44
Добавил в LUA функций:
- os.msgbox(<Text>, <Title>, <Options>) - окно с сообщ. Возвращает выбранную кнопку;
- os.exec(<Cmd>, <WindowStyle>) - wrapper для WinExec;
- os.getfileattr(<FileName>) - возвращает Аттр. файла в виде числа;
- os.setfileattr(<FileName>, <FileAttr>) - устанавливает Аттр. файла;

Изменения:
liolib.c

Код:
liolib.c: 13
------------------------------------------------------
#include <time.h>

//!-start-[MSGBOX] Midas 27.02.2007
#include <windows.h>
//!-end

#define liolib_c
------------------------------------------------------
liolib.c: 541
------------------------------------------------------
static int io_execute (lua_State *L) {
lua_pushnumber(L, system(luaL_checkstring(L, 1)));
return 1;
}

//!-start-[MSGBOX] Midas 27.02.2007
static int io_exec (lua_State *L) {
int state = 0;
if (lua_gettop(L) > 1) {
     state = lua_tonumber(L, 2);
};
lua_pushnumber(L, WinExec(luaL_checkstring(L, 1), state));
return 1;
}

static int io_getfileattr (lua_State *L) {
lua_pushnumber(L, GetFileAttributes(luaL_checkstring(L, 1)));
return 1;
}

static int io_setfileattr (lua_State *L) {
lua_pushnumber(L, SetFileAttributes(luaL_checkstring(L, 1), lua_tonumber(L, 2)));
return 1;
}

static int io_msgbox(lua_State *L) {
    int options;
    const char *text = luaL_checkstring(L, 1);
    const char *title = "SciTE"; /* Default text for Title*/
    options = 0;
    if (lua_gettop(L) > 1) {
        title = luaL_checkstring(L, 2);
        if (lua_gettop(L) > 2) {
            options = lua_tonumber(L, 3);
        };
    };
    options = options + 8192; /* Task Modal*/
lua_pushnumber(L, MessageBox(0, text, title, options));
return 1; /* number of results */
}
//!-end

static int io_remove (lua_State *L) {
------------------------------------------------------
liolib.c: 762
------------------------------------------------------
{"execute", io_execute},
//!-start-[MSGBOX] Midas 27.02.2007
{"exec",     io_exec},
{"msgbox",     io_msgbox},
{"getfileattr",io_getfileattr},
{"setfileattr",io_setfileattr},
//!-end
{"exit", io_exit},
Автор: Cicatriz
Дата сообщения: 28.02.2007 17:13
Привет всем , как-то раз я уже писал в эту тему и спрашивал насчёт того как вызвать консоль(CMD) после компиляции, так вот теперь может кто-то подскажет как сделать тоже самое но теперь в линухе я пробывал туже команду прописывать но ни каких эмоций она не вызвала

заранее спасибо
Автор: nicckolay
Дата сообщения: 28.02.2007 21:39
Решил поделиться опытом.

Речь пойдёт о Snippets. Причем не о простых, а о таких какие рализованы в широко известном в узких кругах редакторе Textmate. Они так хороши что реализуют эти самые snippets теперь много где.
Например тут хорошо видно что это такое: http://intype.info/screencasts/snippets/ [3Mb flash]

Итак, это удовольсвие доступно и нам, хотя не в такой симпатичной обертке, но главное же функционал. Скрипт кстати не новый: http://caladbolg.net/scite_snippets.php

Итак, для интеграции этого чуда в наш scite нам понадобится файл Snippets.lua

Кладём его в нашу сборку: SciTE\tools\Snippets.lua

Теперь редактируем SciTE\tools\SciTEStartup.lua
( Настройки -> Открыть файл автоматизации Lua )
Добавляем в конец файла:

-- textmate like snippets
require (props["SciteDefaultHome"].."\\tools\\Snippets.lua")

Теперь редактируем сам SciTE\tools\Snippets.lua: добавим в него нужные нам snippets. Я для примера напишу пару для php.

Добавлять новый код будеем между
snippets.none.key = "['${1:}'] = { ${2:func}${3:, ${4:arg}} }"
и
-- options
(где-то около 26 строки)

Добавим следующее:
snippets[SCE_HPHP_DEFAULT] = {
['t'] = "$this->${0}",
['fun'] =
[[function ${1:name}(${2:})
{
${0}
}]],
}
Для примера этого хватит.

Если редактор при запуске не ругается значит пока все делали правильно.

Тепрь настроим клавиатурные сочетания по которым будут вызываться функции скрипта.

( Настройки -> Открыть файл пользовательских настроек )

Добавляем в конец:

# Snippets...
command.parent.37=10
command.name.37.*=Insert Snippet
command.37.*=dostring Snippets.insert()
command.mode.37.*=subsystem:lua,savebefore:no
command.shortcut.37.*=Ctrl+Space

command.parent.38=10
command.name.38.*=Cancel Snippet
command.38.*=dostring Snippets.cancel_current()
command.mode.38.*=subsystem:lua,savebefore:no
command.shortcut.38.*=Ctrl+Shift+Space

command.parent.39=10
command.name.39.*=List Snippets
command.39.*=dostring Snippets.list()
command.mode.39.*=subsystem:lua,savebefore:no
command.shortcut.39.*=Ctrl+Alt+Shift+Space

Сохраняем.

Теперь берём любой исходник на php.
Встаём на чистую строку.
Пишем
fun
жмем ctrl-space
видим появившися код в котором выделено имя функции.
Набираем новое. Опять жмём ctrl-space.
Курсор оказывается в области задания аргументов функции. Если нужно пишем что нужно. Опять жмём ctrl-space.
Курсор встаёт туда где определяется тело функции, с экрана пропадает маркер (слева там был) что говорит о том что snippet выполнился до конца.

Вот так.

Ещё следует добавить что без проблем у меня работает не самый свежий Snippets.lua
(блал с http://caladbolg.net/scite.php). Самый свежий (тут http://scite-tools.googlecode.com/svn/scripts/scite/) выдавал какие-то ошибки.

Автор: mirk
Дата сообщения: 01.03.2007 00:49
nicckolay, браво.
не удержался, выложил на сайт
Автор: nicckolay
Дата сообщения: 01.03.2007 16:37
Кстати, немного готовых snippet'ов можно найти тут:

http://scite-tools.googlecode.com/svn/scripts/

Например

ruby: http://scite-tools.googlecode.com/svn/scripts/ruby/snippets.lua
html: http://scite-tools.googlecode.com/svn/scripts/html/snippets.lua

Есть там и скрипт для генерации сниппетов (правда не для автоматической)

http://scite-tools.googlecode.com/svn/scripts/utils/gen_snippets.rb

Ну и впринципе можно написать конвертилку сниппетов из бандлов к редактору intype. Я пробовал, больше половины можно было преобразовать и пользоваться.

upd: вообщем написал скрипт для того чтоб конвертить snippets из intype. Результаты вполне терпимые, но руками поправить кое чего придется. Вот что получилось для php:


Код:
['class'] = [[#doc
#    classname:    ${1:ClassName}
#    scope:        ${2:PUBLIC}
#
#/doc

class ${1:ClassName} ${3:extends AnotherClass}
{
    #    internal variables
    
    #    Constructor
    function __construct ( ${4:argument} )
    {
        ${0}
    }
    ###    

}
###]],
['$_'] = [[$_COOKIE["${1:variable}"]${0}]],
['def'] = [[###    Begin ${1:} - ${2:}
        define( "${3:}", "${4:}" );
###    End $1

${0}]],
['def?'] = [[${1:}defined( "${2:}" )${0}]],
['do'] = [[do
{
    ${0}
    
} while ( ${1:$a <= 10} );]],
['else'] = [[else
{
    ${0}
}]],
['elseif'] = [[elseif ( ${1:condition} )
{
    ${0}
}]],
['$_'] = [[$_ENV["${1:variable}"]${0}]],
['$_'] = [[$_FILES["${1:variable}"]${0}]],
['for'] = [[for ( $${1:i}=${2:0}; $${1:i} < ${3:}; $${1:i}++ )
{
    ${0}
}]],
['foreach'] = [[foreach( $${1:variable} as $${2:key} => $${3:value} )
{
    ${0}
}]],
['function'] = [[${1:public }function ${2:FunctionName} (${3: $${4:value}${5:=""} })
{
    ${0}
}]],
['$_'] = [[$_GET["${1:variable}"]${0}]],
['-globals'] = [[$GLOBALS["${1:variable}"]${2: = }${3:something}${4:;}${0}]],
['if'] = [[if ( ${1:condition} )
{
    ${0}
}]],
['if?'] = [[$${1:retVal} = ( ${2:condition} ) ? ${3:a} : ${4:b} ;${0}]],
['ifelse'] = [[if ( ${1:condition} )
{
    ${2:# code...}
}
else
{
    ${3:# code...}
}
${0}]],
['incl'] = [[include( "${1:file}" );${0}]],
['incl1'] = [[include_once( "${1:file}" );${0}]],
['array'] = [[$${1:arrayName} = array( "${2:}"${3:,} );${0}]],
['php'] = [[<?php

    ${0}

?>]],
['$_'] = [[$_POST["${1:variable}"]${0}]],
['print'] = [[print "${1:string}"${2: . };${0}]],
['$_'] = [[$_REQUEST["${1:variable}"]${0}]],
['req'] = [[require( "${1:file}" );${0}]],
['req1'] = [[require_once( "${1:file}" );${0}]],
['ret0'] = [[return FALSE;${0}]],
['retres'] = [[return $resVal;${0}]],
['retret'] = [[return $retVal;${0}]],
['ret1'] = [[return TRUE;${0}]],
['$_'] = [[$_SERVER["${1:variable}"]${0}]],
['$_'] = [[$_SESSION["${1:variable}"]${0}]],
['switch'] = [[switch ( ${1:variable} )
{
    case "${2:value}":
        ${3:# code...}
    break;
    
    ${0}
            
    default:
        ${4:# code...}
    break;
}]],
['case'] = [[case "${1:variable}":
    ${0}
break;]],
['while'] = [[while ( ${1:$a <= 10} )
{
    ${0}
}]],
Автор: Midas
Дата сообщения: 01.03.2007 20:08

Цитата:
Столкнулся еще со следующей неприятностью: у меня включено автозакрытие braces.autoclose=1, при редактировании нажимаю Shift+5 в тексте появляется "%", а в окне консоли одна или несколько строк

Ошибка в braces_autoclose.lua. Можно решить проблему так:

Код:
if f~='%' then --- Если знак % то не проверять
brIdx =string.find(props['braces.open'],f,1)
end --- end
Автор: mozers
Дата сообщения: 01.03.2007 22:47
Midas nicckolay
Класс !
Надо вносить изменения в сборку... а у меня - завал
Автор: LASC
Дата сообщения: 02.03.2007 02:04
2mozers дадада, а то люди отлученые от с-компилятора смотрят и облизывают

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

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


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