Примеры
<macro
area="Disks"
key="Tab"
flags="DisableOutput"
description="Переход в меню выбора дисков на противоположной панели включение видимости панели в которой будет происходить смена диска, если её не было"><text>
Esc
$If (!PPanel.Visible)
$If (APanel.Left)
CtrlF2
$Else
CtrlF1
$End
$End
Tab F9 Enter End Enter
</text></macro>
<macro
area="Editor"
key="RAlt"
flags="DisableOutput"
description="выделить/(снять выделение) слово(а) под курсором"><text>
RCtrl9 CtrlRight CtrlLeft
$If (!Selected)
CtrlShiftRight
$Else
CtrlU
$End
Ctrl9
</text></macro>
<macro
area="Shell"
key="CtrlShiftF7"
flags="DisableOutput|NoPluginPanels"
description="создание папки с именем = текущей дате"><text>
%folder=date("%d.%m0.%Y");
$If (!panel.fexist(0,%folder))
F7
CtrlY
$Text %folder
Enter
$End
</text></macro>
<!--
искать тот же файл на другой панели что и на активной
F5 ShiftEnter CtrlIns - применено чтобы получить имя файла вне зависимости
пусто/непусто в cmdline и сколько выделено на панели файлов
-->
<macro
area="Shell"
key="CtrlAltLeft"
flags="DisableOutput"
description="искать тот же файл на другой панели что и на активной"><text>
<![CDATA[
clip(5)
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
$If (fexist(PPanel.Path+@"\\"+APanel.Current) == 1)
F5 ShiftEnter
CtrlIns Esc Tab Home
Alt< ShiftIns Esc
$End
$End
]]></text></macro>
<macro
area="Shell"
key="CtrlAltRight"
flags="DisableOutput"
description="искать тот же файл на другой панели что и на активной"><text>
<![CDATA[
clip(5)
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
$If (fexist(PPanel.Path+@"\\"+APanel.Current) == 1)
F5 ShiftEnter CtrlIns
Esc Tab Home Alt<
ShiftIns Esc
$End
$End
]]></text></macro>
<macro
area="Shell"
key="CtrlDown"
flags="DisableOutput"
description="Выделение следующих нижних 30 файлов"><text>
$If (!Eof)
$Rep (30)
$If (Eof)
Ins
$Exit
$Else
Ins
$End
$End
$End
</text></macro>
<macro
area="Shell"
key="CtrlUp"
flags="DisableOutput"
description="Выделение следующих верхних 30 файлов"><text>
<text>
Up
$If (Bof)
$If (!APanel.Root)
Down
$End
$Exit
$Else
Down
$End
$If (Eof)
Ins
$Else
Ins Up
$End
$Rep (29)
Up
Ins
Up
$If (Bof)
$If (!APanel.Root)
Down
$End
$Exit
$End
$End
Up
</text></macro>
<macro
area="Dialog"
key="AltP"
flags="DisableOutput"
description="сграбить весь экран в текстовый файл far-screen.out работает в области Dialog"><text>
<![CDATA[
clip(5) AltIns CtrlHome ShiftEnd ShiftPgDn Enter Esc
$If (!Shell) Esc $End
$If (Shell && !APanel.Plugin) ShiftF4 CtrlY
print("far-screen.out") Enter ShiftIns Enter Enter F2 Esc $End
]]></text></macro>
<!--
удаление файла/папки по клавише Del
если стояли на элементе .. то пытаемся удалить вышестоящую папку
если не в конце ком строки то удаляем символы в ней
-->
<macro
area="Shell"
key="Del"
flags="DisableOutput"
description="удаление файла/папки по клавише Del"><text>
<![CDATA[
$If (!CmdLine.Eof) Del $Exit $Else
$If ((APanel.Bof && !APanel.Selected) &&
(!APanel.Root || APanel.Plugin)) CtrlPgUp $End F8 $End
]]></text></macro>
<!--
перед вызовом быстрого просмотра сделать пассивную панель
максимально большего размера.
для обратной операции восстановить панели.
-->
<macro
area="Shell"
key="CtrlQ"
flags="DisableOutput"
description=""><text>
<![CDATA[
Tab $If (QView) Tab Ctrl2 Tab CtrlClear $Else Tab Ctrl6 Tab
$If (APanel.Left) $Rep (APanel.width) CtrlRight $End $Else
$Rep (APanel.width) CtrlLeft $End $End $End Tab CtrlQ
]]></text></macro>
<constants>
<constant name="FSPLIT_EXT" type="qword"><text>8</text></constant>
<constant name="FSPLIT_NAME" type="qword"><text>4</text></constant>
<constant name="ACTIVEPANEL" type="qword"><text>0</text></constant>
<constant name="PANELITEM_SELECTED" type="qword"><text>8</text></constant>
</constants>
<keymacros>
<!--
При непустой командной строке макрос не вызывается чтобы можно пользоваться первоначальной
функцией сочетания CtrlShiftIns - Поместить помеченные имена в Буфер Обмена
-->
<macro
area="Shell"
key="CtrlShiftIns"
flags="DisableOutput|EmptyCommandLine"
description="Пометить вместе с htm-файлом и парную ему папку"><text>
<![CDATA[
%Current=APanel.Current;
%Ext=substr(%Current,len(%Current)-6);
$If (%Ext=="_files")
%Name=substr(%Current,0,len(%Current)-6);
$Else
%Ext=fsplit(%Current,FSPLIT_EXT);
%Name=fsplit(%Current,FSPLIT_NAME);
$End
$if (%Ext==".htm" || %Ext==".html")
panel.setpos(ACTIVEPANEL,%Name+".files")
panel.setpos(ACTIVEPANEL,%Name+"_files")
$end
$if (%Ext==".files" || %Ext=="_files")
panel.setpos(ACTIVEPANEL,%Name+".htm")
panel.setpos(ACTIVEPANEL,%Name+".html")
$End
$if (APanel.Current!=%Current)
$If(!panel.item(ACTIVEPANEL,0,PANELITEM_SELECTED)) Ins $End
panel.setpos(ACTIVEPANEL,%Current)
$If(!panel.item(ACTIVEPANEL,0,PANELITEM_SELECTED)) Ins $End
$End
mmode(1,2)
]]></text></macro>
</keymacros>
Скроллинг текста по горизонтали:
При включённом ScrollLock клавиши Left/Right выполняют скроллинг текста по горизонтали
[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\Right]
"Sequence"="$if(flock(2,-1) == 1) editor.pos(1,5,editor.pos(0,5)+1); $else Right $end"
"DisableOutput"=dword:00000001
[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\Left]
"Sequence"="$if(flock(2,-1) == 1) editor.pos(1,5,editor.pos(0,5)-1); $else Left $end"
"DisableOutput"=dword:00000001
Пример использования eval():
Требуется по F10 запускать окно проводника для папки на активной панели, содержимое командной строки должно сохраняться.
В области Vars
задаём 2 строковых переменных макропроцедуры, описывающие сохранение и восстановление содержимое командной строки:
%%CmdSave=$If (!CmdLine.Empty) %Flg_Cmd=1;
%CmdCurPos=CmdLine.ItemCount-CmdLine.CurPos+1;
%CmdVal=CmdLine.Value; Esc $End
%%CmdRestore=$If (%Flg_Cmd==1) $Text %CmdVal
%Flg_Cmd=0; %Num=%CmdCurPos;
$While (%Num!=0) %Num=%Num-1; CtrlS $End $End
далее на F10 вешаем макрос:
$If (APanel.Visible && (!APanel.Plugin || (!APanel.Bof &&(APanel.OPIFlags & 0x20))))
Eval(%%CmdSave)
$If (APanel.Current == "..")
.
ShiftEnter
$Else
"%SystemRoot%\\explorer.exe /select,"
$If (Apanel.LFN)
CtrlN
$End
CtrlEnter
$If (!Apanel.LFN)
CtrlN
$End
Enter
$End
Eval(%%CmdRestore)
$End
Смотрите также: