Ликбез по Lua

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 12998
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Ликбез по Lua

Post by John Doe »

В данной теме задаём вопросы по Lua.

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:
gotar
Posts: 327
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 9 times
Been thanked: 1 time

Ликбез по Lua

Post by gotar »

Latest post of the previous page:

Вы пробовали? Может подскажите где посмотреть пример
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

gotar, как это сделано в в модуле dialog:
  1. -- item_map - таблица соответствия "внутреннего" имени (тут - номера элемента) и "внешнего" (имени проперти).
  2. -- И - да, я пробовал.
  3. local item_meta = {
  4.   __index    = function (self, key)
  5.                  local ind = item_map[key]
  6.                  return rawget (self, ind) or ind
  7.                end,
  8.   __newindex = function (self, key, val)
  9.                  rawset (self, item_map[key] or key, val)
  10.                end,
  11. }
  12. setmetatable (item, item_meta)
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Ликбез по Lua

Post by zg »

gotar wrote: Mon 10 Aug, 2020 18:02 Вы пробовали? Может подскажите где посмотреть пример
что там пробовать, там две строчки кода:

Code: Select all

local tr=function(key) return key=='ln' and 'longname' or key end
local test=setmetatable({},{__newindex=function(table,key,value) key=tr(key);rawset(table,key,value) end,__index=function(table,key) key=tr(key);return rawget(table,key) end})
test.longname='hello'
far.Show(test.ln)
test.ln='world'
far.Show(test.longname)
User avatar
raven428
Posts: 51
Joined: Sat 28 Mar, 2009 11:17
Has thanked: 10 times
Been thanked: 1 time

Ликбез по Lua

Post by raven428 »

Подскажите, пожалуйста, что поправить, чтобы кодировка правильная передавалась?

Code: Select all

CommandLine {
 description = 'run with new conemu window';
 prefixes = "emc";
 action = function(prefix, text)
  os.execute(
   'start conemu64 -run ' .. text ..
   ' -cur_console:cd:"' .. panel.GetPanelDirectory(nil, 1).Name .. '"'
  );
 end;
}
На запуск комстроки "emc:echo тестовая строчка" в новом окне выводится "тестовая строчка". Заранее спасибо.
too much raVen over paradise...
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

Попробуйте перед строкой os.execute… вставить строку

Code: Select all

  text = win.WideCharToMultiByte(win.MultiByteToWideChar(text, 65001), win.GetACP())
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

Указанная строка переводит text в кодировку ASCII.
1. Так у меня работает
2. Почему работает - непонятно: chcp возвращает кодировку консоли 866; т.е. надо переводить строку из UTF8 не в ASCII, а в OEM. Видимо, дальше портит conemu
User avatar
John Doe
Бюрократ
Posts: 12998
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Ликбез по Lua

Post by John Doe »

os.execute функция неюникодная.
Используйте win.system или win.ShellExecute
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Novosedoff wrote: Fri 15 Jan, 2021 01:13 Кстати, не нашёл в интернете в доступном описании по языку lua описание использованной Вами в скрипте команды tin ..
В моём скрипте в самом начале указано присвоение local tin = table.insert. Эта строка описывает локальную переменную с именем tin и значением - функция table.insert. Сделано по двум причинам: (1) от лени (короче писать) и (2) говорят, что так намного быстрее работает, чем поиск поля в таблице. Приём довольно распространённый (например, local F = far.Flags - вообще общее место)
Last edited by buniak_a_h on Fri 15 Jan, 2021 02:59, edited 2 times in total.
Novosedoff
Posts: 30
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 15 times

Ликбез по Lua

Post by Novosedoff »



Я так понял, на форуме приветствуется под-спойлерное общение :-)

Last edited by Novosedoff on Fri 15 Jan, 2021 06:17, edited 1 time in total.
2useven10
Posts: 4187
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 205 times

Ликбез по Lua

Post by 2useven10 »

Под спойлер убирают офтопик, который на форуме не приветствуется.
Если вам за него не ещё не прилетело, это только вопрос времени (судя по упорству).
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

Novosedoff wrote: Fri 15 Jan, 2021 06:04 Я так и не понял, если честно, как лечится моя ситуация с кракозябрами штатными средствами Фар без спец.скрипта.
Открываете файл в редакторе, жмёте Shift+F8 (а не F8), выбираете кодировку utf-8 (65001). Это надо сделать для файла только один раз, потом запомнится.
User avatar
John Doe
Бюрократ
Posts: 12998
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 310 times

Ликбез по Lua

Post by John Doe »

buniak_a_h wrote: Fri 15 Jan, 2021 02:57 В моём скрипте в самом начале указано присвоение local tin = table.insert. Эта строка описывает локальную переменную с именем tin и значением - функция table.insert. Сделано по двум причинам: (1) от лени (короче писать) и (2) говорят, что так намного быстрее работает, чем поиск поля в таблице.
Я бы за такое руки отрывал.
Если писать лень, то можно использовать автодополняющие макросы.
От таких нестандартных сокращений сильно страдает читаемость кода (а код читать приходится во много раз чаще чем писать).

Да, действительно существует практика замены локальными переменными ссылок на глобальные идентификаторы, но оправдано это лишь для действительно горячих участков кода. И то используется обычно что-то более явное, типа tinsert.
buniak_a_h wrote: Fri 15 Jan, 2021 02:57 Приём довольно распространённый (например, local F = far.Flags - вообще общее место)
А вот это в контексте фара действительно идиома.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

John Doe,
citRiks
Posts: 1097
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 342 times
Been thanked: 57 times

Ликбез по Lua

Post by citRiks »

Last edited by Guest on Thu 21 Jan, 2021 00:09, edited 2 times in total.
Reason: Спрятан офтопик
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

Return to “Нужна помощь”