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

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

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


Автор: mozers, Отправлено:18:50 12-03-2007
Я не "не успел залить". Я не могу залить
Аплоад файлов больше 100кБ обрывается
И че там mirk наконфигурил
А FTP то на scite.ruteam.ru нету ((
Отослал (еще прошлой ночью) ему все файло чтоб залил, а от него - ни слуху ни духу
Автор: dB6, Отправлено:19:16 12-03-2007
mozers
Пришли мне, попробую.
Ну или попробую выложить куда-нить, мот на общий фтп.

Добавлено:
А еще лучше было бы, если бы ты в аське появился
Автор: mozers, Отправлено:21:34 12-03-2007
не без помощи dB6 ...
SciTE 1.72 .36Ru-Board Edition [Сборка 12.03.2007]
Полное описание

Цитата:
  • Новое ядро .36Ru - множество новых возможностей
  • Добавлены новые переводы статей из документации SciTEDirector_rus.html и SciTELua_rus.html (Автор: s_mart)
  • Вся переведенная документация сведена в единую справочную систему и снабжена перекрестными ссылками.
  • Добавлен русский справочный файл по языку LUA (выделяем ключевое слово и нажимаем F1)
  • Новые скрипты: Open_Selected_Filename.lua, ROCheck.lua, ROWrite.lua
  • Доработаны скрипты: AutocompleteObject.lua, auto_backup.lua, FuncProcList.lua, ReadOnly.lua, html_tags_autoclose.lua
  • Доработаны API файлы: SciTELua.api, vbscript.api


Ядро 1.72 .36Ru
EXE + DLL [449kB]
Source [388kB] (только измененные файлы)
Список всех доработок

Цитата:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ParametersDialogFromLua] (Автор: VladVRO)
В LUA Extention добавлена функция для вызова диалогового окна "Параметры" (Shift+F8)
scite.ShowParametersDialog(text)
где text - короткий комментарий в окне параметров.
Возвращает false если пользователь отказался (нажал отмену или Escape) иначе true.
Пример:
function Dialog()
props["1"]=props["CurrentSelection"]
props["2"]=props["SciteDefaultHome"]
if scite.ShowParametersDialog("Please set params") then
print ("1="..props["1"].."\n2="..props["2"].."\n3="..props["3& quot;].."\n4="..props["4"])
else
print ("Cancel")
end
end

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

local function AfterSave(FN)
-- Восстановим атрибуты файла после его сохранения
if FileAttrNumber > 8208 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
[/more] теперь сохраняет нормально

Добавлено:
извините, поспешил глючит так же как и предыдущий Почему ??? - неясно...
Автор: Midas, Отправлено:10:12 13-03-2007
Существует Lister-плагин для Total Commander'а позволяющий открывать вместо Lister'а
любую программу. Link: http://wincmd.ru/plugring/edloader.html
Напрямую настроить ее для работы со SciTE'ом у меня не получилось (Параметры прог. передаются после имени файла, а это не нравиться SciTE'у)
Написал маленькую программу для запуска SciTE'а: http://kmidas.narod.ru/files/sv.zip
Ее надо положить в папку SciTE'а, затем настроить sv.ini, AppLoader.ini

PS: У AppLoader'а есть серьезная проблема: при просмотре файлов из архива они удаляются раньше, чем запуститься программа.

mozers !

Посмотри скрипт еще раз: vladvro предложил изменения (to_number...) Если не поможет, то выложи сюда, что и на какой Win показывает os.getfileattr()
PS2: C багой ReadOnly в табе борюсь
Автор: vladvro, Отправлено:15:35 13-03-2007
Midas
Цитата:
Посмотри скрипт еще раз: vladvro предложил изменения (to_number...) Если не поможет, то выложи сюда, что и на какой Win показывает os.getfileattr()
я сам потестил еще, мое изменение не лечит проблему, т.к. она кроется в os.getfileattr(),
у меня WindowsXP (sp2),
вот то, что выдает функция на только что созданый файл с атрибутом [R]: 4294967295
и вот то, что выдает при корректной работе с файлом [R]: 33
Автор: mozers, Отправлено:16:43 13-03-2007
vladvro Midas
Да. Имено так (у меня так же ХР SP2 NTFS). Тестил с помощью
Код:
command.name.290.*=FileAttrNumber
command.290.*=dostring print(props["FilePath"].." = "..os.getfileattr(props["FilePath"]))
command.mode.290.*=subsystem:lua,savebefore:no
command.shortcut.290.*=Alt+1
На 2 файла с одинаковыми атрибутами выдаются совершенно разные числа
ИМХО лучше бы переписать саму процедуру сохранения файла, чтобы SciTE не ругался, а не снимать, а потом вновь устанавливать атрибуты скриптом.
Автор: mozers, Отправлено:23:00 13-03-2007
Midas
Цитата:
Написал маленькую программу для запуска SciTE'а: http://kmidas.narod.ru/files/sv.zip
Я так понял, что она делает то же самое что мой батничек:
Код:
@START "" "G:\SciTE\SciTE.exe" -property:toolbar.visible=0 -property:tabbar.visible=0 -property:save.recent=0 -property:save.session=0 -property:ADDITIONAL_SHORTCUTS=Escape^|IDM_QUIT^| "%1" -menucommand:416

Цитата:
У AppLoader'а есть серьезная проблема: при просмотре файлов из архива они удаляются раньше, чем запуститься программа.
Имхо надо автора долбить...


Добавлено:
Придумал способ для запуска внешних приложений из lua скрипта:
Код:
function command(cmd, mode)
local p0 = props["command.name.299.*"]
local p1 = props["command.299.*"]
local p2 = props["command.mode.299.*"]
props["command.name.299.*"] = 'tmp'
props["command.299.*"] = cmd
props["command.mode.299.*"] = 'subsystem:'..mode..',replaceselection:no,savebefore:no'
scite.Perform("menucommand:2299")
--~     scite.MenuCommand(2299)
props["command.name.299.*"] = p0
props["command.299.*"] = p1
props["command.mode.299.*"] = p2
end

command('CMD /C TIME /T', 'console')
И все бы хорошо (можно запускать и в скрытом виде и с использованием различных режимов и пр. возможностями) да только циклят и -scite.Perform и -scite.MenuCommand по страшному
Автор: Midas, Отправлено:09:59 14-03-2007
1) vladvro mozers
На томах с NTFS есть дополнительные аттрибуты: Индексирование, Сжат/Зашифрован
Скорее всего файлы имеют разные дополнительные аттрибуты. Такую ситуацию Я проверял на разных томах/компах/системах, все работает
Просьба: выложите сюда дополнительные аттрибуты этих файлов.


Цитата:
ИМХО лучше бы переписать саму процедуру сохранения файла, чтобы SciTE не ругался, а не снимать, а потом вновь устанавливать атрибуты скриптом.

Будет то же самое: снимаем аттрибуты, сохраняем, устанавливаем. Без снятия аттрибутов не обойтись: в R/O файлы в принципе нельзя ничего записать (на то и аттрибут .
И вообще, IMHO лучше реализовывать все дополнения к SciTE'у через Lua

2)mozers

Цитата:
Я так понял, что она делает то же самое что мой батничек:

Да, но без мигания консольного окна
Автор: mozers, Отправлено:15:44 14-03-2007
Midas
Цитата:
На томах с NTFS есть дополнительные аттрибуты
Точно так и могут быть и другие. Надо из циферы выделять только RHS отбрасывая все остальное. Идеальный случай - сделать так чтобы set|getfileattr возвращал/устанавливал строковое значение в формате "ARHS"

Цитата:
выложите сюда дополнительные аттрибуты этих файлов
Вот что выдает os.getfileattr на файлы с установленными атрибутами
Код:
-- = 128
A = 32
AO = 12576
O = 12544
Что за атрибут O не спрашивайте меня - сам в недоумении что за хрень?

Цитата:
в R/O файлы в принципе нельзя ничего записать
Вообще то я всю зисть считал что атрибут - не более чем условность и если ее нарушить то писать можно в любой файл. Ты уверен? Возможно что я тут ошибаюсь...

Цитата:
Да, но без мигания консольного окна
Ну мне это дело тоже не нравится, поэтому пожаловался автору и он обещал вскорости добавить возможность запуска SciTE с параметрами непосредственно из AppLoader.
Автор: Midas, Отправлено:18:26 14-03-2007
mozers

Цитата:
атрибут - не более чем условность

Гм... Смысл тогда в аттрибуте ? Все программы которые пишут в RO файлы
сначала снимают, затем устанавливают аттрибуты.
Вопрос (для снятия/установки аттр.) знающим больше меня в LUA: Как узнать установлен ли бит в числе (и как установить какой-то бит) ?
Автор: codewarlock1101, Отправлено:23:14 14-03-2007
Midas
Предлагаю использовать дла снятия ридонли вбс-скрипт. который запускается из луа (плохо что только решение это не кроссплатформенное)
Автор: mimir, Отправлено:12:44 15-03-2007
Я почему-то считал что при установки Scite файл пользовательских настроек не переписываеться, ан нет. Может стоит его вообще убрать. На то они и пользовательские чтобы их писал только пользователь.

Цитата:
Как узнать установлен ли бит в числе (и как установить какой-то бит) ?

Вот набросал. Я сам не очень в LUA. Там нет проверок на границы, да и с отр. числами не очень.

Цитата:
function ToBin(Num)
local bin_n={};
local i=1;
while (Num>0)do
bin_n[ i ] = math.fmod (Num , 2);
Num = math.floor(Num / 2);
i = i + 1;
end;
return bin_n;
end;

function IsSetBit(Num, Bit)
local bin = ToBin(Num);
if( table.getn(bin) <= Bit )then
return false;
end;
return (bin[ Bit+1 ]==1);
end;

function SetBit(Num, Bit)
if(IsSetBit(Num, Bit))then
return Num;
end;
return Num + 2^Bit;
end

function ResetBit(Num, Bit)
if(IsSetBit(Num, Bit))then
return Num - 2^Bit;
end;
return Num;
end


Автор: vladvro, Отправлено:15:41 15-03-2007

Цитата:
Как узнать установлен ли бит в числе (и как установить какой-то бит) ?

предлагаю другой вариант решения, для меня правда C не родной язык, но вроде работает правильно.

тест:
Код:
local i = 0
i = math.setbit(i, 4, 1)
print(i, math.getbit(i, 4))
i = math.setbit(i, 4, 0)
print(i)

--- результат:
16 1
0


решение:
добавляем в файл lmathlib.c строка 205
Код:
static int math_getbit (lua_State *L) {
int val = luaL_checkint(L, 1);
int bit = luaL_checkint(L, 2);
if (bit<0 || bit>63) return luaL_error(L, "bit must be between 0 and 63");
lua_pushnumber(L, (val&(1<<bit))>0?1:0);
return 1;
}


static int math_setbit (lua_State *L) {
int val = luaL_checkint(L, 1);
int bit = luaL_checkint(L, 2);
int on = luaL_checkint(L, 3);
if (bit<0 || bit>63) return luaL_error(L, "bit must be between 0 and 63");
if (on<0 || on>1) return luaL_error(L, "bit value must be 0 or 1");
lua_pushnumber(L, on==1?(val|(1<<bit)):(val-(val&(1<<bit))));
return 1;
}

и строка 249
Код:
{"randomseed", math_randomseed},
{"getbit", math_getbit},
{"setbit", math_setbit},



mozers
новый AutocompleteObject.lua (version 1.3) ломается при вводе символа %

mimir
Цитата:
Я почему-то считал что при установки Scite файл пользовательских настроек не переписываеться, ан нет. Может стоит его вообще убрать.

а я уже об этом говорил...

Автор: Midas, Отправлено:16:01 15-03-2007

Цитата:
новый AutocompleteObject.lua (version 1.3) ломается при вводе символа %

Возможное решение проблемы:
AutocompleteObject.lua: 53
Заменить

Код:

if char ~= " " then

на

Код:

if char ~= " " and char ~= "%" then


Автор: mimir, Отправлено:17:01 15-03-2007

Цитата:
предлагаю другой вариант решения, для меня правда C не родной язык, но вроде работает правильно

Мне кажется, что код не критичный по времени стоит писать на уровне скриптов, если это конечно возможно, но если хочется реализовать в виде С-функции то стоит задуматься о своей библиотеки. LUA позволяет очень просто подключать библиотеки написаные в виде DLL. Это позволяет во первых избавиться от изменения кода, а во вторых использовать эти функции не только в Scite, но в том числе и для отладки скриптов сторонними утилитами.
Например я создал библиотеку batlib.dll куда поместил функции

Цитата:
io_exec
io_msgbox
io_getfileattr
io_setfileattr

Для подключения этой библиотеки достаточно просто написать require('batlib');
Для использования можно batlib.exec , a если хочеться именно через библиотеку os то можно сделать загрузчик который грузит DLL и перекидывает функции в нужную таблицу.
Правда я пользуюсь LUA 5.1 (для нее и собирал библиотеку) а там были изменения. Вроде в 5.0 загружать DLL можно только через LoadLib.
А кстати еще не было перехода в Scite на lau 5.1 ?


Добавлено:
Вот скрипт для обработки атрибутов файла в виде таблицы.
Атрибуты можно добовлять по вкусу.


Цитата:
function SetBitValue ( Num, Bit, val )
if(val == '1' or val == 1 or val == true)then
return SetBit ( Num, Bit );
else
return ResetBit(Num, Bit);
end;
end;

function getfileattr_ex(FileName)
local attr_i = os.getfileattr(FileName);
local attr = {};
attr.ro = IsSetBit(attr_i,0);
attr.hide = IsSetBit(attr_i,1);
return attr;
end;

function P.setfileattr_ex(FileName, attr)
local attr_i = os.getfileattr(FileName);

if(attr.ro ~= nil) then
attr_i = SetBitValue(attr_i,0,attr.ro);
end;

if(attr.hide ~= nil) then
attr_i = SetBitValue(attr_i,1,attr.hide);
end;

os.setfileattr(FileName,attr_i);
return attr;
end;


пример

Цитата:
--получить атрибуты
attr = getfileattr_ex([[c:\test.txt]]);

attr.ro = true; -- Установить
attr.hide = nil; -- Не менять
setfileattr_ex([[c:\test.txt]],attr);




Автор: vladvro, Отправлено:18:17 15-03-2007
это все хорошо, вот только главной проблемы это не лечит, если функция os.getfileattr(FileName) возвращает не верные данные, число 4294967295 = 2^32-1, т.е. все биты в 1.

Midas
откуда взялось число 2080 для снятия атрибутов?
Автор: mimir, Отправлено:18:36 15-03-2007
Это очень похоже на ошибку. У меня это значение выдаеться при отсутствии файла.


Цитата:
The GetFileAttributes function retrieves a set of FAT file system attributes for a specified file or directory
*****
If the function succeeds, the return value contains the attributes of the specified file or directory.

If the function fails, the return value is INVALID_FILE_ATTRIBUTES.


Цитата:
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)




Добавлено:
вроде это то что нужно. У меня стоит только FAT пожтому не могу тестировать.

Цитата:
The GetFileAttributes function retrieves a set of FAT file system attribute information. GetFileAttributesEx can obtain other sets of file or directory attribute information. Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the FAT file system attribute information.





Добавлено:

Цитата:
void push_lasterr(lua_State *L, LPTSTR lpszFunction) {
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );

lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
    
    lua_pushstring(L,(LPTSTR)lpDisplayBuf);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
}

static int l_getfileattr (lua_State *L) {
    const char*FN = luaL_checkstring(L,-1);
    WIN32_FILE_ATTRIBUTE_DATA fad;
    if(0==GetFileAttributesEx(FN,GetFileExInfoStandard ,&fad)){
        lua_pushnil(L);
        push_lasterr(L,"\"getfileattr\"");
        return 2;
    }
    lua_pushnumber(L, fad.dwFileAttributes);
    return 1;
}

static int l_setfileattr (lua_State *L) {
    const char *FN = luaL_checkstring(L,-2);
    DWORD attr = luaL_checkint(L,-1);
    if(0 == SetFileAttributes(FN, attr)){
        lua_pushnil(L);
        push_lasterr(L,"\"setfileattr\"");
        return 2;
    }
    lua_pushinteger(L, 1);
    return 1;
}


Автор: vladvro, Отправлено:12:20 16-03-2007
mimir
Цитата:
Это очень похоже на ошибку. У меня это значение выдаеться при отсутствии файла.

ты оказался прав на все 100%
вот что теперь выдает мне скрипт:
Цитата:
> "getfileattr" failed with error 2: Не удается найти указанный файл.

да у меня не FAT, а так же как и у mozers NTFS, и такое происходит стабильно на вновь созданный файл с новым именем.

с кодом пришлось немного повозиться:
1. не нашлось определения для StringCchPrintf, я добавил <strsafe.h>, но как я уже и говорил, я в С не силен, т.ч. если я не прав, то поправь.

2. выдало предупреждение и не захотело линковаться с функцией lua_pushinteger, я заменил ее на lua_pushnumber.

3. дописал скрипт ROWrite.lua:
Код:
    -- сохраним текущии, затем снимем все аттрибуты
    local FileAttrNumber, err = os.getfileattr(FN)
    if (FileAttrNumber == nil) then
        print("> "..err)
        props['FileAttrNumber'] = 32 + iif(string.find(FileAttr,'R'),1,0) + iif(string.find(FileAttr,'H'),2,0) + iif(string.find(FileAttr,'S'),4,0)
    else
        props['FileAttrNumber'] = FileAttrNumber
    end
    os.setfileattr(FN, 2080)

Автор: mimir, Отправлено:14:23 16-03-2007
Я использую для написагия скриптов lua.exe ( версия 5.1 ).
И все собирал и проверял именно на нем.
Дополнил свою BatLib.DLL новыми функциями и написал тестовый скрипт.

Код:
require ("batlib");

res,err = batlib.getfileattr([[test.txt]])
print (batlib.tooem(res), batlib.tooem(err));

res,err = batlib.setfileattr([[test.txt]],32)
print (batlib.tooem(res), batlib.tooem(err));

Мечта - чтобы это работало и в Scite.
Для этого нужно либо пересобрать DLL с Lua 5.0 и переписать загрузчик библиотеки ,
либо использовать Scite c Lua 5.1.
Щас хочу попробывать Scite с LUA 5.1.
Пересобирать баблиотеки не хочу.
А может скоро выпустят и офф. версию с 5.1.


Цитата:
дописал скрипт ROWrite.lua:

А зачем? ИМХО лучше нормально сделать возврат сообщения об ошибки.
Я просто содрал пример с MSDN (заменив MessageBox на lua_pushstring).


Добавлено:
ЗЫ. А как выделять текст, чтоб он подсвечивался как LUA (ну типа local, if ...)?



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