# Примеры

    <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

Смотрите также:
Общие замечания, Работа с макросами, Макроязык, Технические подробности