Примеры
Macro {
description="Переход в меню выбора дисков на противоположной панели";
area="Disks"; key="Tab";
action=function()
local left = Drv.ShowPos==1
Keys("Esc F9")
if left==APanel.Left then
Keys("Tab")
end
Keys("Enter End Enter")
end;
}
Macro {
description="выделить/(снять выделение) слово(а) под курсором";
area="Editor"; key="RAlt";
action=function()
Keys(Object.Selected and "CtrlU" or "SelWord")
end;
}
local datefmt = "%Y%m0%d" --в формате `YYYYMMDD`
local APANEL = 0
Macro {
description="создание папки с именем, равным текущей дате";
area="Shell"; key="ShiftF7"; flags="NoPluginPanels";
action=function()
local folder = mf.date(datefmt);
if 0==Panel.FExist(APANEL,folder) then
Keys("F7 CtrlY")
mf.print(folder)
Keys("Enter")
else -- если папка существует - позиционировать на неё курсор
Panel.SetPos(APANEL,folder)
end
end;
}
local PPANEL = 0
Macro {
description="искать тот же файл на другой панели что и на активной";
area="Shell"; key="CtrlAltLeft CtrlAltRight";
action=function()
if (not APanel.Bof or APanel.Root) and PPanel.Visible then
if 0~=Panel.SetPos(PPANEL,APanel.Current) then
Keys("Tab")
end
end
end;
}
local APANEL = 0
local SELECT = 1
local IDX = 1
Macro {
description="Выделение следующих нижних 30 файлов";
area="Shell"; key="CtrlDown";
action=function()
local cur = APanel.CurPos
local count = APanel.ItemCount
local last = math.min(cur+N,count)
for i=cur,last do
Panel.Select(APANEL,SELECT,IDX,i)
end
Panel.SetPosIdx(APANEL,math.min(last+1,count))
end;
}
Macro {
description="Выделение следующих верхних 30 файлов";
area="Shell"; key="CtrlUp";
action=function()
local cur = APanel.CurPos
local last = math.max(cur-N,1)
for i=cur,last,-1 do
Panel.Select(APANEL,SELECT,IDX,i)
end
Panel.SetPosIdx(APANEL,math.max(last-1,1))
end;
}
local folder = win.GetEnv("FARPROFILE").."\\"
local filename = "far-screen.out"
local GET,SWITCH_INTERNAL = 0,5
local APANEL = 0
Macro {
description="сграбить весь экран в текстовый файл far-screen.out";
area="Common"; key="AltP";
action=function()
mf.clip(SWITCH_INTERNAL)
Keys("AltIns CtrlA CtrlIns")
local file = assert(io.open(folder..filename,"w"))
file:write(mf.clip(GET),"\n")
file:close()
mf.beep()
Panel.SetPath(APANEL,folder,filename)
end;
}
Macro {
description="удаление файла/папки по клавише Del";
area="Shell"; key="Del";
action=function()
-- если не в конце ком строки то удаляем символы в ней
if not CmdLine.Eof then
Keys("Del")
else
-- если стояли на элементе .. то пытаемся удалить вышестоящую папку
if not APanel.Selected and APanel.Bof and (not APanel.Root or APanel.Plugin) then
Keys("CtrlPgUp")
end
Keys("F8")
end
end;
}
-- перед вызовом быстрого просмотра сделать пассивную панель
-- максимально большего размера.
-- для обратной операции восстановить панели.
local min_width = 11
local QView = 2
local DefaultMode = "Ctrl2"
Macro {
description="QView: максимизировать панель";
area="Shell"; key="CtrlQ";
priority=100;
action=function()
Keys("AKey")
if PPanel.Type==QView then
Keys("Ctrl6") --режим с одной колонкой
local key = APanel.Left and "CtrlLeft" or "CtrlRight"
Keys(("%i*%s"):format(APanel.Width-min_width,key))
else
Keys(DefaultMode,"CtrlClear")
end
end;
}
local APANEL = 0
local EXT,NAME = 8,4 --fsplit
local SELECTED = 8 --Panel.Item
local NAMES = 2 --Panel.Select
-- При непустой командной строке макрос не вызывается чтобы можно пользоваться первоначальной
-- функцией сочетания CtrlShiftIns - Поместить помеченные имена в Буфер Обмена
Macro {
description="Пометить вместе с htm-файлом и парную ему папку";
area="Shell"; key="CtrlShiftIns"; flags="EmptyCommandLine";
action=function()
local Current = APanel.Current
local len = ("_files"):len()
local Ext = Current:sub(-len)
local Name
if Ext=="_files" then
Name = Current:sub(1,-len)
else
Ext = mf.fsplit(Current,EXT)
Name = mf.fsplit(Current,NAME)
end
local pair1,pair2
if Ext==".htm" or Ext==".html" then
pair1,pair2 = ".files","_files"
elseif Ext==".files" or Ext=="_files" then
pair1,pair2 = ".htm",".html"
end
if pair1 then
local action = Panel.Item(APANEL,0,SELECTED) and 0 or 1
local items = { APanel.Current, Name..pair1, Name..pair2}
Panel.Select(APANEL,action,NAMES,table.concat(items,"\n"))
end
end;
}
local GET,SET = 0,1
local LEFTPOS = 5
local SCROLL = 2
Macro {
description="ScrollLock: Скроллинг текста по горизонтали";
area="Editor"; key="Left Right";
condition=function() return band(1,mf.flock(SCROLL,-1))==1 end;
action=function()
local dir = mf.akey(1,1)=="Right" and 1 or -1
Editor.Pos(SET,LEFTPOS,Editor.Pos(GET,LEFTPOS)+dir)
end;
}