Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV wrote:На мой взгляд, у объекта AkelPad остро не хватает дружелюбного к пользователю метода GoTo(line, pos), который позволил бы перейти на нужную строку и позицию в ней без заморачивания со всеми этими EM_LINEINDEX и т.д...
Перейти к 100-ой строке и третьему символу в ней:

Code: Select all

AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "100:3");
Last edited by Instructor on Thu Aug 14, 2014 3:21 pm, edited 3 times in total.

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

Post by FeyFre »

С другой стороны абсолютно никто не мешает сделать AkelPad.Include("AkelPad.js") после чего получается 100500 хелперов функций. Таких хедперов в теме-коллекции у нас уже реально 100500, но все они каждый в своем файле и написаны по разному. Не плохо бы что-бы AkelPad.js бы так сказать агрегатором хелперов(сам инкладит пользовательские файлы), хотя бы. Правда может в итоге получится что-то типа буста(сборник левых компонент слабо друг с другом связанных), ну хотя бы так.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor wrote:

Code: Select all

AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "100:3");
А давно там можно строки без AkelPad.MemStrPtr() использовать? Раньше же, вроде, только oSys.Call() самостоятельно преобразовывал.
Пример в Scripts-Rus.txt вон до сих пор с ним:

Code: Select all

AkelPad.SendMessage(hMainWnd, 1206 /*AKD_GOTOW*/, 0x1 /*GT_LINE*/, AkelPad.MemStrPtr("10:3"));
Плюс не совсем понятно, работает ли AKD_GOTO как AKD_GOTOA/W в зависимости от ОС.

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

Post by Instructor »

Infocatcher wrote:А давно там можно строки без AkelPad.MemStrPtr() использовать?
С версии 2.9
Плюс не совсем понятно, работает ли AKD_GOTO как AKD_GOTOA/W в зависимости от ОС.
Да. На Win9x AKD_GOTO работает как AKD_GOTOA, на WinNT как AKD_GOTOW.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Instructor wrote:Перейти к 100-ой строке и третьему символу в ней:

Code: Select all

AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "100:3");
А как быть с выделением? Тут может быть две реализации:
Sel(line1, column1, line2, column2);
или
Sel(line, column, countOfCharacters).

Собственно, пожалуй именно второй вариант можно рассматривать как универсальный:
Sel(line, column, countOfCharacters = 0) - это аналог GoTo(line, column);
и Sel(line, column, countOfCharacters > 0) - это выделение.

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

Post by Instructor »

DV

Code: Select all

AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, "100:3");
AkelPad.SetSel(AkelPad.GetSelStart(), AkelPad.GetSelStart() + 200);

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

Post by Instructor »

Added: dialog for changing debug code.

Добавлено: диалог для изменения кода отладки.


Scripts plugin v15.7

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Итого,

Code: Select all

function GoTo(line, column, /* optional */ selCount /* = 0 */)
{
  var s = line + ":" + column;
  AkelPad.SendMessage(AkelPad.GetMainWnd(), 1204 /*AKD_GOTO*/, 0x1 /*GT_LINE*/, s);
  if ((selCount || 0) != 0)
  {
    var pos = AkelPad.GetSelStart();
    AkelPad.SetSel(pos, pos + selCount);
  }
}
Позволяет задавать selCount < 0, например GoTo(1, 10, -4), получая "выделение назад" (справа налево).

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

DV
«if ((selCount || 0) != 0)» можно заменить на «if (selCount)», работать будет точно так же. :)
Если при приведении к логическому вычисляется в false (и возвращает || 0), то и if() не сработает, а для любого другого случая там будет selCount, не равный 0.

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

Post by Cuprum »

Instructor

Можно ли в документации (Scripts-Rus.txt), там где описывается вызов скриптов с передачей параметров, упомянуть о предопределенном параметре - %f (+ о других, если такие есть)?

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

Post by Instructor »

Cuprum
В Scripts нету "предопределенного параметра %f". Или всмысле умомянуть что его нету? :)

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

Post by Skif_off »

Cuprum
О переменных речь идёт в AkelHelp-Rus.htm (после перечисления параметров командной строки), %f - одна из переменных самого AkelPad и используется не только в Scripts plugin.

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

Post by Instructor »

...используется не только в Scripts plugin.
Нету в Scripts переменной %f (метод AkelPad.Call). Она есть в методе Call тех плагинов откуда вызываются скрипты: ContextMenu, Toolbar, Hotkeys, командная строка AkelPad'а.

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

Post by Cuprum »

Да, терминологически я не правильно сказал.

Может тогда в руководстве привести более расширенный пример? Вместо простого
/Call("Scripts::Main")
Показать несколько вариантов (как ниже, в примере с вызовом блокнота), в том числе и
/Call("Scripts::Main", "someScript.js", "%f")

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

Post by Skif_off »

Instructor wrote:Нету в Scripts переменной %f (метод AkelPad.Call). Она есть в методе Call тех плагинов откуда вызываются скрипты: ContextMenu, Toolbar, Hotkeys, командная строка AkelPad'а.
Ага, тут я не очень внятно выразился :) Имел в виду, что %f может использоваться в параметрах скриптов плагина.
Cuprum wrote:Может тогда в руководстве привести более расширенный пример?
А зачем? У скрипта может быть любой параметр с любой доступной переменной/переменной окружения, пример и параметры обычно есть в комментарии в начале скриптов.
Post Reply