Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux

Модерирует : gyra, Maz

Widok (09-10-2007 14:48): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Spab



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

A free source code editor for Win32 and X
Русскоязычный форум поддержки

  • Один из самых настраиваемых текстовых редакторов из ныне существующих. Настраивается практически все.
  • Индивидуальная подсветка для разных языков програмирования, фолдинг для классов, функций и структур, авто-дополнение, и т.д. и т.п. ...
     
  • Scite-interest -- Discussion of the SciTE editor
  • Русский сайт SciTE (документация, FAQ, снимки экрана, утилиты, скрипты и т.д. и т.п....)
  • Мечта кодера. статья
  • Burgaud.com - US.SciTE
  • SciTE: Scintilla Text Editor with Extensions
  • Filerx, SideWinder
  • ......
     
       
  • Project file releases
  • Project summary (including basic statistics)
  • Новости со SciTE.ru
     
    Последняя версия редактора - SciTE 1.74
     
    SciTE 1.74 .52Ru-Board Edition [Сборка 20.09.2007]
    Oписание: сборки ядра  
     
    Дружественная тема: Доработка исходного кода и компилирование сборки Ru-Board Edition
     
    Нерешенные задачи и вопросы ( Для умных и талантливых форумчан )
     
    P.S. Если вы используете SciTE для своих нужд, таких как: написание HTML, CSS, Java Script, PHP и др. кода для сайта, или просто вам нравится этот редактор, поставьте пожалуйста ссылку или баннер на сайт - http://scite.ruteam.ru, благодаря этому у сайта повышается индекс цитирования, соответственно увеличивается количество пользователей редактора.

  • Всего записей: 64 | Зарегистр. 02-09-2001 | Отправлено: 03:05 04-06-2002 | Исправлено: mozers, 13:45 04-10-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Извиняюсь, если тема обсуждалась...
    Можно заставить 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

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 22:02 19-02-2007
    vladvro



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

    Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 15:43 20-02-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Так кому-нибудь интересна тема поддержки русских символов Scite'ом ?
    if TRUE then
    Я посмотрел исходники N++, добавил аналогичные изменения в Scite'ое ядро, теперь работают для русских символов:
    - Make Lower Case;
    - Make Upper Case;
    - Find;
    - Find in files;
     
    Нерешенные проблемы:
    - Все это будет работать (скорее всего) только в Win, т.к. исп-ся системные функции;
    - Соответственно поддерживается только кодировка 1251
    Могу выложить измененные файлы.
    end if

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 21:20 20-02-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Измененные файлы (для сборки Ru-Board) для поддержки русских букв.
    http://kmidas.narod.ru/files/Scite_RU.zip

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 08:54 21-02-2007
    mozers



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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++ ?

    Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 00:33 22-02-2007
    vladvro



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mozers
    Цитата:
    А че ты коммент
    Код:
    local filename = props['CurrentSelection'] -- Ни хрена не работает Почему ???
    убрал, а так и не объяснил отчего же так ?
    С props['CurrentSelection'] можно было бы текст и из окна консоли обрабатывать... (editor:GetSelText() этого не могет)  

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

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

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

    Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 16:40 22-02-2007 | Исправлено: vladvro, 16:41 22-02-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Еще блок мелких доработок:
     
    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]");
                }
    //-----
     

     
    Пока все

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 22:38 23-02-2007
    mozers



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ядро 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
     
    Теперь все отрабатывает наилучшим образом

    Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 18:06 25-02-2007
    vladvro



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midas
    Цитата:
    Следующии исправления добавляют "[R/O]" в Табе для файлов "только для чтения"

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

    Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 09:38 26-02-2007
    mozers



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А я бы мечтал чтобы SciTE наконец научился писать (конечно, с предупреждением) в r/o файлы....

    Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 10:44 26-02-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    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
     


    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 18:16 26-02-2007 | Исправлено: Midas, 22:29 02-03-2007
    vladvro



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midas, mozers

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

    замечательно! проверил, работает
    для скрипта есть небольшая оптимизация Подробнее...

    Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 13:07 27-02-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добавил в 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
     

    Еще одной фичей больше

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 18:44 27-02-2007 | Исправлено: Midas, 22:26 02-03-2007
    Cicatriz



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем , как-то раз я уже писал в эту тему и спрашивал насчёт того как вызвать консоль(CMD) после компиляции,  так вот теперь может кто-то подскажет как сделать тоже самое но теперь в линухе я пробывал туже команду прописывать но ни каких эмоций она не вызвала
     
    заранее спасибо

    Всего записей: 359 | Зарегистр. 06-10-2003 | Отправлено: 18:13 28-02-2007
    nicckolay

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Решил поделиться опытом.
     
    Речь пойдёт о 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/) выдавал какие-то ошибки.
     

    Всего записей: 3 | Зарегистр. 28-02-2007 | Отправлено: 22:39 28-02-2007
    mirk



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    nicckolay, браво.
    не удержался, выложил на сайт

    Всего записей: 247 | Зарегистр. 21-05-2003 | Отправлено: 01:49 01-03-2007 | Исправлено: mirk, 02:04 01-03-2007
    nicckolay

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кстати, немного готовых 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 и т.п. Он просто тупо выкусывает куски из шаблонов и заворацивает в нужные [] и т.п.

    Всего записей: 3 | Зарегистр. 28-02-2007 | Отправлено: 17:37 01-03-2007 | Исправлено: nicckolay, 19:54 01-03-2007
    Midas



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

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

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

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

    Всего записей: 34 | Зарегистр. 22-03-2006 | Отправлено: 21:08 01-03-2007
    mozers



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Midas nicckolay
    Класс !
    Надо вносить изменения в сборку... а у меня - завал

    Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 23:47 01-03-2007
    LASC

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2mozers дадада, а то люди отлученые от с-компилятора смотрят и облизывают

    Всего записей: 6 | Зарегистр. 20-01-2006 | Отправлено: 03:04 02-03-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux
    Widok (09-10-2007 14:48): лимит страниц. продолжаем здесь


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru