Paste smart — макрос для "умной" вставки

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
HaRT
Moderator
Posts: 8639
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

Paste smart — макрос для "умной" вставки

Post by HaRT » Thu 27 Jul, 2006 12:20

Пытаюсь я сделать себе такой макрос (Paste smart):

Code: Select all

%_comment = "Check the last character";
%s = Clip ( 0, "" );
$If ( substr ( %s, len ( %s ) - 1, 1 ) == "\x0A" )
  %_comment = "Count linebreaks";
  %p = 0; %c = -1;
  $While ( %p >= 0 )
    %c = %c + 1;
    %s = substr ( %s, %p + 1, len ( %s ) - %p );
    %p = index ( %s, "\x0A" );
  $End
  %_comment = "Check block type";
  %l = Editor.Lines;
  CtrlShift0 Home ShiftIns
  $If ( Editor.Lines == %l + %c )
    %_comment = "Stream block";
    Ctrl0
    $Rep ( %c )
      Down
    $End
  $Else
    %_comment = "Vertical block";
    CtrlZ
    $Rep ( %c )
      Home Enter
    $End
    Ctrl0
    $Rep ( %c )
      CtrlUp
    $End
    ShiftIns
  $End
$Else
  ShiftIns
$End
— а он не грузится.
Если же убираю из него комментарии, то всё работает.
Подозреваю, что дело в длине: с комментариями она больше 512 байт, а без них — меньше.

Вопрос: справедлива ли моя догадка?

User avatar
DrKnS
Posts: 5148
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

Post by DrKnS » Thu 27 Jul, 2006 12:39

HaRT
Думаю на длину ограничений нет, т.к.

Code: Select all

macro:post msgbox("test","bugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\nbugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugagabugaga\n",0)
работает на ура... :D

User avatar
HaRT
Moderator
Posts: 8639
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

Post by HaRT » Thu 27 Jul, 2006 14:03

Да, тут дело не в длине, а, как выяснилось, в первом символе имени переменной.
Вот такой макрос работает: %ok = "OK"; $Text ( %ok )
А вот такой — уже нет: %_ok = "OK"; $Text ( %_ok )

Ашипка, однако!

Записал на Мантис: №227

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

Re: Paste smart — макрос для "умной" вставки

Post by John Doe » Tue 19 Aug, 2014 15:48

  1. Macro { description="Paste smart";
  2.   area="Editor"; key="ShiftIns"; flags="NoSendKeysToPlugins";
  3.   uid="3A53E739-16BB-404D-A6D7-5407716B29AC";
  4.   action=function()
  5.     local str = far.PasteFromClipboard"FCT_ANY"
  6.     local stream = far.PasteFromClipboard"FCT_STREAM"
  7.     if str:sub(-1)=="\n" then -- Check the last character
  8.       local LinebreaksCount = select(2,str:gsub("\n","\n"))
  9.       local ei = editor.GetInfo()
  10.       if stream then          -- Stream block
  11.         editor.SetPosition(nil,0,1)
  12.         Keys"ShiftIns"
  13.         ei.CurLine = ei.CurLine+LinebreaksCount
  14.         editor.SetPosition(nil,ei)
  15.       else                    -- Vertical block
  16.         editor.UndoRedo(nil,"EUR_BEGIN")
  17.         editor.SetPosition(nil,0,1)
  18.         for i=1,LinebreaksCount do editor.InsertString() end
  19.         editor.SetPosition(nil,ei)
  20.         Keys"ShiftIns"
  21.         editor.UndoRedo(nil,"EUR_END")
  22.       end
  23.     else
  24.       Keys"ShiftIns"
  25.     end
  26.   end;
  27. }

Post Reply

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