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

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

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

Post by Max Rusov » Thu 19 Feb, 2015 10:50

Простой макрос исполняет текущую строку или выделенный блок в редакторе как команду 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: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Thu 19 Feb, 2015 11:04

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

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Thu 19 Feb, 2015 11:14

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

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Post by Max Rusov » Thu 19 Feb, 2015 11:16

Перфекционисты. :) А filemask - это где? Что то я не нашел.

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Thu 19 Feb, 2015 11:17

macroapi_manual.ru.chm::/75.html

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Thu 19 Feb, 2015 11:55

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

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Thu 19 Feb, 2015 11:59

Shmuel wrote: Вообще не нужна функция преобразования,
там ещё io.write
Вот кстати связанная тема viewtopic.php?p=111544#p111544

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Thu 19 Feb, 2015 12:03

John Doe wrote: там ещё io.write
Да. Спать надо больше.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Post by Max Rusov » Thu 19 Feb, 2015 12:30

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

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

User avatar
Dennis_Moore
Posts: 226
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 5 times
Been thanked: 10 times

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

Post by Dennis_Moore » Sat 03 Jun, 2017 17:25

Не работал 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 “Нужна помощь”