Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

jsBeautifier.js
Added -css argument to force beautify CSS (just automatically wrap code into <style>...</style>).
But see https://github.com/einars/js-beautify/issues/87.

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

Post by VladSh »

Добавлен FileTabs.js для использования в WinMerge.js, но, думаю, он под дальнейшие потребности будет расширяться; возможно в дальнейшем переделаю на "класс".
P.S. Спасибо всем, кто помогал, и у кого я натырил кода))

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

Post by Infocatcher »


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

Post by VladSh »

Где-то неделю мучались.. у меня всё работает, а у se7h нет. Может быть кто-то поможет понять, в чём тут дело?

В чём суть доработки:
• Когда в проге открыто всего лишь 2 вкладки, то они должны сразу же передаваться в WinMerge, без выдачи диалога выбора 2-го файла, иначе будет выдаваться диалог.
• Если хоть один файл не сохранён, то эта вкладка должна автоматически активироваться и производиться запрос на сохранение файла, после чего оба файла передаются в WinMerge.
• Файлы в WinMerge должны передаваться в той последовательности, в которой они расположены в AkelPad'е и не зависеть от того, какая вкладка сейчас активирована.

Code: Select all

/// WinMerge v0.5.0
// (с) se7h, VladSh
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=11455#p11455
//
// Comparison of current and selected files using WinMerge (http://winmerge.org/)
//
// Usage in Toolbar/ContextMenu plugin:
// -"Compare with file..." Call("Scripts::Main", 1, "WinMerge.js") Icon(pathToAnyIcon)		- searching for a path to WinMerge automatically
// -"Compare with file..." Call("Scripts::Main", 1, "WinMerge.js", `"d:\Programs\TotalCmd\UTILs\WinMerge\"`)		- takes a path from scripts Arguments, else searching a path automatically
//
// FileTabs.js you found here: http://akelpad.sourceforge.net/forum/viewtopic.php?p=16297#p16297
// CommonFunctions.js - here: http://akelpad.sourceforge.net/forum/viewtopic.php?p=1582#p1582

if (!AkelPad.GetMainWnd()) WScript.Quit();

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

var WshShell = new ActiveXObject("WScript.shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");

var FILES = {};
var nFileCurIndex = getTabIndexCurrent();
if (nFileCurIndex > 1) nFileCurIndex = 1;
FILES[nFileCurIndex] = getCurrentFileWithSave();
if (!FILES[nFileCurIndex]) WScript.Quit();

var pToolFileName = "WinMergeU.exe";
var pToolPath = "";

if (WScript.Arguments.length)		//сначала пытаемся взять из аргументов
	pToolPath = getEnvironmentPath(WScript.Arguments(0) + pToolFileName);

if (!pToolPath)
{
	try {
		//ищем по записи в реестре
		pToolPath = WshShell.RegRead("HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" + pToolFileName + "\\");
		if (pToolPath)
			pToolPath = getEnvironmentPath(pToolPath);
	} catch(e) {}

	if (!pToolPath)
	{
		//ищем в путях по системмным переменным
		var appPaths = ["%ProgramFiles%\\WinMerge\\", "%ProgramFiles (x86)%\\WinMerge\\"];
		var p = 0;
		do
		{
			pToolPath = getEnvironmentPath(appPaths[p] + pToolFileName);
			if (pToolPath) break;
			p += 1;
		}
		while (p < appPaths.length)

		if (!pToolPath)
		{
			//ищем в стандартных путях по доступным локальным дискам
			appPaths = [":\\Program Files\\WinMerge\\", ":\\Program Files(x86)\\WinMerge\\"];
			var disks = getDrivesList();
			for (var d = 0; d < disks.length; d++)
			{
				p = 0;
				do
				{
					pToolPath = getEnvironmentPath(disks[d] + appPaths[p] + pToolFileName);
					if (pToolPath) break;
					p += 1;
				}
				while (p < appPaths.length)
				if (pToolPath) break;
			}

			if (!pToolPath)
			{
				AkelPad.MessageBox(hWndMain, "Application WinMerge was not found!", WScript.ScriptName, 48 /*MB_ICONEXCLAMATION*/);
				WScript.Quit();
			}
		}
	}
}

var nFileOtherIndex = Number(!nFileCurIndex);
if (AkelPad.SendMessage(hWndMain, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0) == 2)		//если открыто всего 2 файла, то будем передавать их
{
	FILES[nFileOtherIndex] = getTabFileByIndex(nFileOtherIndex);
	if (!FILES[nFileOtherIndex])		//если файл новый, переходим на его вкладку чтобы попытаться сохранить
	{
//		AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
		activateTabByIndex(nFileOtherIndex);
		FILES[nFileOtherIndex] = getCurrentFileWithSave();
	}
}
else		//если открыто не 2 файла, то в утилиту будем передавать текущий и выбранный в диалоге открытия файла
{
	FILES[nFileOtherIndex] = FILES[nFileCurIndex];
	FILES[nFileCurIndex] = FileDialogDefault(true, FILES[nFileCurIndex], GetFileExt(FILES[nFileCurIndex]));
}

if (FILES[nFileOtherIndex])
{
	var cmdLine = "\"" + pToolPath + "\" \"" + FILES[0] + "\" \"" + FILES[1] + "\"";
	WshShell.Exec(cmdLine);
}


//VladSh by MSDN :)
function getDrivesList()
{
	var e = new Enumerator(fso.Drives);
	var x;
	var i = 0;
	var disks = [];
	for (; !e.atEnd(); e.moveNext())
	{
		x = e.item();
		if (x.DriveType == 3 && x.IsReady)
		{
			disks[i] = x.DriveLetter;
			i += 1;
		}
	}
	return disks;
}

function getEnvironmentPath(paths)
{
	var path = WshShell.ExpandEnvironmentStrings(paths);
	if (fso.FileExists(path)) return path;
	return "";
}

function getCurrentFileWithSave()
{
	var pCurrentFile = AkelPad.GetEditFile(0);
	if (!pCurrentFile)		//если файл не сохранён, пытаемся его сохранить
	{
		AkelPad.Command(4105);
		pCurrentFile = AkelPad.GetEditFile(0);
	}
	return pCurrentFile;
}

Offline
Posts: 3
Joined: Sun Jan 01, 2012 1:37 pm

Post by zoog »

плз, подскажите, как пользоваться keyboard.js? или направьте в раздел, где задаются такие вопросы)

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

zoog wrote:плз, подскажите, как пользоваться keyboard.js?
Запускать из-под плагина Scripts, для выделенного текста.


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

Post by Infocatcher »

Used AkelPad language (AkelPad.GetLangId()) instead of system language for localization:

AESCrypt.js
alignWithSpaces.js – fixed tabs removing
backupVersion.js – used date of file, if version information are not found
colorsConverter.js
crypt.js – released test version, improved remaining time calculation (decrypting is slower)
executeScript.js
executeScript.vbs – used "executeGlobal" instead of "execute"
getHash.js – added Ctrl+S hotkey, added ability to calculate hash of empty string (now showing "This is hash of empty string!" warning instead of "No text selected!" / "No text!")
getLinks.js
goToLongestLine.js
highlighter.js
insertEval.js
insertTag.js
measuresConverter.js
runScript.js
scriptToBookmarklet.js, scriptToBookmarklet_w2k.js – added external call arguments, unfortunately not fully tested
textStatistics.js
toggleComments.js – released test version

See scripts archive or download links, posts will be updated soon...

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

Post by Infocatcher »

Infocatcher wrote:posts will be updated soon...
Done.
Scripts mirror was updated too.

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

Post by Infocatcher »

crypt.js
Removed forgotten speed tests. :)
Improved "busy" indication – Ok and Apply buttons now disabled during encryption/decryption.
Fixed: double click on radio buttons did not work in modal mode.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Updated history.js
A whole bunch of new features.

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

FeyFre wrote:Updated history.js
A whole bunch of new features.
Только по нему вообще ничего непонятно - открывается узкая панелька без подсказок, внизу перечислены какие-то комбинации клавиш (ну потом вчитываясь в историю изменений, что-то понять можно, только все равно не реагируют). Когда прописываются ассоциации в списке Hotkeys плагина, хорошо бы чтобы к названиям была приписка "history.js". Кнопочки у полей панели непонятно что дают. Да и насчет полей непонятно. И что нужно ожидать от самого большого поля или списка?

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Только по нему вообще ничего непонятно
Назначение скрипта написано: позволяет восстановить закрытые ранее документы. Значит нужно что-бы хоть один был закрыт. Ну а дальше можно разобраться.
открывается узкая панелька
Мышку в руки и расширить сколько угодно. И даже передвинуть в другую сторону.
хорошо бы чтобы к названиям была приписка "history.js"
Названия вполне говорящие. Кому надо, тот может в скрипте подправить.
только все равно не реагируют
Странно что вы ожидаете что-бы воздух горел. Ведь топливо тоже должно быть, правда?

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

FeyFre wrote:позволяет восстановить закрытые ранее документы. Значит нужно что-бы хоть один был закрыт.
Методом тыка выяснил, что востанавливаемые документы должны быть закрытыми после запуска скрипта.
И соответственно вопрос, как сделать так, чтобы скрипт запускался автоматически с самим акельпадом?
FeyFre wrote:Кому надо, тот может в скрипте подправить.
Учитывая, что некоторым удобно выкачивать обновления скрипта автоматизированно, не хотелось бы править после каждого обновления скрипта.

Code: Select all

var rott = "Reopen Last";
var rota = "Reopen All";
var showhide = "Show/Hide";
Эти строчки к тому же не в начале плагина, как можно было бы ожидать для настраиваемых пользователем элементов. Я предлагаю заменить на

Code: Select all

var rott = "[history.js] Reopen Last";
var rota = "[history.js] Reopen All";
var showhide = "[history.js] Show/Hide";
И было бы замечательно, я думаю, чтобы эти строчки были для нерусской локали (а для русской - перевод). Я видел тут некоторые двуязычные скрипты.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

как сделать так, чтобы скрипт запускался автоматически с самим акельпадом?
Я уже отвечал на этот вопрос. Ищите.
автоматизированно
Раз уже есть автоматизировали процесс выкачки(интересно как?), то думаю не составит труда после выкачки наложить патч командой patch <history.js.diff
Locked