Заха́р
Мне сейчас уходить надо, позже отпишусь.
Snusmumriken
Через консоль — у тебя не будет функций SysUtils.ExtractFileName, они относятся к твоей фиговине (файл-менеджеру?), так что не получится.
Snusmumriken
Пиши логи в файл.
Snusmumriken
function getLog(filename)
return function(text)
local f = assert(io.open(filename, "wb"))
f:write(tostring(text) .. "\n")
f:close()
end
end
local log = getLog("/home/mylog.log")
log("Это сообщение будет записано в файлик")
log("И это тоже")
Snusmumriken
И вот теперь используй это вместо print'а, смотри что конкретно ты переименовываешь и во что.
Highly Likely
Комрады, есть тут виндузятники в связке Lua + Sublime + Luarocks? Какие подводные камни настройки? Куда идти, что заранее чинить?
Snusmumriken
Заранее ставить vs/mingw и писать в конфиг луарокса пути до канпелятора/либ.
Highly Likely
Понял, спасибо
Snusmumriken
В остальном проблем особо быть не должно.
Highly Likely
Жизнь всё-таки меня привела к разработке на винде :(
Snusmumriken
Велком
Snusmumriken
Leon174
Ну, фиг знает насчет отсутствия проблем. Я вот подобное, например, хапнул, только у меня другая версия busted не ставилась. По итогу послал в жопу и luarocks, и busted. Если есть выбор, пользуюсь вариантами на pure lua. Вместо того же busted прекрасно подошел lust. Винда, конечно, та еще боль.
https://github.com/Olivine-Labs/busted/issues/169
Highly Likely
Классно, мне то бастед пригодится :)
Highly Likely
Highly Likely
А то у меня luarocks считает, что он 5.3, хотя луашка стоит 5.2
Lämppi
Lämppi
Полный доступ к внутрянке?
Snusmumriken
Потому что весь интерпретатор — это стековый автомат, а c-api модифицирует состояние этого стекового автомата. Внутри самих луёв нет каких-то объектов и их конвертации.
Хотя, разумеется, у меня есть обёртка выгрузки в луа структур/методов как объектов, кто бы мог подумать.
Александр
низкоуровневый и детальный API позволяет построить поверх него любой высокоуровневый, при желании.
наоборот не прокатит
Snusmumriken
Плюс за счёт стековости и простоты, биндинги делаются в три тычки. Ты пробовал биндить питон или жаваскрипт?
Насколько просто там биндить простые штуки, и насколько просто что-то сколько-нибудь сложное?
Snusmumriken
А, сорян
Snusmumriken
io.open(filename, "a+")
Заха́р
Отлично! Теперь все строки выводит.
Но только, которые внутри
log("...")
А как таким образом выполнение скрипта фиксировать?
Snusmumriken
Ммм.
local params = {...};
local n = SysUtils.ExtractFileName(params[1])
n = string.sub(n, 1, string.len(n) - string.len(e))
local file = n:gsub("%s+", "_")
log("Trying to rename from")
log(params[1])
log("to")
log(file .. e)
local succ, res = os.rename(params[1], file .. e);
log("Result: " .. tostring(succ) .. " " .. tostring(res))
А потом берёшь такой, и читаешь содержимое файла.
Maxim
Как в Lua по полному имени файла определить каталог в котором этот файл находится? Есть ли в lua стандартная функция для этого? Я смотрел lfs и не нашел ничего подходящего.
6 :)
Год задался нынче - жесть!
Даром, что високосный. Но прочие високосные не в пример. Только полгода прошло, а чего только не случилось?!
Так теперь ещё и комета 😱 (видна ранним утром на северо-востоке).
Maxim
Highly Likely
Vlad
Highly Likely
Maxim
Начинается со слеша
Maxim
Например: с:abc\def.lua - относительное имя файла
\\?\с:\foo\bar\abc\def.lua полное имя файла
С:\foo\bar\abc\def.lua - тоже полное имя файла
Maxim
В моем определении что-то неожиданное? Нужно подкреплять ссылками?
Maxim
Подкрепляю ссылкой https://ru.m.wikipedia.org/wiki/%D0%98%D0%BC%D1%8F_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0
Roma
Maxim
спасибо
Snusmumriken
Заха́р
Возможно ли каким-то образом избежать «накладок» при последовательном вызове команд? Вроде очевидная задача, но проблемы возникают практически всегда.
Вот пример скрипта, и какие проблемы возникают (см. комментарии к коду):
local params = {...}
local TempDir = "tmppp/"
SysUtils.CreateDirectory(TempDir)
DC.ExecuteCommand("cm_ChangeDir", "inactivepath=%D/" .. TempDir)
-- выделить только файлы изоражений
DC.ExecuteCommand("cm_MarkPlus", "mask=*.bmp;*.jpg;*.jpeg;*.svg;*.ico;*.gif;*.png;*.tiff;*.tif;*.webp;*.svg;*.svgz;*.xcf;", "attr=d-", "casesensitive=0");
DC.ExecuteCommand("cm_MarkPlus", "mask=*.", "attr=d-", "casesensitive=0");
DC.ExecuteCommand("cm_MarkMinus", "mask=\.*");
DC.ExecuteCommand("cm_RenameNoAsk", "confirmation=no", "queueid=1");
DC.ExecuteCommand("cm_FocusSwap");
DC.ExecuteCommand("cm_MarkMarkAll");
DC.ExecuteCommand("cm_ExecuteScript", "$DC_CONFIG_PATH/scripts/autorename.lua", "%LU", "1", "-1", "image. large", "");
-- здесь скрипт пытается выполнить следующую команду (cm_MarkMarkAll) не успев выполнить переименование
DC.ExecuteCommand("cm_MarkMarkAll");
DC.ExecuteCommand("cm_RenameNoAsk", "confirmation=no", "queueid=2");
DC.ExecuteCommand("cm_FocusSwap");
-- здесь скрипт пытается удалить каталог не успев выполнить перемещение
local br, es, en
local h, d = SysUtils.FindFirst(TempDir .. SysUtils.PathDelim .. '*')
if h == nil then
br, es, en = os.remove(TempDir)
if br == nil then
Dialogs.MessageBox('Error: ' .. en .. '\n' .. es, 'Delete folder', 0x0040)
end
else
SysUtils.FindClose(h)
br = Dialogs.MessageBox('Temporary folder is not empty!\nDo you want to delete anyway?', 'Delete folder', 0x0001 + 0x0030)
if br == 0x0001 then
br, es, en = os.remove(TempDir)
if br == nil then
Dialogs.MessageBox('Error: ' .. en .. '\n' .. es, 'Delete folder', 0x0040)
end
end
end
Вижу только вариант с тем, чтобы расставлять паузы в нужных местах, но это очень сомнительный приём, к тому же объём обработки может очень сильно разниться и угадать паузу становится просто невозможно. Может быть есть какие-то решения?
Snusmumriken
Только условные паузы. Оно кажись пытается асинхронно выполнять скрипты. Напиши автору DC.
Заха́р
А, то есть это не типичное поведение? Зависит от DC?
Snusmumriken
Конечно.
Заха́р
А, понял, оно вызывает функции DC, которые, по идее, должны возвращать сигнал завершения
Snusmumriken
Все функции которые начинаются с DC — относятся к DC.
Maxim
А что такое DC? DirectConnect?
fgntfg
Doloy Capitalism
Заха́р
Double Commander — файловый менеджер. Двухпанельник.
Snusmumriken
SysUtils — тоже DC, как и Dialogs.
Maxim
А в реальности работает только в Windows? Или в Linux тоже работает, просто ночные сборки не собираются?
Snusmumriken
Ну откуда столько токсичности? Прям разлил радиоактивное болото ))
Maxim
Вы автор Double Commander? Я просто заглянул на сайт, увидел декларацию кросплатформености, но ехзешники только для Windows
Snusmumriken
Меня в подобных фм в основном интересует в основном две фишки:
1. Могут ли они открывать директории, содержащие несколько миллионов файлов
2. Могут ли они просматривать файлы объёмом в несколько терабайт (на f3) и искать по ним
Эх.
Snusmumriken
Sarvar
хех нихера себе тут кейсов под луа. Я вообще начинал писать на нем под сампчик))
Заха́р
Snusmumriken
Под вендой ))
fgntfg
Sasha
Всем привет. В луа никак нельзя использовать обычные регэкспы?
аннлн
при желании можно
аннлн
lua-rex же
Highly Likely
аннлн
ты скозал?
Highly Likely
аннлн
авторитетное, уважаемое мнение
Highly Likely
аннлн
это комплимент
Sasha
Можете перевести это на луашный регэксп?
"(\s|\S)+(?=\r\n)"
Snusmumriken
Sasha
Snusmumriken
Ла-адно, (.+)\r\n