Помогите написать скрипт

Russian main discussion
  • Author
  • Message
KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Cuprum

Code: Select all

WScript.Echo(GetCurrentLineText());

function GetCurrentLineText()
{
  var hEditWnd = AkelPad.GetEditWnd();
  var lpIndex  = AkelPad.MemAlloc(_X64 ? 24 : 12 /*sizeof(AECHARINDEX)*/);
  var nOffsetBegin;
  var nOffsetEnd;

  AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpIndex);

  AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 16 /*AEGI_LINEBEGIN*/, lpIndex);
  nOffsetBegin = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);

  AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 17 /*AEGI_LINEEND*/, lpIndex);
  nOffsetEnd = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);

  AkelPad.MemFree(lpIndex);

  return AkelPad.GetTextRange(nOffsetBegin, nOffsetEnd);
}

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

KDJ
Благодарю1

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Наверняка можно мощью скриптов Акельпада повторить или даже превзойти возможности плагина для другого редактора.
https://sublime.wbond.net/packages/LaTeXTab
Может быть, кто-нибудь возьмется?
http://en.wikibooks.org/wiki/LaTeX/Tables - это подсказки по выходному формату

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

Открыто 40 файлов.
Нужно в начало каждого вставить одинаковый текст TEXT1 и имя текущего файла, и в конец − одинаковый текст TEXT2.

В документации нашёл функцию AkelPad.GetEditFile(0)
Простое вхождение искомого текста успешно заменяется на имя файла, а вот сложные конструкции с регэкспами типа моей задачи выдают ошибку "Недопустимый символ".

_________________________________________________
И дополнительно − вопрос, чтоб не начинать новую тему:

Можно ли настроить Coder::Highlight отмечать выделенный текст одновременно в нескольких файлах?

Прошу помощи.
Спасибо.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

kadvlad wrote:Открыто 40 файлов.
Нужно в начало каждого вставить одинаковый текст TEXT1 и имя текущего файла, и в конец − одинаковый текст TEXT2.
Standard script SearchReplace.js:
What: ^[\s\S]*$
With: return "TEXT1" + AkelPad.GetEditFile(0) + $0 + "TEXT2";
[x] Regular expressions
[x] Replace with function
[x] All files

Press "Replace all" button.

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

KDJ,
thanks, this works fine.

Is it possible to insert just the file name, without full path and extention?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

kadvlad
Чтобы не экранировать "TEXT1", "TEXT2", можно использовать те же настройки, что и указал KDJ, но скопировать текст в буфер обмена и заменять на:

Code: Select all

return AkelPad.GetClipboardText() + AkelPad.GetEditFile(0) + $0 + AkelPad.GetClipboardText();

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

Instructor
экранировать не проблема.

в Вашем варианте разве не будет дважды вставляться одинаковый текст (нужно два разных фрагмента − для начала и для конца)?

*мой менеджер буфера обмена сохраняет 30 последних фрагментов + избранное

хотелось бы исключить полный путь и расширение файла..

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

kadvlad
With: return "TEXT1" + AkelPad.GetEditFile(0).replace(/.+\\/, "").replace(/\.[^.]+$/, "") + $0 + "TEXT2";

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

KDJ,
thanks again, works just fine.

*will try to learn subject more by myself.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

kadvlad wrote:экранировать не проблема.

в Вашем варианте разве не будет дважды вставляться одинаковый текст (нужно два разных фрагмента − для начала и для конца)?
Тогда не суть. Просто ориентировался на два запроса:
...вставить одинаковый текст.

...вот сложные конструкции с регэкспами типа моей задачи выдают ошибку "Недопустимый символ".
kadvlad wrote:Можно ли настроить Coder::Highlight отмечать выделенный текст одновременно в нескольких файлах?
Только в пределах одного документа.

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

Вставить текст N раз

бывает необходимо скопировать и повторить текст/строку ≈200 раз
возможно ли автоматизировать этот процесс?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Макрос плагин если руками

Скриптом

Code: Select all

var text = AkelPad.GetSelText();
//! Стать курсором куда надо вставлять
for(var i=0; i<N; i++)
{
     AkelPad.ReplaceSel( text );
}

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

FeyFre,

спасибо.
Оба варианта работают

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Вожусь с файлом: поиск регэкспами, исправление вручную, мечешься туда-сюда, ВНЕЗАПНО вспомнил про команду

Code: Select all

Call("Coder::HighLight", 2, "#RRGGBB", "#RRGGBB", FLAGS, FONTSTYLE, ID, "TEXT", TEXTLENGTH)
Реально не написал кипятком только потому что большой мальчик :)
Нет ли у кого-нибудь желания сделать небольшое GUI?
По типу LinesFilter.js, только с двумя галочками - Учитывать регистр и Регулярные выражения для FLAGS. Для вставки цвета есть ChooseColor.js, но и просто окна ввода хватит с головой. С FONTSTYLE не знаю, radio button? Или выпадающее меню, чтобы не раздувать окно?

Кроме AutoIt ни с чем толком не знаком, а скриптом AutoIt научился посылать только Command(xxxx).
Post Reply