Скрипт переключения дисков путем зажатия кнопок Ctrl (для левой панели) или Alt (для правой) и перебора дисков стрелками влево-вправо
http://s0.uploads.ru/9VXOg.jpg

Код:
--
-- Переключение дисков по Ctrl/Alt/Shift+<-/-> (c) IgorZ
--  v2.2.7 Far 3.0.3209+
-- При нажатии LeftCtrl/RightAlt меняется диск для левой панели, при нажатии RightCtrl/LeftAlt - для правой,
--  при нажатии Shift - для активной.
--
-- Макрос заменяет анси-плагин Change Active Drive by Ilya V. Gershman
-- http://plugring.farmanager.com/plugin.php?pid=21&l=ru
--
-- +
-- настройки
-- -
local UseHidden = true -- отрабатывать для скрытой панели
local SwitchPanelsOn = 0 -- 0/1/2 - при выключенной панели оставлять выключенной/включать изменяемую/включать обе
local UseShift = true -- использовать Shift+стрелки
local ExcludeDrives = "" -- диски, исключаемые из списка перехода (в верхнем регистре!)
local AltMode = false -- альтернативный режим работы: Ctrl - сменить активный диск, Alt - пассивный
-- +
-- общие переменные
-- -
local Key,KeyMod,WPanel
-- +
-- функции
-- -
local function cond(key)
Key,KeyMod = key,key:match("..%l+") -- запомним клавишу и модификатор
WPanel = ( (
             not AltMode and (KeyMod=="Ctrl" or KeyMod=="RAlt")==APanel.Left
           ) or (
             AltMode and KeyMod:find("C")
           ) or (
             KeyMod=="Shift"
           )
         ) and APanel or PPanel -- рабочая панель
if WPanel.Type~=0 then WPanel = WPanel==APanel and PPanel or APanel end-- если рабочая панель не файловая, переключаем на другой
return (CmdLine.Empty or not Key:find("C"))and(WPanel.Visible or UseHidden) -- Ctrl+стрелки - в пустую командную строку, и скрытые панели, если UseHidden?
end;
--
local function act()
-- константы
local StdColor = far.AdvControl(far.Flags.ACTL_GETCOLOR,far.Colors.COL_PANELTEXT) -- цвет стандартной надписи
local SelColor = far.AdvControl(far.Flags.ACTL_GETCOLOR,far.Colors.COL_PANELCURSOR) -- цвет текущей позиции
local StartColor = far.AdvControl(far.Flags.ACTL_GETCOLOR,far.Colors.COL_PANELSELECTEDTEXT) -- цвет начального диска
local StartSelColor = far.AdvControl(far.Flags.ACTL_GETCOLOR,far.Colors.COL_PANELSELECTEDCURSOR) -- цвет начального диска, когда текущий
local bMods = {Ctrl=0x8,Alt=0x2,RCtrl=0x4,RAlt=0x1,Shift=0x10} -- модификаторы: коды по названию
--
local PanelPos = WPanel.Left and 1 or 1+(APanel.Left and APanel.Width or PPanel.Width) -- позиция начала панели дисков
local DrvList,DrvNum = "",1 -- заготовка под список дисков в системе, номер текущего диска в списке
for i=string.byte("A"),string.byte("Z") do -- заполним список дисков в системе
  local d = string.char(i)
  if win.GetDriveType(d..":\\")~="no root directory" and not ExcludeDrives:find(d) then -- если не отсутствует и не исключён
    DrvList = DrvList..d -- добавим
  end
end
if WPanel.Path:sub(2,2)==":" then -- на рабочей панели локальный диск?
  DrvNum = DrvList:find(WPanel.Path:sub(1,1)) -- его реальный номер в списке
else
  DrvList = "."..DrvList -- добавим в первую позицию условное текущее содержимое панели
end
local StartDrv = DrvNum -- запомним
local h = far.SaveScreen(PanelPos,0,PanelPos+DrvList:len()+2,0) -- сохраним фрагмент экрана, на котором будем рисовать панель смены диска
repeat -- Обработаем очередное нажатие стрелки
  if Key~="" then
    if Key==(KeyMod.."Left") then DrvNum = DrvNum-1; end
    if Key==(KeyMod.."MsWheelUp") then DrvNum = DrvNum-1; end
    if Key==(KeyMod.."Right") then DrvNum = DrvNum+1; end
    if Key==(KeyMod.."MsWheelDown") then DrvNum = DrvNum+1; end
    DrvNum = ((DrvNum-1+DrvList:len())%DrvList:len())+1 -- корректировка выхода за начало/конец
    far.Text(PanelPos,0,StdColor,"["..DrvList.."]") -- отрисуем список дисков
    far.Text(PanelPos+DrvNum,0,SelColor,DrvList:sub(DrvNum,DrvNum)) -- и курсор
    far.Text(PanelPos+StartDrv,0,DrvNum~=StartDrv and StartColor or StartSelColor,DrvList:sub(StartDrv,StartDrv)) -- и стартовый диск
  end
  Key = mf.waitkey(100)
until band(Mouse.LastCtrlState,bMods[KeyMod])==0
far.RestoreScreen(h) -- восстановим испорченный участок экрана
if DrvNum~=StartDrv then -- выбрали другой диск?
  panel.SetPanelDirectory(nil,WPanel==APanel and 1 or 0,DrvList:sub(DrvNum,DrvNum)..":") -- сменим диск для панели
  if not WPanel.Visible then -- панель скрыта?
    if SwitchPanelsOn==2 and APanel.Visible==PPanel.Visible then -- обе погашены и обе включить?
      Keys("CtrlO")
    elseif SwitchPanelsOn~=0 then --включить одну?
      if WPanel.Left then Keys("CtrlF1") else Keys("CtrlF2") end -- включим изменяемую панель
    end
  end
end
end;
-- +
-- Макрос
-- -
Macro {
  area="Shell Info QView Tree Search"; key=UseShift and "/.?(Ctrl|Alt|Shift)(Left|Right|MsWheelUp|MsWheelDown)/" or "/.?(Ctrl|Alt)(Left|Right|MsWheelUp|MsWheelDown)/";
  description="Переключение дисков по Ctrl/Alt/Shift+Стрелки"; flags="EnableOutput"; condition = cond; action = act;
}