Scripts discussion (3)

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

Post by VladSh »

Skif_off wrote:Возможно ли добавить в RegJump.js включение/выключение редиректа WoW64?
Сделано. Спасибо за идею! 8)

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

Post by VladSh »

SFC wrote:VladSh
по SearchReplace_Multi.js:
ругается на отсутствие в папке Include скрипта cnRegExp.js
но все равно работает.
Этот cnRegExp.js нужен?
Это не мой кусок. Для корректности там, при текущей реализации метода AkelPad.Include, надо не удалять эту строку а поставить условие, есть ли файл, и если есть, только тогда выполнять её.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Подскажите, пожалуйста, в чём проблема:

Code: Select all

//AutoItToolsLog.js
//
// Version: 2015-09-04
//
// Скрипт для удобства запуска утилит TidySource и Au3Check:
//   - при запуске скрипта происходит проверка модифицирован файл или нет, если нет -
//        предупреждает и предлагает сохранить, если Да - сохраняет, иначе - завершает работу;
//   - для TidySource после завершения работы появляется окно с предложением закрыть панель вывода,
//        если не была открыта до запуска;
//   - автоматическое переоткрытие файла после работы TidySource;
//   - для Au3Check вывод парсится на предмет строк с ошибками, добавлен переход к строке с ошибкой;
//   - если Au3Check отработала без ошибок и предупреждений (код выхода равен 0), а панель вывода
//        не была открыта до запуска, то панель будет автоматически закрыта и появится окно
//        с сообщением, что все нормально.
//
// Параметры:
//   -file="%f" - полное имя текущего файла, обязательный;
//   -util=""   - имя утилиты, обязательный:
//                -util="TidySource"
//                -util="Au3Check"
//   -cmd=""    - параметры запуска утилиты, необязательный.
// Если не указаны -file и -util - завершение без предупреждения.
//
// Примеры:
//    -"AutoIt Tidy" Call("Scripts::Main", 1, "AutoItToolsLog.js", `-file="%f" -util="TidySource" -cmd="/NoGui /f1 /v0 /s1 /l1"`)
//    -"AutoIt Tidy + BackUp" Call("Scripts::Main", 1, "AutoItToolsLog.js", `-file="%f" -util="TidySource" -cmd="/NoGui /f1 /v0 /s1 /l1 /BackUp"`)
//    -"AutoIt Tidy GUI" Call("Scripts::Main", 1, "AutoItToolsLog.js", `-file="%f" -util="TidySource"`)
//    -"Au3Check" Call("Scripts::Main", 1, "AutoItToolsLog.js", `-file="%f" -util="Au3Check"`)
//
// По умолчанию предполагается, что Au3Check.exe и TidySource.exe лежат в
//    [AkelPad]\AkelFiles\Tools\AutoIt3Tidy\TidySource.exe
//    [AkelPad]\AkelFiles\Tools\Au3Check\Au3Check.exe
// иначе необходимо исправить пути ниже на свои.
//
// Скрипт сохранить в UTF-16LE!
//
// Пути к утилитам
var TidySource = "%a\\AkelFiles\\Tools\\AutoIt3Tidy\\TidySource.exe"
var Au3Check   = "%a\\AkelFiles\\Tools\\Au3Check\\Au3Check.exe"

var hMainWnd   = AkelPad.GetMainWnd();
var bModified  = AkelPad.GetEditModified(0);
var pFile      = AkelPad.GetArgValue("file", 0);
var pUtil      = AkelPad.GetArgValue("util", 0);
var pParams    = AkelPad.GetArgValue("cmd", "");
var nRunning;
var nExitCode;
// Проверяем, указаны ли обязательные параметры -file и -util, если нет - выходим
if (pFile == 0 || pUtil == 0)
  WScript.Quit();
// Локализация
if (AkelPad.GetLangId(0 /*LANGID_FULL*/) == 1049 /*Russian*/)
{
  var sTxtFileModif  = "Файл изменен. Сохранить?";
  var sTxtClosePanel = "Закрыть панель вывода?";
  var sTxtAu3Check   = "Успешно: нет ошибок или предупреждений.";
}
else
{
  var sTxtFileModif  = "File is modified. Save?";
  var sTxtClosePanel = "Do you want to close output panel?";
  var sTxtAu3Check   = "Success: no errors or warnings.";
}
// Проверяем, сохранен файл или нет, если нет - предлагаем сохранить или выходим
if (bModified)
{
  if (AkelPad.MessageBox(hMainWnd, sTxtFileModif, WScript.ScriptName, 36 /*MB_ICONQUESTION|MB_YESNO*/) == 6 /*IDYES*/)
    AkelPad.Command(4105 /*IDM_FILE_SAVE*/);
  else
    WScript.Quit();
}
// Проверяем, запущен ли плагин Log (для автоматического закрытия, если был не загружен и/или нет ошибок)
if (AkelPad.IsPluginRunning("Log::Output"))
  nRunning = 1;
else
  nRunning = 0;
// Запуск утилиты
if (pUtil == "TidySource")
{
  if (pParams)
    AkelPad.Call("Log::Output", 1, "\"" + TidySource + "\" \"" + pFile + "\" " + pParams);
  else
    AkelPad.Call("Log::Output", 1, "\"" + TidySource + "\" \"" + pFile + "\"");
  // Если плагин не был загружен, предлагаем закрыть
  if (nRunning == 0 && AkelPad.MessageBox(hMainWnd, sTxtClosePanel, "TidySource - " + WScript.ScriptName, 36 /*MB_ICONQUESTION|MB_YESNO*/) == 6 /*IDYES*/)
    AkelPad.Call("Log::Output", 6);
  // Посылаем команду переоткрыть файл
  AkelPad.Command(4104 /*IDM_FILE_REOPEN*/);
}
else if (pUtil == "Au3Check")
{
  if (pParams)
    AkelPad.Call("Log::Output", 1, "\"" + Au3Check + "\" " + pParams + " \"" + pFile + "\"", "", '(?-s)^\s*"(.*)"\s*\((\d+),(\d+)\)', "/FILE=\1 /GOTOLINE=\2:\3", -1, -1, 8194);
  else
    AkelPad.Call("Log::Output", 1, "\"" + Au3Check + "\" \"" + pFile + "\"", "", '(?-s)^\s*"(.*)"\s*\((\d+),(\d+)\)', "/FILE=\1 /GOTOLINE=\2:\3", -1, -1, 8194);
  // Получение кода выхода
  while (GetExecState())
    WScript.Sleep(100);
  nExitCode = GetExecExitCode();
  // Если плагин не был загружен и код выхода Au3Check равен 0, закрываем и сообщаем
  if (nRunning == 0 && nExitCode == 0)
    AkelPad.Call("Log::Output", 6);
    AkelPad.MessageBox(hMainWnd, sTxtAu3Check, "Au3Check - " + WScript.ScriptName, 64 /*MB_ICONINFORMATION*/);
}

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=28999#p28999
function GetExecState()
{
  var lpState;
  var nState = 0;

  if (lpState = AkelPad.MemAlloc(4 /*sizeof(DWORD)*/))
  {
    AkelPad.Call("Log::Output", 3, lpState);
    nState = AkelPad.MemRead(lpState, 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpState);
  }
  return nState;
}

function GetExecExitCode()
{
  var lpExitCode;
  var nExitCode = 0;

  if (lpExitCode = AkelPad.MemAlloc(4 /*sizeof(DWORD)*/))
  {
    AkelPad.Call("Log::Output", 3, 0, 0, 0, 0, lpExitCode);
    nExitCode = AkelPad.MemRead(lpExitCode, 3 /*DT_DWORD*/);
    AkelPad.MemFree(lpExitCode);
  }
  return nExitCode;
}
останавливается с ошибкой

Code: Select all

Скрипт:	\AkelFiles\Plugs\Scripts\AutoItToolsLog.js
Строка:	1
Символ:	3
Ошибка:	Недопустимый знак
Код:	800A03F6
Источник:	Ошибка компиляции Microsoft JScript
не пойму, где зарылась собака?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Проблема в строках

Code: Select all

var pFile     = AkelPad.GetArgValue("file", 0);
var pUtil     = AkelPad.GetArgValue("util", 0);
достаточно взять 0 в кавычки или оставить их пустыми и всё работает. А почему?

Code: Select all

  var nArg1=AkelPad.GetArgValue("ArgName1", 0);
  var pArg2=AkelPad.GetArgValue("ArgName2", "");
  var nArg3=AkelPad.GetArgValue("ArgName3", 0);
вполне рабочий.

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

Post by Instructor »

Skif_off
У вас в параметр file и util передаётся строка, а указано в значении по умолчанию число. 0 поменяйте на "".
Scripts-Rus.txt wrote:AkelPad.GetArgValue
Возвращаемое значение
Значение аргумента. Тип наследуется от значения по умолчанию.
Добавлено:
В новой версии плагина будет выдаваться корректное место ошибки.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Instructor
Спасибо, протупил: из-за

Code: Select all

if (pFile == 0 || pUtil == 0)
поставил "на всякий случай" :)
Instructor wrote:В новой версии плагина будет выдаваться корректное место ошибки.
Спасибо, хорошая новость,
а то такому "специалисту" как я, пришлось сначала менять кодировку, искать левые символы, потом вставлять очевидные ошибки в разные места, чтобы подтвердить мысль, что дело не в кодировке и не в первой строке, ну а потом начал убирать строки :))

Offline
Posts: 282
Joined: Thu Sep 10, 2015 9:53 am
Location: Deutschland

MoveLinesUpDown_alt.js

Post by sexy96 »

Nie znam angielskiego więc piszę po polsku.
W tekst edytorze AkelPad mam problem z zamianą (przesuwaniem) całych linii.
Znalazłem skrypt MoveLinesUpDown_alt.js, który prawdopodobnie rozwiązałby ten problem.
Umieściłem go w (tam gdzie znajdują się skrypty.js): "d:\WinCMD\AkelPad\AkelFiles\Plugs\Scripts\"

Code: Select all

// Move up or down selected lines - 2010-07-28 
Stworzyłem jeszcze jeden skrypt (MoveLineUp2.js) do uruchomienia powyższego i też go tam umieściłem.

Code: Select all

Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "-1")
po wywołaniu go w edytorze AkelPad otrzymuję informację:

Cytat
Script:
d:\WinCMD\AkelPad\AkelFiles\Plugs\Scripts\MoveLineUp2.js Linę: 1
Symbol: 1
Error: Oczekiwano obiektu.
Code: 800A138F
Source: Microsoft JScript - błąd czasu wykonywania


Nie znam się na skryptach java..
Jak go uruchomić?

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

Post by KDJ »

sexy96

W zasadzie żaden dodatkowy skrypt nie jest potrzebny. Możesz wywołać skrypt z parametrami na trzy sposoby:
1. Przydzielenie klawiszy skrótu przez plugin Hotkeys, Commands:

Code: Select all

Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "-1")
Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "1")
2. Umieszczenie ikon na pasku narzędziowym za pomocą pluginu Toolbar:

Code: Select all

"Wiersze w górę" Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "-1") Icon("%a\AkelFiles\Plugs\Contextmenu.dll", 3)
"Wiersze w dół" Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "1") Icon("%a\AkelFiles\Plugs\Contextmenu.dll", 4)
3. Dodanie elementów do głównego menu za pomocą pluginu Contextmenu:

Code: Select all

"Wiersze w górę" Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "-1") Icon(3)
"Wiersze w dół" Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "1") Icon(4)
Jeśli chcesz uruchomić skrypt MoveLinesUpDown_alt.js za pomocą innego skryptu (np. MoveLineUp2.js), to wpisz w nim:

Code: Select all

AkelPad.Call("Scripts::Main", 1, "MoveLinesUpDown_alt.js", "-1")
Zamiast starego skryptu MoveLinesUpDown_alt.js, który nie jest aktualizowany, proponuję używać LinesSelectCopyMoveDuplicate.js (tu jest paczka z moimi skryptami: KDJ.zip).
Skrypt LinesSelectCopyMoveDuplicate.js w zależności od przekazanych parametrów może wykonać następujące operacje:
- zaznaczanie całych wierszy (parametr "S"),
- kopiowanie wierszy do schowka (parametr "C"),
- przesuwanie wierszy w górę lub w dół (parametr "M"),
- powielanie poszczególnych wierszy lub bloku wierszy (parametr "DL" lub "D").
- skrypt wywołany bez parametrów pokazuje menu z opcjami do wyboru.

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Instructor
Скрипт SessionsOpenMenu.js выдает ошибку:

Code: Select all

Строка:	50
Ошибка:	Предполагается наличие числа

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

Post by Instructor »

Kley
Не воспроизводится. Версия скрипта 1.1?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Подскажите, пожалуйста, при прочих равных условиях что будет быстрее для поиска в многострочном тексте: .indexOf(), .test() или .search()? Не могу нагуглить внятного, по идее - обычный поиск быстрее?

Offline
Posts: 202
Joined: Sat Mar 28, 2015 2:36 pm
Location: Russia

Post by Kley »

Instructor
Instructor wrote:Версия скрипта 1.1?
Да. Сам удивляюсь. Вроде все работало.
Теперь только так:

Code: Select all

//a = a.toLowerCase();
//b = b.toLowerCase();
или так:

Code: Select all

a = a.toLowerCase().toString();
b = b.toLowerCase().toString();
или даже так:

Code: Select all

WScript.Sleep(0);
a = a.toLowerCase();
b = b.toLowerCase();
Помогает любая задержка. Похоже реагирует на количество файлов.session (не больше 22 шт.). Для чистоты эксперимента переименовал в 1.session...22.session - работает. 1.session...23.session - не работает.
Так все OK:

Code: Select all

    //Sort array
    aFiles=aFiles.sort(function(a, b)
    {
      if (a.toLowerCase() == b.toLowerCase()) return 0;
      if (a.toLowerCase() > b.toLowerCase()) return 1;
      return -1;
    });

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

Post by Instructor »

Kley
Хм. Добавлен последний вариант.

Offline
Posts: 282
Joined: Thu Sep 10, 2015 9:53 am
Location: Deutschland

Post by sexy96 »

KDJ wrote:W zasadzie żaden dodatkowy skrypt nie jest potrzebny. Możesz wywołać skrypt z parametrami na trzy sposoby:
And how does it move the mouse?

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

Post by KDJ »

sexy96
Nie zrozumiałem co masz na myśli. Możesz dokładniej opisać swój problem?
Czy chodzi ci o przeciąganie tekstu za pomocą myszy?
Locked