AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (1)
Goto page Previous  1, 2, 3 ... 48, 49, 50 ... 95, 96, 97  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Infocatcher



Joined: 06 Aug 2007
Posts: 1616

PostPosted: Sat Jan 08, 2011 3:24 pm    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1358
Location: Poland

PostPosted: Sat Jan 08, 2011 5:08 pm    Post subject: Reply with quote

Methods AkelPad.GetMainWnd and AkelPad.GetEditWnd returns values, which VBS does not understand.
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1358
Location: Poland

PostPosted: Sat Jan 08, 2011 9:13 pm    Post subject: Reply with quote

In ColumnsSort.js added alphabetically sorting.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1616

PostPosted: Sun Jan 09, 2011 6:14 am    Post subject: Reply with quote

Не прошло и года Very Happy, фикс для опережающих проверок:
SearchReplace_mod2.js

Все оказалось весьма просто – к счастью, для BT_FINDNEXT делается lpArray=pSelText.match(oPattern), а то там много хитрого кода, моя не понимать. Smile
Ну, и 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
View user's profile Send private message Visit poster's website
DV



Joined: 16 Nov 2006
Posts: 846
Location: Kyiv, Ukraine

PostPosted: Tue Jan 11, 2011 2:31 pm    Post subject: Reply with quote

Приблизительный скрипт 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
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2040
Location: Vinnitsa, Ukraine

PostPosted: Tue Jan 11, 2011 3:40 pm    Post subject: Reply with quote

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
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5359

PostPosted: Thu Jan 13, 2011 6:42 am    Post subject: Reply with quote

Infocatcher wrote:
...фикс для опережающих проверок...
Добавил.
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Thu Jan 13, 2011 11:08 am    Post subject: Reply with quote

Авторам скриптов: возможно нужно откорректировать:
- Calculator.js (из дистрибутива плага);
- NeO.Sort.js: if (sInput == undefined) WScript.Quit();
на предмет возвращения InputBox'ом undefined'а.
Свои скрипты я откорректировал.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5359

PostPosted: Thu Jan 13, 2011 1:40 pm    Post subject: Reply with quote

VladSh
Достаточно сравнивать так:
Code:
pValue=AkelPad.InputBox(...)
if (pValue)
...

вместо:
Code:
pValue=AkelPad.InputBox(...)
if (pValue != '')
...
Back to top
View user's profile Send private message Send e-mail
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Thu Jan 13, 2011 2:27 pm    Post subject: Reply with quote

У меня на этом
Code:
if (pValue != '')...
ругалось, что работаю с undefined

а это
Code:
if (pValue)
работает

Спасибо!
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Fri Jan 14, 2011 8:48 am    Post subject: Reply with quote

lexa
По поводу SmartBackspace.
1. Идея хорошая, но работает криво. Ожидалось, что будет стирать по количеству пробелов, указанных в настройках. Я настроил скрипт на Ctrl+Backspace, но происходит какая-то чепуха...
2. Лучше переписать алгоритм скрипта так, чтобы не было SendKeys'ов, это затупляет скрипт. Негативный опыт их использования уже большой, поэтому во всех своих скриптах я от этого избавился.
3. В самом скрипте, в комментах (вверху) лучше ставить:
///Краткий коммент
// URL сообщения на форуме, куда выложен скрипт (чтобы людям было удобно находить этот скрипт на странице и обновлять при необходимости).
// Version x.x (гггг.мм.дд)
Back to top
View user's profile Send private message Visit poster's website
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Fri Jan 14, 2011 10:10 am    Post subject: Reply with quote

Instructor & all
Подскажите пожалуйста, можно ли в диалог (так как он создаётся в InsertFile.js) как-то изменить начальную дирректорию? Неудобно то, что используется текущая из AkelPad'а, а чаще нужна дирректория текущего файла.
Code:
AkelPad.SendMessage(hWndMain, 273, 4106, 0);
как ни странно, работает правильно.
Может и в диалог, создаваемый в скрипте, можно как-то подсунуть InitialDir?

P.S. Ух, лучше бы в плаге был нормальный FileDialog...
Back to top
View user's profile Send private message Visit poster's website
FeyFre



Joined: 07 Aug 2007
Posts: 2040
Location: Vinnitsa, Ukraine

PostPosted: Fri Jan 14, 2011 11:03 am    Post subject: Reply with quote

VladSh
что-то я не совсем понял о каком именно диалоге идет речь. В файлк который в коллекции InsertFile.js никакого диалога не наблюдаю(видать устаревший), а то что у меня - там стандартный диалог открытия/сохранения файлов винды, и там можно указать в какой папке нужно открыться при создании.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
VladSh



Joined: 29 Nov 2006
Posts: 2610
Location: Киев, Русь

PostPosted: Fri Jan 14, 2011 11:54 am    Post subject: Reply with quote

FeyFre wrote:
стандартный диалог открытия/сохранения файлов винды, и там можно указать в какой папке нужно открыться при создании.
Да, FileDialog, который там - это стандартный виндовый.
Не подскажете, как подменить там InitialDir?
Back to top
View user's profile Send private message Visit poster's website
FeyFre



Joined: 07 Aug 2007
Posts: 2040
Location: Vinnitsa, Ukraine

PostPosted: Fri Jan 14, 2011 3:18 pm    Post subject: Reply with quote

Там есть переменная lpStructure - указатель на структуру OPENFILENAME
Вот тут http://msdn.microsoft.com/en-us/library/ms646839%28v=vs.85%29.aspx описаны её поля.
Вас интересует поле lpstrInitialDir - заполняйте его(и вообще почитайте о ней)
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 48, 49, 50 ... 95, 96, 97  Next
Page 49 of 97

 
Jump to:  
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


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group