Исполнение скриптов из редактора

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Исполнение скриптов из редактора

Post by Max Rusov »

Простой макрос исполняет текущую строку или выделенный блок в редакторе как команду windows. Из недостатков - выхлоп команды нельзя скопировать, и он теряется после закрытия User Screen. Если кто-нибудь предложит как решить это - буду благодарен.

Code: Select all

Macro 
{ 
  description="Execute current row"; area="Editor"; key="F9"; 

  condition= function()
    return Editor.FileName:lower():find('%.txt$') 
  end;

  action=function()
    local Str = Object.Selected and Editor.SelValue or Editor.Value
    if Str == "" then
      return
    end

    panel.GetUserScreen()

    io.write("\n\n> " .. win.Utf8ToOem(Str) .. "\n\n")

--    os.execute( Str )
    win.system(Str)
    
    panel.SetUserScreen()

    Keys("CtrlO")  -- Чтобы можно было сделать AltIns
--    mf.waitkey()
  end;
}
UPD. Уже сам допер. Надо добавить SetUserScreen() :facepalm:
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Исполнение скриптов из редактора

Post by Shmuel »

1. Вместо ф-ции AnsiToOEM можно использовать встроенную win.Utf8ToOEM.
2. Вместо condition (где в регексе не хватает $ в конце, а также есть нежелательная регистрозависимость) лучше использовать filemask.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Исполнение скриптов из редактора

Post by John Doe »

Max Rusov wrote: return Editor.FileName:find('%.txt') and true or false
Достаточно return Editor.FileName:find('%.txt') (это вообще, а конкретно тут конечно надо воспользоваться filemask)

Code: Select all

    local  Str = Editor.SelValue 
    if Str == '' then
      Str = Editor.Value
    end
local Str = Object.Selected and Editor.SelValue or Editor.Value
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Исполнение скриптов из редактора

Post by Max Rusov »

Перфекционисты. :) А filemask - это где? Что то я не нашел.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Исполнение скриптов из редактора

Post by John Doe »

macroapi_manual.ru.chm::/75.html
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Исполнение скриптов из редактора

Post by Shmuel »

Shmuel wrote: 1. Вместо ф-ции AnsiToOEM можно использовать встроенную win.Utf8ToOEM.
Тоже неправильно.
Вообще не нужна функция преобразования, так как win.system работает напрямую с UTF-8.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Исполнение скриптов из редактора

Post by John Doe »

Shmuel wrote: Вообще не нужна функция преобразования,
там ещё io.write
Вот кстати связанная тема http://forum.farmanager.com/viewtopic.p ... 44#p111544
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Исполнение скриптов из редактора

Post by Shmuel »

John Doe wrote: там ещё io.write
Да. Спать надо больше.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Исполнение скриптов из редактора

Post by Max Rusov »

Обновил макрос в шапке. Теперь работает AltIns.

CtrlO все-таки пригодился. Может правильнее как то иначе, но и так вроде работает...
User avatar
Dennis_Moore
Posts: 295
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 6 times
Been thanked: 17 times

Исполнение скриптов из редактора

Post by Dennis_Moore »

Не работал AltIns и я взял код из другого макроса (Невозможно использовать грабер на десктопе) для решения этой проблемы. Добавил код из action в конец, Keys("СtrlO") заменил на Keys("F12 0"). Вроде-бы все работает теперь как нужо.



P.S. С названием темы на которую даю ссылку явно что-то не так. Или обновленный движок чудит?
Last edited by Dennis_Moore on Sat 03 Jun, 2017 17:46, edited 3 times in total.
Post Reply

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