Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

+

Post by VladSh »

Ждём-ждём!!! :arrow:
Похоже в новой версии намечается много вкусненького :)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

ИДЕЯ

Post by VladSh »

Instructor wrote:По пункту 5: когда вкладка очистится, после IDM_NONMENU_FILECLOSE, то затем можно открыть файл через WshShell.Exec (пока нет специальных методов).
:idea: Посмотрел действие меню "Переоткрыть", оно подходит почти полностью (переоткрывает в той же закладке). Может можно использовать его функционал? Добавить опциональный параметр - имя файла (новое для открытия из скрипта)... :)
Это только идея - не более того.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Ещё немного по окну скриптов

Post by VladSh »

Понял, отсюда перешёл в соотв. тему.
Instructor wrote:VladSh
Похоже, что кнопки "ОК" и "Отмена" выполняют одно и то же действие - "Закрыть" (окно скриптов). Или я чего недопонял.
"ОК" - сохранить и закрыть, "Отмена" - выйти без сохранения.
Да.
Я хотел сказать, что кнопка "Назначить" вполне могла бы справиться с сохранением изменений, т.е. комбинаций клавиш либо сброса их. Что ещё может сохранить "OK"?

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

Post by Instructor »

Now with script you can execute any windows function and even create your own dialog.

Changed: AkelPad 3.3.5 required.

Added: SystemFunction, SystemFunction.AddParameter, SystemFunction.Call, SystemFunction.GetLastError, MemAlloc, MemCopy, MemRead, MemFree, WindowRegisterClass, WindowUnregisterClass, WindowGetMessage, GetInstanceDll, IsOldWindows, ReadFile methods.
Added: hotkey's names.

Fixed: enter key didn't execute script.


Scripts plugin v1.5

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

Post by Instructor »

VladSh
Очень часто требуется переименовать текущий файл (открытый в текущей закладке или окне), такой функции к огромному сожалению в AkelPad'е нет, поэтому приходится писать самому...
см. RenameFileDialog.js в дистрибутиве плагина.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Комментарии вообще по последним изменениям плагина

Post by VladSh »

Глянул на перечень добавленных методов. Это конечно же вроде бы и хорошо, что так их много добавилось...
Но методы все "низкоуровневые" (для работы с памятью и т.д.), что сразу же сужает круг тех, кто будет писать, т.к. это уже не просто JavaScript, - это специальные знания. Если человек знал как работать на низком уровне, то он то же самое мог бы написать в своих плагинах!

Взять к примеру SetClipboardText. Ведь тоже можно было это сделать на низком уровне, но почему-то метод такой добавили? Думаю, потому что это удобно.
По аналогии, как мне кажется, можно было бы сделать 1 метод: OpenFileDialog, тем более внутри AkelPad'а он есть. Я так понимаю это он и есть в выложеных скриптах... куча кода - придётся, если что, постоянно копировать его по файлам скриптов - имхо не удобно!
Если же делать OpenFileDialog, то, я предполагаю, что есть проблема с передачей данных (пути выбранного файла) в скрипт. Но это можно нормально решить:
1). Для простых данных (скаляров) можно сделать как в Нотесах, т.е. передавать/получать данные через *.ini.
2). Для более сложных типов можно через Clipboard:
а). сначала сохранять имеющиеся данные в Clipboard, потом записывать туда имя файла, считывать его в скрипте, а затем возвращать в Clipboard старое значение;
б). использовать для этого отдельную ячейку памяти Clipboard, как это делается в менеджерах буфера обмена.
Т.е. написать ещё одну функцию по получению результата, и, в плане получения данных от главной программы, она была бы универсальной для работы из любого скрипта/плагина. Т.е. в итоге всего пара-тройка методов.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

По окну скриптов

Post by VladSh »

Fr0sT wrote:Классный плагин! Только вот немного бы доработать интерфейс:
1) При открытии окна со списком скриптов ставить фокус на первый элемент листбокса
2) При повторном открытии окна запоминать последний вызванный скрипт и выделять его
3) Нажатие Enter в то время как фокус у листбокса подразумевает запуск скрипта, а не закрытие окна... вообще, полезность двух кнопок для закрытия именно этого окна представляется мне сомнительной.
В последнем релизе сделан 3-й пункт.

п.2 тоже был бы очень важен для удобства. Если, к примеру, я использую какой-то скрипт в данный момент очень часто, то при вызове окна скриптов (у меня Alt+S) останется нажать Enter, т.к. на последнем вызываемом скрипте уже стоит (запомнился) фокус.

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

Post by Instructor »

Added: GetAkelDir method.


Scripts plugin v1.6

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

Post by Instructor »

VladSh
По аналогии, как мне кажется, можно было бы сделать 1 метод: OpenFileDialog, тем более внутри AkelPad'а он есть.
Вся прелесть добавленных методов заключается в том, что из скрипта можно вызвать практически любую системную функцию, не прибегая к компиляции своего dll. И диалог выбора файла вызывается не из AkelPad'а, а прямиком из comdlg32.dll.
куча кода - придётся, если что, постоянно копировать его по файлам скриптов - имхо не удобно!
CommonFunctions.js

Code: Select all

function FileOpenDialogA(pInitialFile, pFilter)
{
//...
}
function FileOpenDialogW(pInitialFile, pFilter)
{
//...
}
MyScript1.js

Code: Select all

var AkelPad=new ActiveXObject("AkelPad.document");

//Include common functions
eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\CommonFunctions.js", 0xD, 0, 0));

//Your MyScript1 code
FileOpenDialogA(...);
MyScript2.js

Code: Select all

var AkelPad=new ActiveXObject("AkelPad.document");

//Include common functions
eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\CommonFunctions.js", 0xD, 0, 0));

//Your MyScript2 code
FileOpenDialogA(...);
Last edited by Instructor on Sat Jul 28, 2007 1:42 pm, edited 2 times in total.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Ошибка

Post by VladSh »

Так вот он какой северный олень!!! :lol:
Идея очень неплоха! 8)

НО: скрипт вылетает на строке enum... (я её целиком скопировал у Вас): "Синтаксическая ошибка!"...
help me!

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

Post by Instructor »

Ой. enum -> eval.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

О! А я уже по инету обыскался, что такое за enum в JavaScript :)

Теперь не может собрать путь к файлу (ошибка!). Вылетает сообщение между путём проги и прибавляемым какой-то прям "любовный" значок - кружочек со стрелкой вверх-вправо :D
убирал слэши - не помогает...

Так и думал... попробуйте вывести:

Code: Select all

WScript.Echo(AkelPad.GetAkelDir());

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

Post by Instructor »

Да, в XP функция GetWindowModuleFileNameW не работает для другого процесса. Прийдется добавлять новое сообщение в AkelPad. Т.е. метод AkelPad.GetAkelDir() пока не работает в XP.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Всё-таки идея (+)

Post by VladSh »

Понял, буду ждать.

А всё-таки, как Вы относитесь к передаче параметров и получению результата через ini?
Сделать раздельчик в ini-файле и туда писать в таком формате:

Code: Select all

[Temp]
№команды_№вкладки=значение
Допустим мне нужно открыть файл, я вызываю из AkelPad'а эту функцию, в которой анализируется, если я вызываю её извне, то результат пишется в ini одной функцией, а потом в скрипте другой функцией я считываю этот результат и вытираю его в ini.

Допустим нужно переименовать файл. Я его переименовываю на диске (или создаю такой же файл рядом, только с нужным именем, в конце удаляю старый). Функцией передачи параметров пишу наименование открываемого (нового) файла по вышеуказанному шаблону в ini. Дальше в скрипте вызываю по номеру функцию "Переоткрыть", которая анализирует, если вызов был извне, то с помощью стандартной функции смотрит ini, если там для неё есть имя файла, то значит после закрытия текущего файла нужно открывать тот, что указан в ini; эта же функция после получения результата чистит свою запись в ini.

Анализ на запуск извне у Вас наверное и так делается с помощью WinMessage...

Идея полностью рабочая; в Нотесах и др. ЙиБэЭмовских продуктах встроено по несколько языков программирования (каждый для своих задач) именно так они обмениваются простыми данными, т.е. работают в связке.

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

Post by Instructor »

VladSh
Страшно даже подумать, что я такое буду реализовывать :)
Post Reply