Page 1 of 1

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

Posted: Thu 19 Feb, 2015 10:50
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:

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

Posted: Thu 19 Feb, 2015 11:04
by Shmuel
1. Вместо ф-ции AnsiToOEM можно использовать встроенную win.Utf8ToOEM.
2. Вместо condition (где в регексе не хватает $ в конце, а также есть нежелательная регистрозависимость) лучше использовать filemask.

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

Posted: Thu 19 Feb, 2015 11:14
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

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

Posted: Thu 19 Feb, 2015 11:16
by Max Rusov
Перфекционисты. :) А filemask - это где? Что то я не нашел.

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

Posted: Thu 19 Feb, 2015 11:17
by John Doe
macroapi_manual.ru.chm::/75.html

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

Posted: Thu 19 Feb, 2015 11:55
by Shmuel
Shmuel wrote: 1. Вместо ф-ции AnsiToOEM можно использовать встроенную win.Utf8ToOEM.
Тоже неправильно.
Вообще не нужна функция преобразования, так как win.system работает напрямую с UTF-8.

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

Posted: Thu 19 Feb, 2015 11:59
by John Doe
Shmuel wrote: Вообще не нужна функция преобразования,
там ещё io.write
Вот кстати связанная тема http://forum.farmanager.com/viewtopic.p ... 44#p111544

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

Posted: Thu 19 Feb, 2015 12:03
by Shmuel
John Doe wrote: там ещё io.write
Да. Спать надо больше.

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

Posted: Thu 19 Feb, 2015 12:30
by Max Rusov
Обновил макрос в шапке. Теперь работает AltIns.

CtrlO все-таки пригодился. Может правильнее как то иначе, но и так вроде работает...

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

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



P.S. С названием темы на которую даю ссылку явно что-то не так. Или обновленный движок чудит?