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

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

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


Автор: Midas, Отправлено:22:02 19-02-2007
Извиняюсь, если тема обсуждалась...
Можно заставить 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, Отправлено:15:43 20-02-2007

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

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
[/more]
Автор: Midas, Отправлено:21:20 20-02-2007
Так кому-нибудь интересна тема поддержки русских символов Scite'ом ?
if TRUE then
Я посмотрел исходники N++, добавил аналогичные изменения в Scite'ое ядро, теперь работают для русских символов:
- Make Lower Case;
- Make Upper Case;
- Find;
- Find in files;

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

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

Midas
Ура!!! Ну наконец то нашелся человек, сделавший ЭТО
А сколько уже говорили про русский регистр...

Увы, протестировать оба изобретения я все еще не успел ((

Добавлено:
Тут Нейл согласился включить в основной код доработку, если кто то напишет ее.
Смысл в том, чтобы в окошке "Parameters" выводилась не сама команда, а ее имя, если оно имеется. (Это он так написал Че то затупил он что ли? Ведь если имя команды не задано то и работать она не будет Или я че не правильно перевел ???)
Цитата:
> [3] In Parameters dialog I see the command (i.e. text "cmd /k $(1)").
> IMHO many would like to see there a name (i.e. text "Run command in console").

I'll accept a well written patch that behaves as currently if no name is defined.
Так никто не хочет написать пару строк на C++ ?
Автор: vladvro, Отправлено:16:40 22-02-2007
mozers
Цитата:
А че ты коммент
Код:
local filename = props['CurrentSelection'] -- Ни хрена не работает Почему ???
убрал, а так и не объяснил отчего же так ?
С props['CurrentSelection'] можно было бы текст и из окна консоли обрабатывать... (editor:GetSelText() этого не могет)

ну мне было лень разбираться...
а про консольное окно как то забыл, вобщем вот код для замены этой строки:

Код:
local filename
if editor.Focus then
filename = editor:GetSelText()
else
filename = output:GetSelText()
end

а не работает, потому что это не запуск на выполнение скрипта, а вызов по событию, вобщем где то там не вызывается механизм обновления временных значений, будет время - подправлю.
Автор: Midas, Отправлено:22:38 23-02-2007
Еще блок мелких доработок:

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:

то при find.inc.adv.keys=1 по стрелкам вниз/вверх окно инкрем. поиска закроется, а по Ctrl+ENTER поиск будет вестись назад.

2) Следующии исправления добавляют "[R/O]" в Табе для файлов "только для чтения"
SciTEBase.h:
Строка: 225

Код:

class Buffer : public RecentFile {
public:
    sptr_t doc;
    bool isDirty;
    bool isRO; //Midas 23.02.2007 !!!!
    bool useMonoFont;
    UniMode unicodeMode;
    time_t fileModTime;
    time_t fileModLastAsk;
    enum { fmNone, fmMarked, fmModified} findMarks;
    SString overrideExtension;    ///< User has chosen to use a particular language
    FoldState foldState;
    Buffer() :
        RecentFile(), doc(0), isDirty(false), useMonoFont(false),
        unicodeMode(uni8Bit), fileModTime(0), fileModLastAsk(0), findMarks(fmNone), foldState() {
    }

    void Init() {
        RecentFile::Init();
        isDirty = false;
        isRO = false; //Midas 23.02.2007 !!!!

SciTEBase.cxx:
строка: 4134

Код:

    case IDM_READONLY:
        isReadOnly = !isReadOnly;
         // Midas 23.02.2007
buffers.buffers[buffers.Current()].isRO = isReadOnly;
SendEditor(SCI_SETREADONLY, isReadOnly);
        UpdateStatusBar(true);
        CheckMenus();
// Midas 23.02.2007
         BuffersMenu();
        break;


SciTEBuffers.cxx:
Строка: 813

Код:

            if (buffers.buffers[pos].isDirty) {
                strcat(entry, " *");
                strcat(titleTab, " *");
            }
// Midas
            if (buffers.buffers[pos].isRO) {
                strcat(entry, " [R/O]");
                strcat(titleTab, " [R/O]");
            }
//-----


Пока все
Автор: mozers, Отправлено:18:06 25-02-2007
Ядро 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, Отправлено:09:38 26-02-2007
Midas
Цитата:
Следующии исправления добавляют "[R/O]" в Табе для файлов "только для чтения"

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

и хочу выразить благодарность за доработки редактора, особо за более полную поддержку кирилицы
Автор: mozers, Отправлено:10:44 26-02-2007
А я бы мечтал чтобы SciTE наконец научился писать (конечно, с предупреждением) в r/o файлы....
Автор: Midas, Отправлено:18:16 26-02-2007
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
-----------------------------------------------------------------------

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

Код:

-- Скрипт для автоматической установки R/O режима для файлов
-- с устанав-ми аттрибутами RHS
-- Подключение:
-- Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\ROCheck.lua")
-- Автор: Midas
-----------------------------------------------
local function ROCheck()
-- Получим аттрибуты файла
local FileAttr = props['FileAttr']
-- Если среди аттрибутов ReadOnly/Hidden/System, и НЕ установлен режим R/O
if string.find(FileAttr, "[RHS]") and not editor.ReadOnly then
-- то установим режим R/O
scite.MenuCommand("IDM_READONLY")
end
end

-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
local result
if old_OnOpen then result = old_OnOpen(file) end
if ROCheck() then return true end
return result
end


2)
Цитата:
А я бы мечтал чтобы SciTE наконец научился писать (конечно, с предупреждением) в r/o файлы....

Я как раз над этим думаю... (В моем прошлом исп-ом редакторе PSPad такое было. (но не было многих вещей к-ые есть в SciTE ))

3) по-поводу строки состояния: увеличить кол-во текста можно используя не простую строку состояния, а сост-ую из секций (Как, например, в Word'е). Будет время - подумаю, как это сделать

4)
Цитата:
и хочу выразить благодарность

Наша задача - популяризовать SciTE

Добавлено:

Цитата:
Я как раз над этим думаю...

Придумал (в виде скрипта)
Минусы этого решения:
- используется внешняя команда ATTRIB, следовательно будет мигать консольное окно;
- даже 2 раза;
- не предупреждает о том, что файл RO/Hidden/System (можно сделать уведомление в консоли);
Плюсы
- сохраняет RO/Hidden/System файлы молча.

Скрипт надо подключать к модиф-му SciTE'у (должны быть изменения FileAttr).
ROWrite.lua

Код:

-- Скрипт для поддержки сохранения RO файлов
-- Подключение:
-- Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\ROWrite.lua")
-- Автор: Midas
-----------------------------------------------
local function BSave(FN)
-- Получим аттрибуты файла
local FileAttr = props['FileAttr']
if (string.find(FileAttr, "R")
or string.find(FileAttr, "H")
or string.find(FileAttr, "S"))
then
--     print("Change FileAttr: "..FileAttr)
     os.execute("attrib -r -h -s \""..FN.."\"")
end
end

local function AfterSave(FN)
-- Получим аттрибуты файла
local FileAttr = props['FileAttr']
local Attr = ""
    if string.find(FileAttr, "R") then
     Attr = Attr.." +R "
    end
    if string.find(FileAttr, "H") then
     Attr = Attr.." +H "
    end
    if string.find(FileAttr, "S") then
     Attr = Attr.." +S "
    end
    if string.len(Attr) > 0 then
        Attr = "attrib "..Attr.."\""..FN.."\""
--        print(Attr)
        os.execute(Attr)
    end
end

-- Добавляем свой обработчик события OnBeforeSave
local old_OnBeforeSave = OnBeforeSave
function OnBeforeSave(file)
local result
if old_OnBeforeSave then result = old_OnBeforeSave(file) end
if BSave(file) then return true end
return result
end

-- Добавляем свой обработчик события OnSave
local old_OnSave = OnSave
function OnSave(file)
local result
if old_OnSave then result = old_OnSave(file) end
if AfterSave(file) then return true end
return result
end


Автор: vladvro, Отправлено:13:07 27-02-2007
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
[/more]
Автор: Midas, Отправлено:18:44 27-02-2007
Добавил в 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},


С этими изменениями при использовании следующего скрипта при сохран. RO файла появится сообщ. о том сохр-ть или нет, если да -> сохраняет файл без миганий консоли, иначе появится SciTE вопрос о сохранении под другим именем.
ROWrite.lua

Код:

-- Скрипт для поддержки сохранения RO/Hidden/System файлов
-- Подключение:
-- Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\ROWrite.lua")
-- Автор: Midas
-----------------------------------------------
local function BSave(FN)
-- Получим аттрибуты файла.
    local FileAttr = props['FileAttr']
    local FAttr = os.getfileattr(FN)
    props['FileAttrNumber'] = 0
if string.find(FileAttr, '[RHS]') then -- Если в файл нельзя записать, то спросим
        if os.msgbox("Файл доступен только для чтения."
.." Все равно сохранить ?\n"
.."Аттрибуты файла: "..FileAttr, "SciTE", 65)==1 then
            -- сохраним текущии, затем снимем все аттрибуты
         props['FileAttrNumber'] = os.getfileattr(FN)
            os.setfileattr(FN, 2080)
        end
    end
end

local function AfterSave(FN)
-- Если была сохранена строка с аттрибутами, то установим их
local FileAttrNumber = tonumber(props['FileAttrNumber'])
if FileAttrNumber > 0 then
os.setfileattr(FN, FileAttrNumber)
    end
end

-- Добавляем свой обработчик события OnBeforeSave
local old_OnBeforeSave = OnBeforeSave
function OnBeforeSave(file)
    local result
    if old_OnBeforeSave then result = old_OnBeforeSave(file) end
    if BSave(file) then return true end
    return result
end

-- Добавляем свой обработчик события OnSave
local old_OnSave = OnSave
function OnSave(file)
    local result
    if old_OnSave then result = old_OnSave(file) end
    if AfterSave(file) then return true end
    return result
end

Еще одной фичей больше
Автор: Cicatriz, Отправлено:18:13 28-02-2007
Привет всем , как-то раз я уже писал в эту тему и спрашивал насчёт того как вызвать консоль(CMD) после компиляции, так вот теперь может кто-то подскажет как сделать тоже самое но теперь в линухе я пробывал туже команду прописывать но ни каких эмоций она не вызвала

заранее спасибо
Автор: nicckolay, Отправлено:22:39 28-02-2007
Решил поделиться опытом.

Речь пойдёт о 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:49 01-03-2007
nicckolay, браво.
не удержался, выложил на сайт

Автор: nicckolay, Отправлено:17:37 01-03-2007
Кстати, немного готовых 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}
}]],


Как видите ['$_'] во первых неоднократо, во вторых у меня не срабатывают.
Вообщем я предпочитаю писать свои.

Да, кстати вот скрипт:

Код:

def get_snippet_content(filename)
    File.open( filename ) do |file|
        file_content = file.readlines.join

        tab_trigger = file_content.scan( /tab_trigger:\s?'(.+?)'/m )[0][0]
        content = file_content.scan( /content:\s?'(.+?)'$/m )[0][0]
        
        content[/\$\{0:.+?\}/m] = '${0}' unless content[/\$\{0:.+?\}/m].nil?
        content['$0'] = '${0}' unless content['$0'].nil?
        content['$1'] = '${1:}' unless content['$1'].nil?
        content['$2'] = '${2:}' unless content['$2'].nil?
        content['$3'] = '${3:}' unless content['$3'].nil?
        content['$4'] = '${4:}' unless content['$4'].nil?
        content['$5'] = '${5:}' unless content['$5'].nil?
        content.sub!('\\$','$') while !content['\\$'].nil?
        content.sub!("''",'"') while !content["''"].nil?
        content << '${0}' if content[/\$\{0\}/m].nil?

        "['#{tab_trigger}'] = [[#{content}]],"
    end
end

Dir['snippets/*'].each do |filename|
    #~ puts "-- #{filename}"
    puts get_snippet_content(filename)
end

Предупреждаю сразу что он очень сырой. Конвертить будет не люьой bundle от intype, не учитывает клавиатурный вызов снипетов, не учитывает всячески $SELECTED_TEXT и т.п. Он просто тупо выкусывает куски из шаблонов и заворацивает в нужные [] и т.п.
Автор: Midas, Отправлено:21:08 01-03-2007

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

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

Код:

if f~='%' then --- Если знак % то не проверять
brIdx =string.find(props['braces.open'],f,1)
end --- end

Автор: mozers, Отправлено:23:47 01-03-2007
Midas nicckolay
Класс !
Надо вносить изменения в сборку... а у меня - завал
Автор: LASC, Отправлено:03:04 02-03-2007
2mozers дадада, а то люди отлученые от с-компилятора смотрят и облизывают



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