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

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
HaRT
Moderator
Posts: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Пытаюсь я сделать себе такой макрос (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: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

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: 10863
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

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

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

Записал на Мантис: №227
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

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

Post by John Doe »

  1. Macro { description="Paste smart";
  2.  
  3.   area="Editor"; key="ShiftIns"; flags="NoSendKeysToPlugins";
  4.  
  5.   uid="3A53E739-16BB-404D-A6D7-5407716B29AC";
  6.  
  7.   action=function()
  8.  
  9.     local str = far.PasteFromClipboard"FCT_ANY"
  10.  
  11.     local stream = far.PasteFromClipboard"FCT_STREAM"
  12.  
  13.     if str:sub(-1)=="\n" then -- Check the last character
  14.  
  15.       local LinebreaksCount = select(2,str:gsub("\n","\n"))
  16.  
  17.       local ei = editor.GetInfo()
  18.  
  19.       if stream then          -- Stream block
  20.  
  21.         editor.SetPosition(nil,0,1)
  22.  
  23.         Keys"ShiftIns"
  24.  
  25.         ei.CurLine = ei.CurLine+LinebreaksCount
  26.  
  27.         editor.SetPosition(nil,ei)
  28.  
  29.       else                    -- Vertical block
  30.  
  31.         editor.UndoRedo(nil,"EUR_BEGIN")
  32.  
  33.         editor.SetPosition(nil,0,1)
  34.  
  35.         for i=1,LinebreaksCount do editor.InsertString() end
  36.  
  37.         editor.SetPosition(nil,ei)
  38.  
  39.         Keys"ShiftIns"
  40.  
  41.         editor.UndoRedo(nil,"EUR_END")
  42.  
  43.       end
  44.  
  45.     else
  46.  
  47.       Keys"ShiftIns"
  48.  
  49.     end
  50.  
  51.   end;
  52.  
  53. }
Post Reply

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