| View previous topic :: View next topic |
| Author |
Message |
Infocatcher
Joined: 06 Aug 2007 Posts: 1440
|
Posted: Sat Jan 08, 2011 3:24 pm Post subject: |
|
|
| Quote: | | Now I see that none of the VBS scripts do not work. |
Confirmed:
| Code: | Scripts плагин
---------------------------
Скрипт: [...]\AkelFiles\Plugs\Scripts\Test.vbs
Строка: 17
Символ: 1
Ошибка: Переменная использует не поддерживаемый в VBScript тип программирования объектов
Код: 800A01CA
Источник: Ошибка выполнения Microsoft VBScript |
|
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1080 Location: Poland
|
Posted: Sat Jan 08, 2011 5:08 pm Post subject: |
|
|
| Methods AkelPad.GetMainWnd and AkelPad.GetEditWnd returns values, which VBS does not understand. |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1080 Location: Poland
|
Posted: Sat Jan 08, 2011 9:13 pm Post subject: |
|
|
| In ColumnsSort.js added alphabetically sorting. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1440
|
Posted: Sun Jan 09, 2011 6:14 am Post subject: |
|
|
Не прошло и года , фикс для опережающих проверок:
SearchReplace_mod2.js
Все оказалось весьма просто – к счастью, для BT_FINDNEXT делается lpArray=pSelText.match(oPattern), а то там много хитрого кода, моя не понимать.
Ну, и AkelPad.GetTextRange() теперь есть.
| Code: | if (nButton == BT_REPLACE)
{
if (nInitialSelStart != nInitialSelEnd)
{
...
if (/\(\?[=!].*\)/.test(pFindIt)) // Lookahead assertions: x(?=y) or x(?!y)
{
var pEndText=AkelPad.GetTextRange(AkelPad.GetSelStart(), -1, 2 /*\n*/);
if (!bAkelEdit)
pEndText=pEndText.replace(/\r/g, "\n");
if (oPattern.test(pEndText) && RegExp.lastMatch == pSelText)
{
pResult=pEndText.replace(oPattern, pReplaceWithEsc);
pResult=pResult.substr(0, pResult.length - (pEndText.length - pSelText.length));
AkelPad.ReplaceSel(pResult);
nInitialSelStart=AkelPad.GetSelStart();
nInitialSelEnd=AkelPad.GetSelEnd();
}
}
else
{
// старый код
...
} |
[Upd]
Идея: SearchReplace.js в виде панельки, как QSearch. Можно даже поиск по мере набора попробовать сделать (и посмотреть, <del>как он будет тормозить</del> не будет ли он излишне тормозить). Можно засекать время и отключать, если предыдущий запрос слишком долго обрабатывался. |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 734 Location: Kyiv, Ukraine
|
Posted: Tue Jan 11, 2011 2:31 pm Post subject: |
|
|
Приблизительный скрипт OpenInNewInstance.js.
Известные проблемы: новая копия AkelPad (MDI) открывает все те же вкладки, открытые в первой копии. И не дружит с плагином Sessions.
OpenInNewInstance.js | Code: | var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
var hMainMenu = oSys.Call("user32::GetMenu", hMainWnd);
// constants
var WM_COMMAND = 273;
var MF_BYCOMMAND = 0x00;
var MF_UNCHECKED = 0x00;
var MF_CHECKED = 0x08;
var IDM_FILE_TWICE = 4255;
var IDM_PROGRAM_TWICE = 4256;
// uncheck menu item if checked
var nFileTwiceChanged = MenuItemState(IDM_FILE_TWICE);
// uncheck menu item if checked
var nProgramTwiceChanged = MenuItemState(IDM_PROGRAM_TWICE);
var pAkelDir = AkelPad.GetAkelDir();
var pEditFile = AkelPad.GetEditFile(0)
var WshShell = new ActiveXObject("WScript.shell");
// run new AkelPad.exe
WshShell.Run("\"" + pAkelDir + "\\AkelPad.exe\" \"" + pEditFile + "\"");
// wait for a second
oSys.Call("kernel32::Sleep", 1000);
// restore menu item's checked state
if ( nFileTwiceChanged )
{
ChangeMenuItemState(IDM_FILE_TWICE);
}
// restore menu item's checked state
if ( nProgramTwiceChanged )
{
ChangeMenuItemState(IDM_PROGRAM_TWICE);
}
function MenuItemState(id)
{
var state = oSys.Call("user32::GetMenuState", hMainMenu, id, MF_BYCOMMAND);
if ( state != -1 )
{
if ( state & MF_CHECKED )
{
ChangeMenuItemState(id);
return 1;
}
}
return 0;
}
function ChangeMenuItemState(id)
{
AkelPad.SendMessage(hMainWnd, WM_COMMAND, id, 0);
}
|
|
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1907 Location: Vinnitsa, Ukraine
|
Posted: Tue Jan 11, 2011 3:40 pm Post subject: |
|
|
| Quote: | | Известные проблемы: новая копия AkelPad (MDI) открывает все те же вкладки, открытые в первой копии. | ЕМНИП Акел сам не открывает ничего. Это Sessions делает.
Ну и сразу же предложения/подсказки:
1. В скрипте зашито имя файла. Нужно "расшить", т.е. запускать то что запущено сейчас. Для этого пользуемся функцией kernel32::GetModuleFileName(NULL)
2. Естественно желательно запустить как-бы копию(хотя в принципе не обязательно). Это касается ключей запуска, в первую очередь выделенных(остальные процитированные нужно обдумать): | Quote: | #define CLO_MSGOPENCREATEYES 0x04 //Silently create new file, if doesn't exist.
#define CLO_MSGOPENCREATENO 0x08 //Don't create new file, if doesn't exist.
#define CLO_MSGOPENBINARYYES 0x10 //Silently open file, if binary.
#define CLO_MSGOPENBINARYNO 0x20 //Don't open file, if binary.
#define CLO_MSGSAVELOSTSYMBOLSYES 0x40 //Silently save file, even if symbols will be lost.
#define CLO_MSGSAVELOSTSYMBOLSNO 0x80 //Don't save file, if symbols will be lost.
| Значит AKD_GETCMDLINEOPTIONS нужен.
3. Насчет проблемы с Sessions. Думаю при запуске следует временно запретить автозагрузку файлов, а потом разрешить.(Схема такова: анализируем настройки плагина, а именно OpenOnStartEnable и OpenOnStartSession. Либо мы временно настройку разрешение меняем, а потом возвращаем назад, либо временно убираем файл сессий. Конечно есть шанс что можем напороться на read-only file-system, но тут случай особый(и вообще неюзабельный). |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4675
|
Posted: Thu Jan 13, 2011 6:42 am Post subject: |
|
|
| Infocatcher wrote: | | ...фикс для опережающих проверок... | Добавил. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2521 Location: Киев, Русь
|
Posted: Thu Jan 13, 2011 11:08 am Post subject: |
|
|
Авторам скриптов: возможно нужно откорректировать:
- Calculator.js (из дистрибутива плага);
- NeO.Sort.js: if (sInput == undefined) WScript.Quit();
на предмет возвращения InputBox'ом undefined'а.
Свои скрипты я откорректировал. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4675
|
Posted: Thu Jan 13, 2011 1:40 pm Post subject: |
|
|
VladSh
Достаточно сравнивать так:
| Code: | pValue=AkelPad.InputBox(...)
if (pValue)
... |
вместо:
| Code: | pValue=AkelPad.InputBox(...)
if (pValue != '')
... |
|
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2521 Location: Киев, Русь
|
Posted: Thu Jan 13, 2011 2:27 pm Post subject: |
|
|
У меня на этом | Code: | | if (pValue != '')... | ругалось, что работаю с undefined
а этоработает
Спасибо! |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2521 Location: Киев, Русь
|
Posted: Fri Jan 14, 2011 8:48 am Post subject: |
|
|
lexa
По поводу SmartBackspace.
1. Идея хорошая, но работает криво. Ожидалось, что будет стирать по количеству пробелов, указанных в настройках. Я настроил скрипт на Ctrl+Backspace, но происходит какая-то чепуха...
2. Лучше переписать алгоритм скрипта так, чтобы не было SendKeys'ов, это затупляет скрипт. Негативный опыт их использования уже большой, поэтому во всех своих скриптах я от этого избавился.
3. В самом скрипте, в комментах (вверху) лучше ставить:
///Краткий коммент
// URL сообщения на форуме, куда выложен скрипт (чтобы людям было удобно находить этот скрипт на странице и обновлять при необходимости).
// Version x.x (гггг.мм.дд) |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2521 Location: Киев, Русь
|
Posted: Fri Jan 14, 2011 10:10 am Post subject: |
|
|
Instructor & all
Подскажите пожалуйста, можно ли в диалог (так как он создаётся в InsertFile.js) как-то изменить начальную дирректорию? Неудобно то, что используется текущая из AkelPad'а, а чаще нужна дирректория текущего файла.
| Code: | | AkelPad.SendMessage(hWndMain, 273, 4106, 0); | как ни странно, работает правильно.
Может и в диалог, создаваемый в скрипте, можно как-то подсунуть InitialDir?
P.S. Ух, лучше бы в плаге был нормальный FileDialog... |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1907 Location: Vinnitsa, Ukraine
|
Posted: Fri Jan 14, 2011 11:03 am Post subject: |
|
|
VladSh
что-то я не совсем понял о каком именно диалоге идет речь. В файлк который в коллекции InsertFile.js никакого диалога не наблюдаю(видать устаревший), а то что у меня - там стандартный диалог открытия/сохранения файлов винды, и там можно указать в какой папке нужно открыться при создании. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2521 Location: Киев, Русь
|
Posted: Fri Jan 14, 2011 11:54 am Post subject: |
|
|
| FeyFre wrote: | | стандартный диалог открытия/сохранения файлов винды, и там можно указать в какой папке нужно открыться при создании. | Да, FileDialog, который там - это стандартный виндовый.
Не подскажете, как подменить там InitialDir? |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1907 Location: Vinnitsa, Ukraine
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|