Scripts discussion (3)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

KDJ скрипт TextMarker.js - отличная работа, но можно ли языковую поддержку вынести как в AkelPadDocsView.js - это будет удобно при использовании и обновлении . Спасибо!

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »


KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Andrey_A_A thanks for the translation.

AkelPadDocsView.js
Added: Russian translation.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

KDJ

Скрипт Example_of_use.js выдает такую ошибку

Code: Select all

Скрипт:	D:\TC IMAGE\AkelFiles\Plugs\Scripts\Include\EnumTopLevelWindows_function.js
Строка:	70
Символ:	3
Ошибка:	Несоответствие типа
Код:	800A000D
Источник:	Ошибка выполнения Microsoft JScript
WindowsList.js сразу виснет при запуске вместе с AkelPad

тоже самое со скриптом SendData.js

Система 7x64

-----------------------------
Переводил и только заметил: в скрипте AkelPadDocsView.js одинаковые переменные.

Code: Select all

    sTxtWrapLines    = "Wrap text lines";
    sTxtWrapLines    = "Wrap lines in *.txt documents";

Offline
Posts: 46
Joined: Fri Mar 22, 2013 5:05 am
Location: Белово, Кемеровская область, Россия

Post by Egorkaru »

VladSh wrote:

Code: Select all

///Open URL or Site
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=4548#p4548
// Version: 2.1 (2011.04.06)
// 
// Arguments:	`"%u" "SiteFind" "Program"`
//					- SiteFind = 0		-	opened URL
//					- SiteFind = 1		-	opened Site

if (WScript.Arguments.length == 0) WScript.Quit();

var URL = WScript.Arguments(0);
//default values for this script:
var SiteOpen = 1;
var Program = 'rundll32.exe shell32, ShellExec_RunDLL';

if (WScript.Arguments.length > 1)
{
	SiteOpen = WScript.Arguments(1);
	if (WScript.Arguments.length == 3)
		Program = WScript.Arguments(2);
}

if (SiteOpen == "1")
{
	//определяем адрес сайта
	URL = URL.slice(0, URL.indexOf('/', URL.indexOf(':/', 0) + 3));
}

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Exec(Program + ' "' + URL + '"');


Конечно лучше бы вываливался список (а красивей была бы малюсенькая менюха) всех промежуточных вариантов путей как в Висте, но... пока нет метода ListBox сойдёт и так.


Примеры использования в моём контекстном меню (ссылок).
Не работает. Что делать?

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

KDJ
Перевод:

Code: Select all

function GetLangStrings()
{
 if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
 {
    sTxtDlgTitle     = "Просмотр методов скриптинга AkelPad";
    sTxtNoFiles      = "Нет файлов:";
    sTxtChooseDir    = "Выберите папку с документацией для Scripts плагина:";
    sTxtSort         = "&Сортировать";
    sTxtEnglish      = "&Английский";
    sTxtRussian      = "&Русский";
    sTxtMenu         = "&Меню";
    sTxtOK           = "OK";
    sTxtClose        = "Закрыть";
    sTxtName         = "Имя";
    sTxtText         = "Текст";
    sTxtFindName     = "Поиск имени";
    sTxtFindText     = "Поиск текста";
    sTxtDownFromBeg  = "С начала";
    sTxtDownFromCur  = "Вниз";
    sTxtUpFromEnd    = "Снизу";
    sTxtUpFromCur    = "Вверх";
    sTxtNext         = "Следующий";
    sTxtPrevious     = "Предыдущий";
    sTxtMatchCase    = "С учётом регистра";
    sTxtIgnoreCase   = "Без учёта регистра";
    sTxtNotFound     = "Не найдено.";
    sTxtMoveWindow   = "Перемещение окна";
    sTxtLeft         = "Влево";
    sTxtRight        = "Вправо";
    sTxtUp           = "Вверх";
    sTxtDown         = "Вниз";
    sTxtToLeftEdge   = "До левого края";
    sTxtToRightEdge  = "До правого края";
    sTxtToTopEdge    = "До верхнего края";
    sTxtToBottomEdge = "До нижнего края";
    sTxtFindCase     = "Поиск с учетом регистра";
    sTxtWrapLines    = "Переном по словам";
    sTxtSeparateWnd  = "Запускать в отдельном окне";
    sTxtCopyToCB     = "Копировать";
    sTxtInsertToAP   = "Вставить в AkelPad";
    sTxtSelectAll    = "Выделить всё";
 }
 else
  {
    sTxtDlgTitle     = "AkelPad methods view";
    sTxtNoFiles      = "Files not found:";
    sTxtChooseDir    = "Choose directory with documentation of Scripts plugin:";
    sTxtSort         = "&Sort methods";
    sTxtEnglish      = "&English";
    sTxtRussian      = "&Russian";
    sTxtMenu         = "&Menu";
    sTxtOK           = "OK";
    sTxtClose        = "Close";
    sTxtName         = "Name";
    sTxtText         = "Text";
    sTxtFindName     = "Find name";
    sTxtFindText     = "Find text";
    sTxtDownFromBeg  = "Down from beginning";
    sTxtDownFromCur  = "Down from current position";
    sTxtUpFromEnd    = "Up from end";
    sTxtUpFromCur    = "Up from current position";
    sTxtNext         = "Next";
    sTxtPrevious     = "Previous";
    sTxtMatchCase    = "Match case";
    sTxtIgnoreCase   = "Ignore case";
    sTxtNotFound     = "Not found.";
    sTxtMoveWindow   = "Move window";
    sTxtLeft         = "Left";
    sTxtRight        = "Right";
    sTxtUp           = "Up";
    sTxtDown         = "Down";
    sTxtToLeftEdge   = "To left edge";
    sTxtToRightEdge  = "To right edge";
    sTxtToTopEdge    = "To top edge";
    sTxtToBottomEdge = "To bottom edge";
    sTxtFindCase     = "Find - match case";
    sTxtWrapLines    = "Wrap lines";
    sTxtSeparateWnd  = "Run in separate window";
    sTxtCopyToCB     = "Copy to clipboard";
    sTxtInsertToAP   = "Insert to AkelPad";
    sTxtSelectAll    = "Select all";
  }
}

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Andrey_A_A wrote:Скрипт Example_of_use.js выдает такую ошибку
...
WindowsList.js сразу виснет при запуске вместе с AkelPad
тоже самое со скриптом SendData.js
Система 7x64
Not reproduced.
I tried on Win7 x64, AkelPad v.4.9.0, Scripts v.15.7, EnumerateWindows_functions.js v.2014-04-12, WindowsList.js v.2014-04-12, SendData.js v.2014-04-12.
Maybe you have outdated versions?
And you should use EnumerateWindows_functions.js instead of EnumTopLevelWindows_function.js.
Переводил и только заметил: в скрипте AkelPadDocsView.js одинаковые переменные.
Corrected: AkelPadDocsView.js

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

AkelPad v.4.9.0, Win 7x64, Scripts v.15.7

Вот скрипт Example_of_use.js
Я заменил на функцию EnumerateWindows_functions.js - версия 2014-04-12
теперь ничего не происходит - и после вызова не работает ни один другой скрипт.
Приходится перезапускать AkelPad

Code: Select all

if (AkelPad.Include("EnumerateWindows_functions.js"))
{
  var aWnd = EnumTopLevelWindows(1 /*nTitle*/, 1 /*nVisible*/, 2 /*nMinimized*/, 2 /*nMaximized*/,
                                 1 /*nSize*/,  2 /*nTopMost*/, 2 /*nToolWin*/);
  var sTxt = "";
  var i;

  for (i = 0; i < aWnd.length; ++i)
    sTxt += aWnd[i].BaseName + "     " + aWnd[i].Title + "\n";

  AkelPad.Command(4101 /*IDM_FILE_NEW*/);
  AkelPad.ReplaceSel(sTxt);
  AkelPad.SendMessage(AkelPad.GetEditWnd(), 3087 /*AEM_SETMODIFY*/, false, 0);
  AkelPad.SendMessage(AkelPad.GetEditWnd(), 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
}



Вызов WindowsList.js 2014-04-12 и SendData.js 2014-04-12 при запуске виснут и завершает работу с такой ошибкой:

Code: Select all

  Имя события проблемы:	AppHangXProcB1
  Имя приложения:	AkelPad.exe
  Версия приложения:	4.9.0.0
  Отметка времени приложения:	540d3156
  Сигнатура зависания:	5373
  Тип зависания:	32
  Ожидание имени приложения:	taskmgr.exe
  Ожидание версии приложения:	0.0.0.0
  Версия ОС:	6.1.7601.2.1.0.256.1
  Код языка:	1049
  Доп. сигнатура зависания 1:	5373428ef0c66a221d391d6b3b9df73f
  Доп. сигнатура зависания 2:	d2f1
  Доп. сигнатура зависания 3:	d2f178091242c47c157024eeec7c2ce8
  Доп. сигнатура зависания 4:	5373
  Доп. сигнатура зависания 5:	5373428ef0c66a221d391d6b3b9df73f
  Доп. сигнатура зависания 6:	d2f1
  Доп. сигнатура зависания 7:	d2f178091242c47c157024eeec7c2ce8

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

Post by VladSh »

Egorkaru
Для обсуждения скриптов есть отдельная тема.

На WinXP работало...

Поправил. Обновите скрипты URLOpen.js (переделал для работы на Win7) и OpenByLSC.js, а также см. контекстное меню ссылок, идущее к первому скрипту, - формат задания аргументов поменялся.

P.S. Спасибо за багрепорт))

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

Post by VladSh »

LonerD wrote:Вопрос по скрипту punctuationFixer.js.
В чём смысл скрипта? Когда целесообразно его применять? На первый взгляд - исправляет каким-то образом пунктуацию текста, буквы после точки становятся большими, ставится пробел после точки и запятой и т.д. Но вот непонятный момент - после точки ставится пробел, первая буква следующего предложения становится большой и после неё снова ставится пробел. Например, текст "зима.холодно" превращается в "Зима. Х олодно." Судя по возрасту скрипта и отсутствию исправлений - это не ошибка, так и задумано (или никто не пользуется скриптом и не замечал ошибку?).
Infocatcher wrote:Это ошибка. Видимо, никто не жаловался. А я, похоже, не пользовался давно...
Регресс.
Это не ошибка. Так и было задумано. Я начинал пилить этот скрипт, но потом Infocatcher помог, т.к. у меня не хватало знаний в регулярках. Смысл скрипта - переделывать каракули в нормальный читаемый текст, - многие после знаков препинания не ставят пробелов и не используют заглавные буквы в началах предложений.
Вот что неправильное в этом скрипте - его название, - правильное оформление предложений слабо относится к пунктуации.

Offline
Posts: 171
Joined: Thu Dec 01, 2011 11:15 pm
Location: Россия

Post by LonerD »

Это не ошибка. Так и было задумано...
Всё равно непонятно... З ачем при исправлении ставить пробел после каждой заглавной буквы? Е сли бы это были какие-то буквицы, которые нужно визуально выделить - другое дело... Н о в обычном тексте выглядит нелепо.

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

Post by VladSh »

LonerD
Понял теперь в чём дело. Да, пробел после заглавной буквы - баг. Прошу прощения.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Andrey_A_A
Try this test script and give me the last message that appeared before the suspension of the script:

Code: Select all

var aWnd = EnumTopLevelWindows(1 /*nTitle*/, 1 /*nVisible*/, 2 /*nMinimized*/, 2 /*nMaximized*/, 1 /*nSize*/, 2 /*nTopMost*/, 2 /*nToolWin*/);
var sTxt = "";
var i;

for (i = 0; i < aWnd.length; ++i)
  sTxt += aWnd[i].BaseName + "     " + aWnd[i].Title + "\n";

AkelPad.Command(4101 /*IDM_FILE_NEW*/);
AkelPad.ReplaceSel(sTxt);
AkelPad.SendMessage(AkelPad.GetEditWnd(), 3087 /*AEM_SETMODIFY*/, false, 0);
AkelPad.SendMessage(AkelPad.GetEditWnd(), 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);

function EnumTopLevelWindows(nTitle, nVisible, nMinimized, nMaximized, nSize, nTopMost, nToolWin)
{
  var oSys       = AkelPad.SystemFunction();
  var lpCallback = oSys.RegisterCallback(EnumWindowsProc);
  var lpInfo     = AkelPad.MemAlloc(260 * _TSIZE);
  var aWnd       = [];
  var hWnd;
  var hMenu;
  var sTitle;
  var bVisible;
  var bMinimized;
  var bMaximized;
  var nX;
  var nY;
  var nW;
  var nH;
  var bTopMost;
  var sClass;
  var nPID;
  var nTID;
  var hProcess;
  var sFileName;
  var sBaseName;
  var i;

var nReturn;
WScript.Echo("RegisterCallback: " + lpCallback);

  nReturn = oSys.Call("User32::EnumWindows", lpCallback, 0);
WScript.Echo("User32::EnumWindows: " + nReturn + ", " + oSys.GetLastError());
  oSys.UnregisterCallback(lpCallback);

  for (i = 0; i < aWnd.length; ++i)
  {
    hWnd  = aWnd[i];
    hMenu = oSys.Call("User32::GetMenu", hWnd);

    AkelPad.SendMessage(hWnd, 0x000D /*WM_GETTEXT*/, 260, lpInfo);
    sTitle = AkelPad.MemRead(lpInfo, _TSTR);

    bVisible   = oSys.Call("User32::IsWindowVisible", hWnd);
    bMinimized = oSys.Call("User32::IsIconic", hWnd);
    bMaximized = oSys.Call("User32::IsZoomed", hWnd);

    oSys.Call("User32::GetWindowRect", hWnd, lpInfo);
    nX = AkelPad.MemRead(lpInfo,      3 /*DT_DWORD*/);
    nY = AkelPad.MemRead(lpInfo +  4, 3 /*DT_DWORD*/);
    nW = AkelPad.MemRead(lpInfo +  8, 3 /*DT_DWORD*/) - nX;
    nH = AkelPad.MemRead(lpInfo + 12, 3 /*DT_DWORD*/) - nY;

    bTopMost = oSys.Call("User32::GetWindowLong" + _TCHAR, hWnd, -20 /*GWL_EXSTYLE*/) & 0x00000008 /*WS_EX_TOPMOST*/;
    bToolWin = oSys.Call("User32::GetWindowLong" + _TCHAR, hWnd, -20 /*GWL_EXSTYLE*/) & 0x00000080 /*WS_EX_TOOLWINDOW*/;

    if (((nTitle == 0)     && sTitle)     || ((nTitle == 1)     && (! sTitle)) ||
        ((nVisible == 0)   && bVisible)   || ((nVisible == 1)   && (! bVisible)) ||
        ((nMinimized == 0) && bMinimized) || ((nMinimized == 1) && (! bMinimized)) ||
        ((nMaximized == 0) && bMaximized) || ((nMaximized == 1) && (! bMaximized)) ||
        ((nSize == 0)      && (nW + nH))  || ((nSize == 1)      && (! (nW + nH))) ||
        ((nTopMost == 0)   && bTopMost)   || ((nTopMost == 1)   && (! bTopMost)) ||
        ((nToolWin == 0)   && bToolWin)   || ((nToolWin == 1)   && (! bToolWin)))
      aWnd.splice(i--, 1);
    else
    {
      nReturn = oSys.Call("User32::GetClassName" + _TCHAR, hWnd, lpInfo, 260);
WScript.Echo((i + 1) + "\nUser32::GetClassName: " + nReturn + ", " + oSys.GetLastError());
      sClass = AkelPad.MemRead(lpInfo, _TSTR);

      nTID = oSys.Call("User32::GetWindowThreadProcessId", hWnd, lpInfo);
WScript.Echo((i + 1) + "\nUser32::GetWindowThreadProcessId: " + nTID + ", " + oSys.GetLastError());
      nPID = AkelPad.MemRead(lpInfo, 3 /*DT_DWORD*/);

      hProcess = oSys.Call("Kernel32::OpenProcess", 0x0410 /*PROCESS_QUERY_INFORMATION|PROCESS_VM_READ*/, 0, nPID);
WScript.Echo((i + 1) + "\nKernel32::OpenProcess: " + hProcess + ", " + oSys.GetLastError());

      nReturn = oSys.Call("Psapi::GetModuleFileNameEx" + _TCHAR, hProcess, 0, lpInfo, 260);
WScript.Echo((i + 1) + "\nPsapi::GetModuleFileNameEx: " + nReturn + ", " + oSys.GetLastError());
      if (nReturn)
        sFileName = AkelPad.MemRead(lpInfo, _TSTR);
      else
        sFileName = "unknown";

      nReturn = oSys.Call("Psapi::GetModuleBaseName" + _TCHAR, hProcess, 0, lpInfo, 260);
WScript.Echo((i + 1) + "\nPsapi::GetModuleBaseName: " + nReturn + ", " + oSys.GetLastError());
      if (nReturn)
        sBaseName = AkelPad.MemRead(lpInfo, _TSTR);
      else
        sBaseName = "unknown";

      nReturn = oSys.Call("Kernel32::CloseHandle", hProcess);
WScript.Echo((i + 1) + "\nKernel32::CloseHandle: " + nReturn + ", " + oSys.GetLastError());

      aWnd[i] = {Handle    : hWnd,
                 Menu      : hMenu,
                 Title     : sTitle,
                 Visible   : bVisible,
                 Minimized : bMinimized,
                 Maximized : bMaximized,
                 X         : nX,
                 Y         : nY,
                 W         : nW,
                 H         : nH,
                 TopMost   : bTopMost,
                 ToolWin   : bToolWin,
                 Class     : sClass,
                 PID       : nPID,
                 TID       : nTID,
                 FileName  : sFileName,
                 BaseName  : sBaseName};
    }
  }

  AkelPad.MemFree(lpInfo);

  return aWnd;

  function EnumWindowsProc(hWnd, lParam)
  {
    aWnd.push(hWnd);
    return true;
  }
}

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

KDJ
Я вставил предложенный код вместо EnumerateWindows_functions.js
и теперь при запуске Example_of_use.js вылетает кучу окон с информацией... не дождался конца вырубил AkelPad

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Andrey_A_A
If you want to locate an error, you should do it as I wrote.
Locked