Page 55 of 74

Posted: Thu Aug 14, 2014 3:18 pm
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");

Posted: Thu Aug 14, 2014 3:18 pm
by FeyFre
С другой стороны абсолютно никто не мешает сделать AkelPad.Include("AkelPad.js") после чего получается 100500 хелперов функций. Таких хедперов в теме-коллекции у нас уже реально 100500, но все они каждый в своем файле и написаны по разному. Не плохо бы что-бы AkelPad.js бы так сказать агрегатором хелперов(сам инкладит пользовательские файлы), хотя бы. Правда может в итоге получится что-то типа буста(сборник левых компонент слабо друг с другом связанных), ну хотя бы так.

Posted: Thu Aug 14, 2014 3:29 pm
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 в зависимости от ОС.

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

Posted: Fri Aug 15, 2014 7:44 am
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) - это выделение.

Posted: Sat Aug 16, 2014 2:20 am
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);

Posted: Sat Aug 16, 2014 2:26 am
by Instructor
Added: dialog for changing debug code.

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


Scripts plugin v15.7

Posted: Mon Aug 18, 2014 11:17 am
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), получая "выделение назад" (справа налево).

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

Posted: Tue Oct 28, 2014 3:38 pm
by Cuprum
Instructor

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

Posted: Tue Oct 28, 2014 6:09 pm
by Instructor
Cuprum
В Scripts нету "предопределенного параметра %f". Или всмысле умомянуть что его нету? :)

Posted: Tue Oct 28, 2014 6:59 pm
by Skif_off
Cuprum
О переменных речь идёт в AkelHelp-Rus.htm (после перечисления параметров командной строки), %f - одна из переменных самого AkelPad и используется не только в Scripts plugin.

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

Posted: Tue Oct 28, 2014 7:56 pm
by Cuprum
Да, терминологически я не правильно сказал.

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

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