Scripts discussion (3)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

KDJ
1. and how to do replacements in lines with bookmarks?
2. how to increase width of dialogue of a script of FindReplaceEx.js, the input field painfully small for me?

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

Post by LonerD »

Я правильно понимаю, что прототип скрипта moveResizeWindow.js так и не был доработан?
Или где-то есть обновлённая версия?
Например, вот такая строка

Code: Select all

"Окно AkelPad вправо" Call("Scripts::Main", 1, "moveResizeWindow.js", `-resize=50%%*100%% -move=right*top`)
теоретически должна бы отобразить окно Акелпада на правой стороне экрана до границ экрана (100%). На самом деле остаётся заметный зазор в 8-10 пикселей между правой границей окна и правой стороной экрана.
Во всяком случае такое поведение наблюдается в Windows 10 x64.
Или может это у меня ошибка в записи параметров?

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

Post by Infocatcher »

LonerD
Чуть более новая версия тут: https://github.com/Infocatcher/AkelPad_ ... eWindow.js
Но вряд ли она заработает корректно, там только несколько правок с _PtrAdd().
На Windows 7 x86 все нормально работает, проблема где-то в getWorkArea(), по идее.

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

Post by KDJ »

TextReplace_function.js
TextReplace.js
Fixed: Find/Replace the new line symbol.

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

Post by LonerD »

Infocatcher wrote:проблема где-то в getWorkArea(), по идее.
Похоже на то.
Ещё сразу и не заметил - слева и внизу тоже зазор получается.
Через утилиту TCFS2.exe я сделал такое же перемещение окна Тотал коммандера - и та же самая ситуация, между окном программы и краем экрана промежуток.
(Знаю, что в Windows 6.x-10 можно использовать хоткеи Win+Left / Win+Right, но в ХР они не работают, а хотелось бы универсальное решение для всех ОС).

-------------------------------

Просьбы-пожелания для beotiger реализовать (опционально) в скрипте MarkIt.js:
1. Пометки без учёта регистра (жёстко для себя в скрипте я изменил такое поведение, но более гибко было бы, если бы реализовать параметрами).
2. Пометка фразы на нескольких строках (сейчас выделяется только часть фразы на первой строке, а остальное игнорируется). Можно ли такое вообще реализовать или это ограничение плагина Coder?
3. Раскрашивание каждой из выделенных строк в разный цвет (как в скрипте SuperMultiMarker.vbs).

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

Post by Infocatcher »

LonerD wrote:Через утилиту TCFS2.exe я сделал такое же перемещение окна Тотал коммандера - и та же самая ситуация, между окном программы и краем экрана промежуток.
Занятно. Главное – не понятно, что предполагается делать вместо
(получить текущий монитор) -> GetMonitorInfo -> MONITORINFO structure ->
rcWork
A RECT structure that specifies the work area rectangle of the display monitor, expressed in virtual-screen coordinates. Note that if the monitor is not the primary display monitor, some of the rectangle's coordinates may be negative values.
Кстати... еще интересно проверить альтернативную ветку кода (она осталась от более ранней версии): если заменить

Code: Select all

var hMonitor = oSys.Call("user32::MonitorFromRect", lpRect, 0x2 /*MONITOR_DEFAULTTONEAREST*/);
на

Code: Select all

var hMonitor = 0;
, отработает

Code: Select all

oSys.Call("user32::SystemParametersInfo" + _TCHAR, 48 /*SPI_GETWORKAREA*/, 0, lpRect, 0);
Вот будут ли в этом случае правильные размеры?

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

Post by LonerD »

Подскажите, пожалуйста, как модифицировать скрипт insertPathToFile.js под современные реалии (под актуальные версии Акелпада и плагинов)?

-------------
Infocatcher wrote:если заменить...
Вот будут ли в этом случае правильные размеры?
Попробовал - ничего не изменилось.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

LonerD wrote:(Знаю, что в Windows 6.x-10 можно использовать хоткеи Win+Left / Win+Right, но в ХР они не работают, а хотелось бы универсальное решение для всех ОС).
Может тебе лучше подойдёт скрипт работающий с любыми окнами?
Хоткеи можно и под себя подстроить...

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

Post by VladSh »

LonerD wrote:Подскажите, пожалуйста, как модифицировать скрипт insertPathToFile.js под современные реалии (под актуальные версии Акелпада и плагинов)?

Code: Select all

/// insertPathToFile
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=11477#p11477
// Version: 2.0
// Modified: VladSh
// Created:  (c) se7h, v0.1.1
//
// Insert relative/absolute path to selected file
//
// Usage in Toolbar/ContextMenu plugin:
// -"Insert relative path..." Call("Scripts::Main", 1, "insertPathToFile.js", `"%d"`)
// -"Insert absolute path..." Call("Scripts::Main", 1, "insertPathToFile.js")
//
// CommonFunctions.js you found here http://akelpad.sourceforge.net/forum/viewtopic.php?p=1582#p1582

if (!AkelPad.Include("CommonFunctions.js")) WScript.Quit();

if(AkelPad.GetMainWnd()) {
	var pInitialFile = AkelPad.GetEditFile(0);
	var pSelFilePath = fileDialogDefault(true, "", pInitialFile, "*");
	if(pSelFilePath) {
		var dirPath = (WScript.Arguments.length) ? WScript.Arguments(0) : "";
		if(!dirPath) {
			AkelPad.ReplaceSel(pSelFilePath);
		} else {
			AkelPad.ReplaceSel(getRelativePath(dirPath, pSelFilePath));
		}
	}
}

function getRelativePath(mainDirPath, absoluteFilePath) {
	var dirSysSeparator = "\";
	var firstPathParts = new Array();
	var secondPathParts = new Array();
	firstPathParts = mainDirPath.split(dirSysSeparator);
	secondPathParts = absoluteFilePath.split(dirSysSeparator);
	var sameCounter = 0;

	for (var i = 0; i < Math.min(firstPathParts.length, secondPathParts.length); i++) {
		if (!(firstPathParts[i].toLowerCase() == secondPathParts[i].toLowerCase()))
			break;
		sameCounter++;
	}

	if (sameCounter == 0)
		return absoluteFilePath;

	var newPath = "";

	for (var i = sameCounter; i < firstPathParts.length; i++) {
		if (i > sameCounter)
			newPath += dirSysSeparator;
		newPath += "..";
	}

	if (newPath.length == 0)
		newPath = ".";

	for (var i = sameCounter; i < secondPathParts.length; i++) {
		newPath += dirSysSeparator;
		newPath += secondPathParts[i];
	}

	return newPath;
}

Только я не понимаю смысла скрипта, в чём разница вариантов друг от друга? Выбираю mp3-файл, а он вставляет в обоих случаях один и тот же путь.
Примеры, которые должны получаться при вызове первого и второго варианта дайте, а я подумаю, как это можно переписать.

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

Post by LonerD »

Drugmix
Спасибо, взял на заметку, добавил в закладки))

VladSh
Спасибо. Работает. Меня интересовал только абсолютный путь.
Разница между вариантами запуска в том, что если вставлять относительный путь в уже открытый файл - то путь берётся относительно этого файла, то есть если выбираемый файл лежит на несколько уровней выше - то вместо пути вставляются ..\..\..\..\..\ (при этом выбираемый файл должен быть на том же диске). Попробовал - вроде работает и такой вариант.

---------------

Возник ещё такой вопрос. Есть простой скрипт, выполняющий VBS через командную строку:

Code: Select all

'EvalCmd.vbs
If WScript.Arguments.Count > 0 Then : Execute Replace(Replace(Replace(WScript.Arguments(0), "''", Chr(34)), "??", Chr(34)), "**", "'")
С его помощью можно сделать вот такую команду в меню:

Code: Select all

"Удалить выделенный фрагмент из всего текста" Call("Scripts::Main", 1, "EvalCmd.vbs", `"sSel=AkelPad.GetSelText() : If Len(sSel)>0 Then Call AkelPad.TextReplace(0,sSel,'''',&H00000001 Or &H00200000,true)"`)
Можно ли эту команду прописать через EvalCmd.js?
Попробовал даже упростить, но всё-равно не работает:

Code: Select all

 "Удалить из всего текста" Call("Scripts::Main", 1, "EvalCmd.js", `"AkelPad.TextReplace(0, AkelPad.GetSelText(), '''', &H00000001 Or &H00200000, true)"`)

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

Post by KDJ »

LonerD

Code: Select all

"Удалить из всего текста" Call("Scripts::Main", 1, "EvalCmd.js", `AkelPad.TextReplace(0, AkelPad.GetSelText(), "", 0x00000001 | 0x00200000, 1)`)

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

Post by VladSh »

LonerD wrote:Разница между вариантами запуска в том, что если вставлять относительный путь в уже открытый файл - то путь берётся относительно этого файла, то есть если выбираемый файл лежит на несколько уровней выше - то вместо пути вставляются ..\..\..\..\..\ (при этом выбираемый файл должен быть на том же диске).
Я всё равно ничё не понял. На примере можно показать, какой файл и какой получается путь?

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

Post by Skif_off »

VladSh
Так понимаю, если открыт файл d:\temp\1\1.txt:
- запускаете скрипт и указываете файл d:\temp\2\2.txt - вставляется "d:\temp\2\2.txt";
- запускаете с "%d" и указываете файл d:\temp\2\2.txt - вставляется "..\2\2.txt".

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

Post by LonerD »

VladSh wrote:Я всё равно ничё не понял. На примере можно показать, какой файл и какой получается путь?
Skif_off уже пояснил. Это и имелось в виду.

KDJ
Thank you ))

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

Post by LonerD »

KDJ
Small bug in script InsertDateFromCalendar.js
By default Shift+Enter insert Date, and Shift+Ctrl+Enter - Time Date. But it works only with left Shift (at least on my Windows 10 x64). Please, add right Shift support too.
Locked