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

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

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

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

Скрипт работает в разнообразных меню, в т.ч. в меню дисков; ищет в от текущей позиции, если не нашёл — от начала.
Поддерживает дублирующиеся горячие клавиши (обходит по кругу). Горячие клавиши, для ввода которых требуется нажатие Shift (например ‘#’, ‘_’), пока не поддерживаются.
Code: [Select all] [Expand/Collapse] [Download] (Menu_Position-by-Alt+Hotkey.lua)
  1. -- Position to menu item by Alt-Hotkey, version 2016.09.21.1
  2.  
  3. -- See http:// forum.farmanager.com/viewtopic.php?p=137572#p137572
  4.  
  5. local function searchFromPos( c, n, jumpKeys )
  6.  
  7.   local pos = Object.CheckHotkey( c, n )
  8.  
  9.   if pos > 0 then
  10.  
  11.     Keys(jumpKeys)  -- no visible harm if jumpKeys is nil
  12.  
  13.     local windowType = far.AdvControl("ACTL_GETWINDOWINFO").Type
  14.  
  15.     local horizontal = Area.MainMenu and windowType == 10  
  16.  
  17.     while Object.CurPos < pos and not Object.Eof do
  18.  
  19.       Keys( horizontal and 'Right' or 'Down' )
  20.  
  21.     end
  22.  
  23.     return true
  24.  
  25.   end
  26.  
  27.   return false
  28.  
  29. end
  30.  
  31.  
  32.  
  33. Macro {  -- TODO support characters available with Shift, e.g. '#'
  34.  
  35.   description = 'Position to character';
  36.  
  37.   area = "MainMenu Menu UserMenu Disks"; key = '/[LR]Alt./';
  38.  
  39.   action = function()
  40.  
  41.     local c = akey(1):sub(-1)
  42.  
  43.     local found = searchFromPos( c, Object.CurPos + 1 )
  44.  
  45.     if not found then    
  46.  
  47.       searchFromPos( c, 0, 'Home' )
  48.  
  49.     end
  50.  
  51.   end
  52.  
  53. }
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: 11077
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11077
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 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: 7985
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 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: 11077
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 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: 7985
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11077
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 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: 7985
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

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

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

User avatar
John Doe
Бюрократ
Posts: 11077
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 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: 7985
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 66 times
Been thanked: 97 times

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

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

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

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

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

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

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

Post Reply

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

Who is online

Users browsing this forum: No registered users and 1 guest