Позиционирование в меню по Alt-ГорячаяКлавиша

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
HaRT
Moderator
Posts: 8026
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 99 times

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by HaRT » Fri 06 May, 2016 17:21

Скрипт работает в разнообразных меню, в т.ч. в меню дисков; ищет в от текущей позиции, если не нашёл — от начала.
Поддерживает дублирующиеся горячие клавиши (обходит по кругу). Горячие клавиши, для ввода которых требуется нажатие Shift (например ‘#’, ‘_’), пока не поддерживаются.
  1. -- Position to menu item by Alt-Hotkey, version 2016.09.21.1
  2. -- See http:// forum.farmanager.com/viewtopic.php?p=137572#p137572
  3. local function searchFromPos( c, n, jumpKeys )
  4.   local pos = Object.CheckHotkey( c, n )
  5.   if pos > 0 then
  6.     Keys(jumpKeys)  -- no visible harm if jumpKeys is nil
  7.     local windowType = far.AdvControl("ACTL_GETWINDOWINFO").Type
  8.     local horizontal = Area.MainMenu and windowType == 10  
  9.     while Object.CurPos < pos and not Object.Eof do
  10.       Keys( horizontal and 'Right' or 'Down' )
  11.     end
  12.     return true
  13.   end
  14.   return false
  15. end
  16.  
  17. Macro {  -- TODO support characters available with Shift, e.g. '#'
  18.   description = 'Position to character';
  19.   area = "MainMenu Menu UserMenu Disks"; key = '/[LR]Alt./';
  20.   action = function()
  21.     local c = akey(1):sub(-1)
  22.     local found = searchFromPos( c, Object.CurPos + 1 )
  23.     if not found then    
  24.       searchFromPos( c, 0, 'Home' )
  25.     end
  26.   end
  27. }
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Версия 2016.09.21.1: исправлено зацикливание в главных меню
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by John Doe » Sat 07 May, 2016 20:23

Для информации:
viewtopic.php?f=15&t=9197
Если использовать хоткей с модификатором Alt, то фильтрации не происходит, а только лишь перемещается курсор

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 21 Sep, 2016 21:12

Меня вот эта строка настораживает

Code: Select all

Keys( Area.Current == 'MainMenu' and 'Right' or 'Down' )
MainMenu может быть как горизонтальным так и вертикальным, поэтому не уверен что этот код работает как задумано.

User avatar
HaRT
Moderator
Posts: 8026
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 99 times

LuaMacro — Lua как язык макросов

Post by HaRT » Wed 21 Sep, 2016 21:16

John Doe wrote: Меня вот эта строка настораживает

Code: Select all

Keys( Area.Current == 'MainMenu' and 'Right' or 'Down' )
С вариантом Keys( Area.MainMenu and 'Right' or 'Down' ) эффект тот же.
А у Вас воспроизводится?
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на обсуждение падения
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 21 Sep, 2016 21:20

HaRT wrote: С вариантом Keys( Area.MainMenu and 'Right' or 'Down' ) эффект тот же.
Я вообще-то имел ввиду что не понимаю как тут Right вообще может работать.
Баг в скрипте, он зацикливается.

User avatar
HaRT
Moderator
Posts: 8026
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 99 times

LuaMacro — Lua как язык макросов

Post by HaRT » Wed 21 Sep, 2016 21:30

John Doe wrote: Баг в скрипте, он зацикливается.
Блин, и в самом деле. Оказывается, эти подменю тоже имеют Area.MainMenu. Как же мне тогда отличить горизонтальное меню от вертикального?
Обсуждение переношу к скрипту.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

LuaMacro — Lua как язык макросов

Post by John Doe » Wed 21 Sep, 2016 21:31

В макро апи нет средств чтобы отличить вертикальное от горизонтального.
Как-то так можно:

Code: Select all

    local key = "Down"
    if Area.MainMenu and far.AdvControl("ACTL_GETWINDOWINFO").Type==0x10 then
      key = "Right"
    end

User avatar
HaRT
Moderator
Posts: 8026
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 99 times

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by HaRT » Wed 21 Sep, 2016 21:32

HaRT wrote: Как же мне тогда отличить горизонтальное меню от вертикального?
Можно, конечно, по косвенным признакам, но хотелось бы прямой проверкой.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by John Doe » Wed 21 Sep, 2016 21:36

Через апи плагинов более-менее прямо, если не считать того, что константы нет: http://bugs.farmanager.com/view.php?id=2761

Для макроапи тоже было бы неплохо, тикет давно висит http://bugs.farmanager.com/view.php?id=2760

User avatar
HaRT
Moderator
Posts: 8026
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 99 times

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by HaRT » Wed 21 Sep, 2016 21:46

John Doe wrote: Как-то так можно
Спасибо!
Только либо просто 10, либо уж 0x0A. Я исправил код в шапке.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

Позиционирование в меню по Alt-ГорячаяКлавиша

Post by John Doe » Wed 21 Sep, 2016 21:57

HaRT wrote: либо просто 10, либо уж 0x0A
Перемудрил)

Post Reply

Return to “Обсуждение макросов”