Scripts discussion (4)

Discuss and announce AkelPad plugins
Post Reply
  • Author
  • Message
Offline
Posts: 32
Joined: Thu Oct 15, 2015 2:20 am

[solved] How to run scripts with parameters?

Post by CBruce »

.
I have a lot of scripts that alter text, etc. - but none of them require parameters. So all of these are just listed in the scripts dialog and I either hit [Execute] or use hotkeys to run them.

I want to minimize all MDI window tabs at once, so I think I would like to execute:

Code: Select all

Call("Scripts::Main", 1, "RunScriptOnTabs.js", `-cmd='TabMinMax.js -' -tab=2`)
But I don't know how or where to actually "run" a script like this that has these -cmd parameters. Help?

Ah! It seems that I need another script to be able to call scripts that need parameters. So I made a test.js script to call RunScriptOnTabs.js, but I cannot get the parameters correct for that call:

Code: Select all

var nResult=AkelPad.Call("Scripts::Main", 1, "RunScriptOnTabs.js", '-cmd="TabMinMax.js" -par="-" -tab=2');
TabMinMax.js exists in the Scripts directory with RunScriptOnTabs.js, but I get an error:
"Script does not exist: TabMinMax.js"

I even tried using the fullpath for the TabMinMax.js script, but still got that error. Any idea what I am doing wrong in the call?

-------------------------
Ok... figured it out... my second call above had the correct parameters - but I had renamed the TabMinMax.js file while testing... named it correctly and now all of my MDI windows get minimized by the script!
-------------------------
.

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

KDJ
Здравствуйте! Вы не могли бы добавить в скрипт TextReplace.js возможность экспорта истории замен в текстовый файл? Это пригодилось бы для создания списков замен (batch replace). Если считаете, что такая возможность в скрипте не нужна, то тогда подскажите, пожалуйста, где скрипт хранит историю замен. Я самостоятельно не смог найти :)

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

Post by KDJ »

yozhic

The history is saved in ini file (TextReplace.ini), parameter aHist.
aHist is a two dimentional array.
Each element of this array contains an array with three strings: FindIt, ReplaceWith and Flags.

aHist=[[FindIt_1,ReplaceWith_1,Flags_1],[FindIt_2,ReplaceWith_2,Flags_2],...,[FindIt_n,ReplaceWith_n,Flags_n]]

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

Diamen wrote:

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=32545#p32545
// Version: 1.0 (2017-05-22)
// Author: Diamen
//
//
// Description(1033): WM_COPYDATA implementation
// Example: _WM_COPYDATA_Send("WindowsClass", "Command", 0, false);

function _WM_COPYDATA_Send(win, sString, dwData, post){
//_WM_COPYDATA_Send("PowerProMain", ".Lancia@test(321)", 0, false);
	var cd=AkelPad.MemAlloc(_X64?24:12);
	AkelPad.MemCopy(_PtrAdd(cd, 0), dwData, 3);
	AkelPad.MemCopy(_PtrAdd(cd, (_X64?8:4)), sString.length+1, 3);
	var cmd=AkelPad.MemAlloc(sString.length);
	AkelPad.MemCopy(cmd, sString,0);
	AkelPad.MemCopy(_PtrAdd(cd, (_X64?16:8)), cmd, 3);
	var oSys=AkelPad.SystemFunction();
	if(typeof win==="string"){win=oSys.Call("User32::FindWindowExW", 0, 0, win, 0);}
	if(win){
		if(post!==true){
			AkelPad.SendMessage(win, 0x004A, 0, cd);
		}else{
			oSys.Call("user32::SendMessageTimeoutW", win, 0x004A, 0, cd, 1, 30000, 0);
		}
		post=oSys.GetLastError();
	}
	AkelPad.MemFree(cmd);
	AkelPad.MemFree(cd);
	return post;
}
подскажите, что делает данный скрипт?

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

Post by Skif_off »

Eskander88
Ничего не делает, это готовая функция, позволяющая отправлять сообщение WM_COPYDATA (примеры использования, первое, что пришло в голову).

И не нужно задавать вопросы в этой теме, здесь коллекция, а вопросы - в Scripts discussion ;)

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

Skif_off wrote:Eskander88
И не нужно задавать вопросы в этой теме, здесь коллекция, а вопросы - в Scripts discussion ;)
Так вы же дали ссылку на эту же ветку?!

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

вопрос по jsBeautifier.js

Иногда неправильно парсит фрагменты кода. Баг возникает с некоторым кодом. Заключается в том, что некоторые закрывающие теги, которые находятся во фрагменте, не ставятся на необходимое место.

Вызов сочетанием клавиш CTRL + ALT + B
Команда Call("Scripts::Main", 1, "jsBeautifier.js", "-setSyntax=true")


Пример фрагмента:

Code: Select all

<ul><li><a href="#"><span>Название страницы</span></a><meta content="1"></li><li><a href="#"><span>Название страницы</span></a><meta content="2"> </li>
</ul>
Что получается:

Code: Select all

<ul>
  <li><a href="#"><span>Название страницы</span></a>
    <meta content="1">
  </li>
  <li><a href="#"><span>Название страницы</span></a>
    <meta content="2"> </li>
</ul>
Желаемый результат:

Code: Select all

<ul>
  <li>
    <a href="#">
      <span>Название страницы</span>
    </a>
    <meta content="1">
  </li>
  <li>
    <a href="#">
      <span>Название страницы</span>
    </a>
    <meta content="2"> 
   </li>
</ul>

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

Post by Skif_off »

Eskander88
Параметры запуска перечислены в комментариях в начале скрипта, там масса вариантов (к слову, если у -setSyntax и было значение true, то очень давно).

Возможно, есть смысл обновиться до самой свежей версии.

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

Skif_off
обновил, перепробовал разные параметры -setSyntax на всякий, всё также.. я так понимаю в вашей сборке данный баг отсутствует?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Eskander88
1. Данный "баг" таковым в полном смысле не является. Для сравнения, обратитесь к первоисточнику. На их сайте есть онлайн-режим форматирования. Результат там будет идентичен. Т. е. скрипт адаптирует первоисточник к AkelPad-у, и пока не будет изменена логика в первоисточнике, ждать изменений в адаптированной версии не следует. Так вижу.
2. Обратите внимание в предыдущем ответе на слово "Возможно". Оно там, по-видимому, ключевое. И сам ответ, он же не о баге в скрипте, а о баге в параметрах вызова скрипта у вас.
3. -setSyntax отвечает только за включение синтаксической темы (условно - "подсветку") самого AkelPad, а не за форматирование.
4. Нетрудно заметить, что форматирование ломается из-за пробела перед последним "</li>". Возможно (здесь это тоже ключевое слово), стоит подумать над неким "пре-бьютифайером", который бы чистил пробелы между тегами (вероятно и символы табуляции тоже).

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

Post by Infocatcher »

Eskander88 wrote:Пример фрагмента:

Code: Select all

<ul><li><a href="#"><span>Название страницы</span></a><meta content="1"></li><li><a href="#"><span>Название страницы</span></a><meta content="2"> </li>
</ul>
Это работает настройка

Code: Select all

unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted
Можно добавить к аргументам вызова
-unformattedTags=[]
opk44 wrote:Для сравнения, обратитесь к первоисточнику. На их сайте есть онлайн-режим форматирования. Результат там будет идентичен. Т. е. скрипт адаптирует первоисточник к AkelPad-у, и пока не будет изменена логика в первоисточнике, ждать изменений в адаптированной версии не следует.
Тут еще надо добавить про отставание от первоисточника: у меня пока не получилось завести последние правки из оригинала, упирается в отсутствие поддержки чего-то из новых версий JavaScript.

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

решил подглядеть в Atom, а там такая же история :lol:

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

Post by VladSh »

Kley
Пару "косметических" предложений по SessionMenu.js:
1. Может быть добавить параметр, который принимал бы список имён сессий через определённый разделитель (к примеру, "#"), которые не отображать в общем меню. Лично я бы скрыл сессию OnExit, т.к., по моему, она в здесь бесполезна, - вряд ли имеет смысл её редактировать, а чтобы посмотреть пред. файлы есть список последних файлов; она только занимает место в меню.
2. Убрать лишний разделитель в меню - когда отсутствуют удалённые файлы, в меню отображается два разделителя. Скрывать лишний разделитель, при скрытии пункта меню "Удалить несуществующие".

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

Post by KDJ »

FindReplaceEx.js
FindReplaceFiles.js
Translator.js
Updated Chinese translations by cnnnc.

Thanks.

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

KDJ
Здравствуйте! У меня к Вам просьба по скрипту FindReplaceFiles.js :roll:

Я периодически работаю с большими объемами текста в файлах, поиска в них словосочетаний. Ваш скрипт мне в этом очень помогает. Особенно замечательно, что можно нажать Ctrl+Enter и документ откроется в AkelPad, и искомое слово будет выделено (т.е. можно посмотреть контекст, а это для меня очень важно), а повторное нажатие Ctrl+Enter закрывает этот документ – это очень удобно! Но я никогда не знаю сколько раз встречается искомое слово в документе, и поэтому приходится из окна скрипта переключаться в окно AkelPad, при помощи других скриптов искать выделенное слово по всему документу, затем опять возвращаться в окно скрипта, закрывать текущий документ и переходить на следующий в списке. Это отнимает много времени. А когда используется regexp, то времени требуется еще больше, чтобы еще копировать regexp в окно AkelPad. Может быть можно как-то это автоматизировать прямо не выходя из окна FindReplaceFiles.js ?

Например, добавить колонку Matches с отображением количества совпадений, чтобы сразу было видно сколько их в документе, и если совпадение только одно, то не искать дополнительно другие несуществующие, а быстро переходить на другой документ. Приблизительно вот так (Photoshop):
Image

Или, например, по Shift+Enter переходить к следующему совпадению в открытом документе. Это тоже было бы очень удобно: по Ctrl+Enter открываю документ, по Shift+Enter перелистываю все имеющиеся в нем совпадения, снова по Ctrl+Enter закрываю, и перехожу стрелкой к следующему документу. Красота!))

Может существует и другой способ...

Надеюсь, это не очень трудоемкая просьба и было бы замечательно, если бы Вы смогли откликнуться и чем-то в этом помочь. Спасибо.
Post Reply