Panel.CtrlLeftRight.lua — Быстро перейти на Предыдущий\Следующий диск

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Panel.CtrlLeftRight.lua — Быстро перейти на Предыдущий\Следующий диск

Post by LanKing »

В стандартной поставке ФАРа присутствует 2 скрипта (Panel.CtrlLeft.lua и Panel.CtrlRight.lua), которые позволяют быстро сменить диск. Однако, обнаружились проблемы, в силу чего скрипты только частично работоспособны.

Я сделал скрипт, который является полностью работоспособным, кому нужно - пользуйтесь на здоровье!

Если выбираем "предидущий диск" но диск является первым в списке -- попадём на последний диск (закольцовано по кругу). То же самое по поводу последнего диска. По желанию можно сделать, чтобы утыкаясь в последний\первый диск макрос переставал переключать диски, но я выбрал вариант с кольцеванием, т.к. сделали action - получили результат. Всегда.
Attachments
Panel.CtrlLeftRight.zip
(1.16 KiB) Downloaded 105 times
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Быстро перейти на Предыдущий\Следующий диск - Макрос, работающий в отличии от базового

Post by John Doe »

Идея правильная, но вместо того чтобы полагаться на название пункта лучше проверить его свойства.
Мой вариант:

Code: Select all

local separator = 0x00000004
Macro {
  description="Change current drive: next";
  area="Shell"; key="CtrlRight"; flags="EmptyCommandLine";
  action = function()
  	Keys"F9 Enter Up Enter Down"
  	if band(Menu.ItemStatus(Object.CurPos-1),separator)~=0 then
  		Keys"Home";
  	end;
  	Keys"Enter";
  end;
}

local show_plugins = 0x00000040
Macro {
  description="Change current drive: previous";
  area="Shell"; key="CtrlLeft"; flags="EmptyCommandLine";
  action = function()
  	Keys"F9 Enter Up Enter Up"
    if Object.Eof and band(Drv.ShowMode,show_plugins)~=0 then
      repeat
        Keys"Up"
      until band(Menu.ItemStatus(Object.CurPos+1),separator)~=0
    end;
    Keys"Enter";
  end;
}

P.S.
Добавил сюда: viewtopic.php?p=106210#p106210
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Panel.CtrlLeftRight.lua — Быстро перейти на Предыдущий\Следующий диск

Post by John Doe »

И для справки:
в Полезных скриптах уже есть два макроса, сходных по назначению, но более удобных.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Panel.CtrlLeftRight.lua — Быстро перейти на Предыдущий\Следующий диск

Post by John Doe »

В штатных макросах после завершения выбора диска посылается ещё
Это на случай, если диск недоступен, чтобы молча ворнинг закрыть? Или возможна другая цель?

Предлагаю альтернативную замену штатным макросам:
  1. Macro {
  2.  
  3.   description="Change current drive";
  4.  
  5.   area="Shell Info QView Tree Search"; key="CtrlLeft CtrlRight";
  6.  
  7.   flags="EmptyCommandLine";
  8.  
  9.   action=function()
  10.  
  11.     Keys"F9 Enter Up Enter"
  12.  
  13.     if not APanel.Plugin then       -- if plugin panel then switch to current drive
  14.  
  15.       local k = mf.akey(1,1):match"^Ctrl(.*)"
  16.  
  17.       repeat
  18.  
  19.         Keys(k)
  20.  
  21.       until Menu.Value:match"^%u: " -- search drive letters only (skip plugins)
  22.  
  23.     end
  24.  
  25.     Keys"Enter"
  26.  
  27.   end;
  28.  
  29. }
Отличие от штатных:
  • Один макрос вместо двух
  • Вызванный на плагиновой панели, макрос переходит в реальную панель, не меняя диск
  • В списке выбираются только диски (регэкспом), плагины пропускаются.
    Примечание: макросы выше по теме делают то же, но по коду они чуть сложнее
  • В случае ошибки перехода на диск ворнинг не закрывается
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Panel.CtrlLeftRight.lua — Быстро перейти на Предыдущий\Следующий диск

Post by John Doe »

John Doe wrote: Fri 07 Sep, 2018 10:25 В случае ошибки перехода на диск ворнинг не закрывается
Можно и умнее, переходить в этом случае на следующий диск.
Но по коду уже не так прямолинейно, поэтому такое в Addons не предлагаю:
Post Reply

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