Scripts plugin
- Author
- Message
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
ИДЕЯ
Посмотрел действие меню "Переоткрыть", оно подходит почти полностью (переоткрывает в той же закладке). Может можно использовать его функционал? Добавить опциональный параметр - имя файла (новое для открытия из скрипта)...Instructor wrote:По пункту 5: когда вкладка очистится, после IDM_NONMENU_FILECLOSE, то затем можно открыть файл через WshShell.Exec (пока нет специальных методов).
Это только идея - не более того.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Ещё немного по окну скриптов
Понял, отсюда перешёл в соотв. тему.
Я хотел сказать, что кнопка "Назначить" вполне могла бы справиться с сохранением изменений, т.е. комбинаций клавиш либо сброса их. Что ещё может сохранить "OK"?
Да.Instructor wrote:VladSh"ОК" - сохранить и закрыть, "Отмена" - выйти без сохранения.Похоже, что кнопки "ОК" и "Отмена" выполняют одно и то же действие - "Закрыть" (окно скриптов). Или я чего недопонял.
Я хотел сказать, что кнопка "Назначить" вполне могла бы справиться с сохранением изменений, т.е. комбинаций клавиш либо сброса их. Что ещё может сохранить "OK"?
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
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
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
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Комментарии вообще по последним изменениям плагина
Глянул на перечень добавленных методов. Это конечно же вроде бы и хорошо, что так их много добавилось...
Но методы все "низкоуровневые" (для работы с памятью и т.д.), что сразу же сужает круг тех, кто будет писать, т.к. это уже не просто JavaScript, - это специальные знания. Если человек знал как работать на низком уровне, то он то же самое мог бы написать в своих плагинах!
Взять к примеру SetClipboardText. Ведь тоже можно было это сделать на низком уровне, но почему-то метод такой добавили? Думаю, потому что это удобно.
По аналогии, как мне кажется, можно было бы сделать 1 метод: OpenFileDialog, тем более внутри AkelPad'а он есть. Я так понимаю это он и есть в выложеных скриптах... куча кода - придётся, если что, постоянно копировать его по файлам скриптов - имхо не удобно!
Если же делать OpenFileDialog, то, я предполагаю, что есть проблема с передачей данных (пути выбранного файла) в скрипт. Но это можно нормально решить:
1). Для простых данных (скаляров) можно сделать как в Нотесах, т.е. передавать/получать данные через *.ini.
2). Для более сложных типов можно через Clipboard:
а). сначала сохранять имеющиеся данные в Clipboard, потом записывать туда имя файла, считывать его в скрипте, а затем возвращать в Clipboard старое значение;
б). использовать для этого отдельную ячейку памяти Clipboard, как это делается в менеджерах буфера обмена.
Т.е. написать ещё одну функцию по получению результата, и, в плане получения данных от главной программы, она была бы универсальной для работы из любого скрипта/плагина. Т.е. в итоге всего пара-тройка методов.
Но методы все "низкоуровневые" (для работы с памятью и т.д.), что сразу же сужает круг тех, кто будет писать, т.к. это уже не просто 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:
По окну скриптов
В последнем релизе сделан 3-й пункт.Fr0sT wrote:Классный плагин! Только вот немного бы доработать интерфейс:
1) При открытии окна со списком скриптов ставить фокус на первый элемент листбокса
2) При повторном открытии окна запоминать последний вызванный скрипт и выделять его
3) Нажатие Enter в то время как фокус у листбокса подразумевает запуск скрипта, а не закрытие окна... вообще, полезность двух кнопок для закрытия именно этого окна представляется мне сомнительной.
п.2 тоже был бы очень важен для удобства. Если, к примеру, я использую какой-то скрипт в данный момент очень часто, то при вызове окна скриптов (у меня Alt+S) останется нажать Enter, т.к. на последнем вызываемом скрипте уже стоит (запомнился) фокус.
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
VladSh
MyScript1.js
MyScript2.js
Вся прелесть добавленных методов заключается в том, что из скрипта можно вызвать практически любую системную функцию, не прибегая к компиляции своего dll. И диалог выбора файла вызывается не из AkelPad'а, а прямиком из comdlg32.dll.По аналогии, как мне кажется, можно было бы сделать 1 метод: OpenFileDialog, тем более внутри AkelPad'а он есть.
CommonFunctions.jsкуча кода - придётся, если что, постоянно копировать его по файлам скриптов - имхо не удобно!
Code: Select all
function FileOpenDialogA(pInitialFile, pFilter)
{
//...
}
function FileOpenDialogW(pInitialFile, pFilter)
{
//...
}
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(...);
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:
О! А я уже по инету обыскался, что такое за enum в JavaScript
Теперь не может собрать путь к файлу (ошибка!). Вылетает сообщение между путём проги и прибавляемым какой-то прям "любовный" значок - кружочек со стрелкой вверх-вправо
убирал слэши - не помогает...
Так и думал... попробуйте вывести:
Теперь не может собрать путь к файлу (ошибка!). Вылетает сообщение между путём проги и прибавляемым какой-то прям "любовный" значок - кружочек со стрелкой вверх-вправо
убирал слэши - не помогает...
Так и думал... попробуйте вывести:
Code: Select all
WScript.Echo(AkelPad.GetAkelDir());
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Всё-таки идея (+)
Понял, буду ждать.
А всё-таки, как Вы относитесь к передаче параметров и получению результата через ini?
Сделать раздельчик в ini-файле и туда писать в таком формате:
Допустим мне нужно открыть файл, я вызываю из AkelPad'а эту функцию, в которой анализируется, если я вызываю её извне, то результат пишется в ini одной функцией, а потом в скрипте другой функцией я считываю этот результат и вытираю его в ini.
Допустим нужно переименовать файл. Я его переименовываю на диске (или создаю такой же файл рядом, только с нужным именем, в конце удаляю старый). Функцией передачи параметров пишу наименование открываемого (нового) файла по вышеуказанному шаблону в ini. Дальше в скрипте вызываю по номеру функцию "Переоткрыть", которая анализирует, если вызов был извне, то с помощью стандартной функции смотрит ini, если там для неё есть имя файла, то значит после закрытия текущего файла нужно открывать тот, что указан в ini; эта же функция после получения результата чистит свою запись в ini.
Анализ на запуск извне у Вас наверное и так делается с помощью WinMessage...
Идея полностью рабочая; в Нотесах и др. ЙиБэЭмовских продуктах встроено по несколько языков программирования (каждый для своих задач) именно так они обмениваются простыми данными, т.е. работают в связке.
А всё-таки, как Вы относитесь к передаче параметров и получению результата через ini?
Сделать раздельчик в ini-файле и туда писать в таком формате:
Code: Select all
[Temp]
№команды_№вкладки=значение
Допустим нужно переименовать файл. Я его переименовываю на диске (или создаю такой же файл рядом, только с нужным именем, в конце удаляю старый). Функцией передачи параметров пишу наименование открываемого (нового) файла по вышеуказанному шаблону в ini. Дальше в скрипте вызываю по номеру функцию "Переоткрыть", которая анализирует, если вызов был извне, то с помощью стандартной функции смотрит ini, если там для неё есть имя файла, то значит после закрытия текущего файла нужно открывать тот, что указан в ini; эта же функция после получения результата чистит свою запись в ini.
Анализ на запуск извне у Вас наверное и так делается с помощью WinMessage...
Идея полностью рабочая; в Нотесах и др. ЙиБэЭмовских продуктах встроено по несколько языков программирования (каждый для своих задач) именно так они обмениваются простыми данными, т.е. работают в связке.