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

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

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

Post by LanKing » Mon 24 Nov, 2014 04:20

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

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

Если выбираем "предидущий диск" но диск является первым в списке -- попадём на последний диск (закольцовано по кругу). То же самое по поводу последнего диска. По желанию можно сделать, чтобы утыкаясь в последний\первый диск макрос переставал переключать диски, но я выбрал вариант с кольцеванием, т.к. сделали action - получили результат. Всегда.
Attachments
Panel.CtrlLeftRight.zip
(1.16 KiB) Downloaded 73 times

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

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

Post by John Doe » Mon 24 Nov, 2014 09:09

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

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: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 192 times

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

Post by John Doe » Mon 24 Nov, 2014 10:01

И для справки:
в Полезных скриптах уже есть два макроса, сходных по назначению, но более удобных.

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

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

Post by John Doe » Fri 07 Sep, 2018 10:25

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

Предлагаю альтернативную замену штатным макросам:
  1. Macro {
  2.   description="Change current drive";
  3.   area="Shell Info QView Tree Search"; key="CtrlLeft CtrlRight";
  4.   flags="EmptyCommandLine";
  5.   action=function()
  6.     Keys"F9 Enter Up Enter"
  7.     if not APanel.Plugin then       -- if plugin panel then switch to current drive
  8.       local k = mf.akey(1,1):match"^Ctrl(.*)"
  9.       repeat
  10.         Keys(k)
  11.       until Menu.Value:match"^%u: " -- search drive letters only (skip plugins)
  12.     end
  13.     Keys"Enter"
  14.   end;
  15. }
Отличие от штатных:
  • Один макрос вместо двух
  • Вызванный на плагиновой панели, макрос переходит в реальную панель, не меняя диск
  • В списке выбираются только диски (регэкспом), плагины пропускаются.
    Примечание: макросы выше по теме делаю то же, но по коду они чуть сложнее
  • В случае ошибки перехода на диск ворнинг не закрывается

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

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

Post by John Doe » Fri 07 Sep, 2018 10:31

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

Post Reply

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