Scripts discussion (4)

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 165
Joined: Fri Aug 15, 2008 8:58 am

Post by Diamen »

Do it is possible to create a panel docked, not a dialog external, in akelpad edit via script?

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

Post by DV »

CommandPalette.js
Версия 0.5.2:
- теперь ApplyColorTheme проверяет, активен ли Coder::HighLight.
- миниатюрное изменение в CommandPalette.lng: добавлен вызов '"Coder::CodeFold", 1'.

Offline
Posts: 165
Joined: Fri Aug 15, 2008 8:58 am

Post by Diamen »

I tried CommandPalette.js, but I only see a big black square

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

Post by opk44 »

DV
Форма CommandPalette подстраивается под крупный шрифт только по ширине, но не по высоте. В расчете на использование крупных шрифтов желательно несколько увеличить высоту элементов (стр.200-202):

Code: Select all

  //Windows         ID,     CLASS,   HWND,EXSTYLE,   STYLE,   X,   Y,   W,   H
  aWnd.push([IDC_ED_FILTER, "EDIT",     0,      0, nEdStyle,  2,    4,  -1,  30]);
  aWnd.push([IDC_LB_ITEMS,  "LISTBOX",  0,      0, nLbStyle,  2,   36,  -1,  -1]);
стр.201: 20 --> 30
стр.202: 26 --> 36
Проверялось на шрифте с кеглем до 20 включительно. Использование более крупных опять начнет вызывать проблемы. Останется надеяться, что само использование таких размеров уже менее вероятно.

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

Post by VladSh »

Krtec
В TranslateWithGoogleAPI.js добавил возможность вывода вариантов слов - см. параметр "dict".
Можно было, конечно, выдать варианты слов в меню (использовать ShowMenuEx.js), но не хотелось бы его тянуть... Ещё пришлось бы обрезать варианты, т.к. в вертикальную менюху все бы не вошли (иногда их бывает очень много). Да и не знаю я, нужно ли это кому-нибудь, потому оставил как есть.
Спасибо за код!

opk44
Скрипт на странице подновил :)

Всех с наступающим Рождеством Христовым!

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

Post by DV »

CommandPalette.js
Версия 0.5.3:
- теперь .lng-файл может быть не только UTF-16 LE (1200), но и ANSI (для латиницы);
- теперь под размер шрифта подстраивается не только ширина окна команд, но и высота поля фильтрации;
- в скрипт добавлен короткий FAQ.

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

Post by VladSh »

Коллеги, а кто-то писал что-то по обработке json?
Есть массив определённых json-объектов, хотелось бы получить из них значения только определённых "полей", и получить ответ в новую вкладку для сохранения в csv.
Помню, где-то что-то подобное было...

Добавлено: Необходимость отпала, т.к. на NP++ и питоне это заняло всего 6 строк кода.

Offline
Posts: 351
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

backupVersion.js, строка 26

Code: Select all

var getVersionPattern  = /(^|[^a-z])(version|ver\.?|v\.?)[ \t]*[-:=]?[ \t]*(\S+)/i;
в [-:=] нужно добавить "|", т.е. [-:=|] в AutoIt3 такой разделитель используется.

Keyboard.js, строка 91

Code: Select all

// AkelPad.SetSel(0, -1);
AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/, 0x25 /*VK_LEFT*/, 0x02|0x04 /*AEMOD_SHIFT|AEMOD_CONTROL*/);
закомментировать и вставить высылку Ctrl+Shift+Left, т.е. выделение слова слева от курсора.

Offline
Posts: 351
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

Я авторский скрипт немного поковырял. Сделал, чтобы язык определялся автоматически по последней букве, а также автоматическое выделение текста слева от курсора до первого разделителя (пробела, запятая и т.д.).

Code: Select all

// http://akelpad.sourceforge.net/en/plugins.php#Scripts
// Version: 1.1 ????
// Author: Shengalts Aleksander aka Instructor (изменял AZJIO)
//
//
// Description(1033): Convert keyboard layout or transliterate text.
//
// Arguments:
// -Type=Layout       -Convert keyboard layout.
// -Type=Translit     -Transliteration.
// -Direction=En->Ru  -From English to Russian.
// -Direction=Ru->En  -From Russian to English.
//
// Usage:
// "Convert layout" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout`)
// "Transliteration" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit`)
//
//
// Description(1049): Исправляет раскладку клавиатуры или транслитерирует текст.
//
// Аргументы:
// -Type=Layout       -Исправление раскладки клавиатуры.
// -Type=Translit     -Транслитерация.
//
// Применение:
// "Исправить набор" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout`)
// "Транслитерация" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit`)

//Arguments
var pType = AkelPad.GetArgValue("Type", "").toLowerCase();

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

//Variables
var hMainWnd = AkelPad.GetMainWnd();
var hWndEdit = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var nSelStart;
var nSelEnd;
var nFirstLine;
var pSelText;
var nFlagSel = 0;

if (hWndEdit) {
	if (pType == "") {
		var aItems = [];
		var nItem;

		//Show menu
		aItems[0] = ["Смена раскладки", MF_NORMAL, 0];
		aItems[1] = ["Транслит", MF_NORMAL, 1];

		if ((nItem = ShowMenu(aItems, POS_CARET, POS_CARET)) != -1) {
			if (nItem == 0) {
				pType = "layout";
			} else if (nItem == 1) {
				pType = "translit";
			}
		}
	}
	if (!pType) WScript.Quit();

	//Get selection
	nSelStart = AkelPad.GetSelStart();
	nSelEnd = AkelPad.GetSelEnd();
	if (nSelStart == nSelEnd) {
		AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x25 /*VK_LEFT*/ , 0x02 | 0x04 /*AEMOD_SHIFT|AEMOD_CONTROL*/ );
		nFlagSel = 1
	}
	pSelText = AkelPad.GetSelText();
	

	var pEnT = 'qwertyuiopasdfghjklzxcvbnm'
	var pRuT = 'ёйцукенгшщзхъфывапролджэячсмитьбю'
	var pLang = ''

	// Определяем язык по последней букве в обрабатываемом тексте, т.е. перебираем буквы справа налево
	for (i = pSelText.length - 1; i > -1; --i) {
		iPos = pRuT.indexOf(pSelText.charAt(i).toLowerCase())
		if (iPos == -1)
		{
			iPos = pEnT.indexOf(pSelText.charAt(i).toLowerCase())
			if (iPos !== -1) {
				pLang = 'en'
				break
			}
		} else {
			pLang = 'ru'
			break
		}
	}
	if (!pLang) {
		if (nFlagSel) AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x27 /*VK_RIGHT*/ , 0);
		WScript.Quit();
	}

	if (pType == "layout") {
		var pEn = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./~QWERTYUIOP{}ASDFGHJKL:" + '"' + "|ZXCVBNM<>?@#$^&"
		var pRu = 'ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?'
		
// 		var pEn = "',.:;<>\"[]`{}~#@^$?&/|AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
// 		var pRu = "эбюЖжБЮЭхъёХЪЁ№\":;,?./ФфИиСсВвУуАаПпРрШшОоЛлДдЬьТтЩщЗзЙйКкЫыЕеГгМмЦцЧчНнЯя"
// Удаление дубликатов
		var pLetterUni = RemoveDuplicates(pSelText); // удаление дубликатов букв делает цикл замены с меньшим числом итераций
		var iPos;
		var i;
		if (pLang == 'ru') {
			for (i = 0; i < pLetterUni.length; ++i) {
				iPos = pRu.indexOf(pLetterUni.charAt(i))
				if (iPos != -1)
				{
					oPattern = new RegExp(EscRegExp(pLetterUni.charAt(i)), "g");
					pSelText = pSelText.replace(oPattern, pEn.charAt(iPos));
					// pSelText = pSelText.replace(pLetterUni.charAt(i), pEn.charAt(iPos)); // этот вариант если не удалять дубликаты, но для длинных текстов медленнее
				}
			}
		} else if (pLang == 'en') {
			if (pLetterUni.indexOf('.') != -1) pLetterUni = '.' + pLetterUni.replace('.', ''); // добавление очерёдности замен / -> . -> ю
			if (pLetterUni.indexOf(',') != -1) pLetterUni = ',' + pLetterUni.replace(',', ''); // добавление очерёдности замен ? -> ,  -> б
			for (i = 0; i < pLetterUni.length; ++i) {
				iPos = pEn.indexOf(pLetterUni.charAt(i))
				if (iPos != -1)
				{
					oPattern = new RegExp(EscRegExp(pLetterUni.charAt(i)), "g");
					pSelText = pSelText.replace(oPattern, pRu.charAt(iPos));
					// pSelText = pSelText.replace(pLetterUni.charAt(i), pRu.charAt(iPos));
				}
			}
		}

		
	} else if (pType == "translit") {
		if (pLang == 'en') {
			// Transliteration Latin->Cyrillic
			var pArraySourceMulti = new Array("jo", "yo", "\xF6", "ch", "w", "shh", "sh", "je", "\xE4", "ju", "yu", "\xFC", "ja", "ya", "zh", "ts");
			var pArrayTargetMulti = new Array("ё", "ё", "ё", "ч", "щ", "щ", "ш", "э", "э", "ю", "ю", "ю", "я", "я", "ж", "ц");
			var pArraySourceSingle = new Array("c", "h", "x", "j", "'", "y", "#", "`", "a", "b", "v", "g", "d", "e", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f");
			var pArrayTargetSingle = new Array("ц", "х", "х", "й", "ь", "ы", "ъ", "ъ", "а", "б", "в", "г", "д", "е", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф");

			pSelText = Transliterate(pSelText, pArraySourceMulti, pArrayTargetMulti);
			pSelText = Transliterate(pSelText, pArraySourceSingle, pArrayTargetSingle);
		} else if (pLang == 'ru') {
			// Transliteration Cyrillic->Latin
			var pArraySource = new Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я");
			var pArrayTarget = new Array("a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "ts", "ch", "sh", "shh", "`", "y", "'", "je", "ju", "ja");

			pSelText = Transliterate(pSelText, pArraySource, pArrayTarget);
		}
	}
	AkelPad.ReplaceSel(pSelText, -2);
 	if (nFlagSel) AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x27 /*VK_RIGHT*/ , 0);
}

//Functions

// Удаление дубликатов с учётом регистра
function RemoveDuplicates(pText) {
	var obj = new Object();
	var i;
	var pTextNew = "";

	for (i = 0; i < pText.length; ++i) {
		if (!obj[pText.charAt(i)])
		{
			obj[pText.charAt(i)] = true
			pTextNew += pText.charAt(i);
		}
	}
	return pTextNew;
}


function Transliterate(pText, pArraySource, pArrayTarget) {
	var oPattern;
	var i;

	for (i = 0; i < pArraySource.length; ++i) {
		oPattern = new RegExp(EscRegExp(pArraySource[i]), "g");
		pText = pText.replace(oPattern, pArrayTarget[i]);
	}
	for (i = 0; i < pArraySource.length; ++i) {
		oPattern = new RegExp(EscRegExp(pArraySource[i]), "gi");
		pText = pText.replace(oPattern, pArrayTarget[i].substr(0, 1).toUpperCase() + pArrayTarget[i].substr(1));
	}
	return pText;
}

function EscRegExp(pString) {
	return pString.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
}


пока не пойму, почему строка //a. и //a при конвертировании дают разный вариант ююфю и ..ф соответственно. Разгадал, двойная замена. Оптимизировал, точку и запятую переместил в начало списка замен, чтобы исключить двойную замену. Проверил, что только 2 символа были подвержены этой проблеме.

вариант как было раньше, но с автоопределением направления

Code: Select all

// http://akelpad.sourceforge.net/en/plugins.php#Scripts
// Version: 1.1 ????
// Author: Shengalts Aleksander aka Instructor (изменял AZJIO)
//
//
// Description(1033): Convert keyboard layout or transliterate text.
//
// Arguments:
// -Type=Layout       -Convert keyboard layout.
// -Type=Translit     -Transliteration.
// -Direction=En->Ru  -From English to Russian.
// -Direction=Ru->En  -From Russian to English.
//
// Usage:
// "Convert layout" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout`)
// "Transliteration" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit`)
//
//
// Description(1049): Исправляет раскладку клавиатуры или транслитерирует текст.
//
// Аргументы:
// -Type=Layout       -Исправление раскладки клавиатуры.
// -Type=Translit     -Транслитерация.
//
// Применение:
// "Исправить набор" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Layout`)
// "Транслитерация" Call("Scripts::Main", 1, "Keyboard.js", `-Type=Translit`)

//Arguments
var pType = AkelPad.GetArgValue("Type", "").toLowerCase();

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

//Variables
var hMainWnd = AkelPad.GetMainWnd();
var hWndEdit = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();
var hInstanceDLL = AkelPad.GetInstanceDll();
var nSelStart;
var nSelEnd;
var nFirstLine;
var pSelText;
var nFlagSel = 0;

if (hWndEdit) {
	if (pType == "") {
		var aItems = [];
		var nItem;

		//Show menu
		aItems[0] = ["Смена раскладки", MF_NORMAL, 0];
		aItems[1] = ["Транслит", MF_NORMAL, 1];

		if ((nItem = ShowMenu(aItems, POS_CARET, POS_CARET)) != -1) {
			if (nItem == 0) {
				pType = "layout";
			} else if (nItem == 1) {
				pType = "translit";
			}
		}
	}
	if (!pType) WScript.Quit();

	//Get selection
	nSelStart = AkelPad.GetSelStart();
	nSelEnd = AkelPad.GetSelEnd();
	if (nSelStart == nSelEnd) {
		AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x25 /*VK_LEFT*/ , 0x02 | 0x04 /*AEMOD_SHIFT|AEMOD_CONTROL*/ );
		nFlagSel = 1
	}
	pSelText = AkelPad.GetSelText();
	

	var pEnT = 'qwertyuiopasdfghjklzxcvbnm'
	var pRuT = 'ёйцукенгшщзхъфывапролджэячсмитьбю'
	var pLang = ''

	// Определяем язык по последней букве в обрабатываемом тексте, т.е. перебираем буквы справа налево
	for (i = pSelText.length - 1; i > -1; --i) {
		iPos = pRuT.indexOf(pSelText.charAt(i).toLowerCase())
		if (iPos == -1)
		{
			iPos = pEnT.indexOf(pSelText.charAt(i).toLowerCase())
			if (iPos !== -1) {
				pLang = 'en'
				break
			}
		} else {
			pLang = 'ru'
			break
		}
	}
	if (!pLang) {
		if (nFlagSel) AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x27 /*VK_RIGHT*/ , 0);
		WScript.Quit();
	}

	if (pType == "layout") {
		var iPos;
		var i;
		if (pLang == 'ru') {
			// Convert keyboard layout Ru->En
			var pArraySource=new Array("\"", ":", ";", "?", ",", "/", ".", "э", "б", "ю", "Ж", "ж", "Б", "Ю", "Э",  "х", "ъ", "ё", "Х", "Ъ", "Ё", "№", "Ф", "ф", "И", "и", "С", "с", "В", "в", "У", "у", "А", "а", "П", "п", "Р", "р", "Ш", "ш", "О", "о", "Л", "л", "Д", "д", "Ь", "ь", "Т", "т", "Щ", "щ", "З", "з", "Й", "й", "К", "к", "Ы", "ы", "Е", "е", "Г", "г", "М", "м", "Ц", "ц", "Ч", "ч", "Н", "н", "Я", "я");
			var pArrayTarget=new Array("@",  "^", "$", "&", "?", "|", "/", "'", ",", ".", ":", ";", "<", ">", "\"", "[", "]", "`", "{", "}", "~", "#", "A", "a", "B", "b", "C", "c", "D", "d", "E", "e", "F", "f", "G", "g", "H", "h", "I", "i", "J", "j", "K", "k", "L", "l", "M", "m", "N", "n", "O", "o", "P", "p", "Q", "q", "R", "r", "S", "s", "T", "t", "U", "u", "V", "v", "W", "w", "X", "x", "Y", "y", "Z", "z");
			
			pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
		} else if (pLang == 'en') {

			// Convert keyboard layout En->Ru
			var pArraySource=new Array("'", ",", ".", ":", ";", "<", ">", "\"", "[", "]", "`", "{", "}", "~", "#", "@",  "^", "$", "?", "&", "/", "|", "A", "a", "B", "b", "C", "c", "D", "d", "E", "e", "F", "f", "G", "g", "H", "h", "I", "i", "J", "j", "K", "k", "L", "l", "M", "m", "N", "n", "O", "o", "P", "p", "Q", "q", "R", "r", "S", "s", "T", "t", "U", "u", "V", "v", "W", "w", "X", "x", "Y", "y", "Z", "z");
			var pArrayTarget=new Array("э", "б", "ю", "Ж", "ж", "Б", "Ю", "Э",  "х", "ъ", "ё", "Х", "Ъ", "Ё", "№", "\"", ":", ";", ",", "?", ".", "/", "Ф", "ф", "И", "и", "С", "с", "В", "в", "У", "у", "А", "а", "П", "п", "Р", "р", "Ш", "ш", "О", "о", "Л", "л", "Д", "д", "Ь", "ь", "Т", "т", "Щ", "щ", "З", "з", "Й", "й", "К", "к", "Ы", "ы", "Е", "е", "Г", "г", "М", "м", "Ц", "ц", "Ч", "ч", "Н", "н", "Я", "я");
			
			pSelText=ConvertLayout(pSelText, pArraySource, pArrayTarget);
		}

		
	} else if (pType == "translit") {
		if (pLang == 'en') {
			// Transliteration Latin->Cyrillic
			var pArraySourceMulti = new Array("jo", "yo", "\xF6", "ch", "w", "shh", "sh", "je", "\xE4", "ju", "yu", "\xFC", "ja", "ya", "zh", "ts");
			var pArrayTargetMulti = new Array("ё", "ё", "ё", "ч", "щ", "щ", "ш", "э", "э", "ю", "ю", "ю", "я", "я", "ж", "ц");
			var pArraySourceSingle = new Array("c", "h", "x", "j", "'", "y", "#", "`", "a", "b", "v", "g", "d", "e", "z", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f");
			var pArrayTargetSingle = new Array("ц", "х", "х", "й", "ь", "ы", "ъ", "ъ", "а", "б", "в", "г", "д", "е", "з", "и", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф");

			pSelText = Transliterate(pSelText, pArraySourceMulti, pArrayTargetMulti);
			pSelText = Transliterate(pSelText, pArraySourceSingle, pArrayTargetSingle);
		} else if (pLang == 'ru') {
			// Transliteration Cyrillic->Latin
			var pArraySource = new Array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я");
			var pArrayTarget = new Array("a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "ts", "ch", "sh", "shh", "`", "y", "'", "je", "ju", "ja");

			pSelText = Transliterate(pSelText, pArraySource, pArrayTarget);
		}
	}
	AkelPad.ReplaceSel(pSelText, -2);
 	if (nFlagSel) AkelPad.SendMessage(hWndEdit, 3044 /*AEM_KEYDOWN*/ , 0x27 /*VK_RIGHT*/ , 0);
}

//Functions

// Удаление дубликатов с учётом регистра
function ConvertLayout(pText, pArraySource, pArrayTarget)
{
  var oPattern;
  var i;

  for (i=0; i < pArraySource.length; ++i)
  {
    oPattern=new RegExp(EscRegExp(pArraySource[i]), "g");
    pText=pText.replace(oPattern, pArrayTarget[i]);
  }
  return pText;
}


function Transliterate(pText, pArraySource, pArrayTarget) {
	var oPattern;
	var i;

	for (i = 0; i < pArraySource.length; ++i) {
		oPattern = new RegExp(EscRegExp(pArraySource[i]), "g");
		pText = pText.replace(oPattern, pArrayTarget[i]);
	}
	for (i = 0; i < pArraySource.length; ++i) {
		oPattern = new RegExp(EscRegExp(pArraySource[i]), "gi");
		pText = pText.replace(oPattern, pArrayTarget[i].substr(0, 1).toUpperCase() + pArrayTarget[i].substr(1));
	}
	return pText;
}

function EscRegExp(pString) {
	return pString.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
}


Можно не изменяя старый формат, добавить параметр "автоопределения направления". А также можно ещё добавать режим "инвертирование". Сейчас приdtn -> привет, а инвертирование подразумевает приdtn -> ghbвет.

Offline
Posts: 351
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

DV
На счёт CommandPalette.js - я нашёл пример на PureBasic для раскраски текста внутри пункта для ListView, то есть для списка-таблицы. Было бы удобно если искомый текст в пунктах был бы подсвечен.

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

Post by DV »

AZJIO wrote:На счёт CommandPalette.js - я нашёл пример на PureBasic для раскраски текста внутри пункта для ListView, то есть для списка-таблицы
Сейчас в скрипте для списка используется ListBox. Для ListView придётся переписывать часть кода - не уверен, что захочу этим заниматься в ближайшее время.

Offline
Posts: 12
Joined: Tue May 05, 2020 11:39 pm

Сравнение

Post by Arhaall »

Господа, может у кого-нибудь завалялся скрипт сравнения двух текстов в одной вкладке с пометкой различий и без привлечения сторонних программ как в notepad++? Ну или из двух вкладок.
Вещь нужная, а найти нигде не могу.

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

Re: Сравнение

Post by opk44 »

Arhaall wrote:Господа, может у кого-нибудь завалялся скрипт сравнения двух текстов в одной вкладке с пометкой различий и без привлечения сторонних программ как в notepad++? Ну или из двух вкладок.
Вещь нужная, а найти нигде не могу.
Если ключевое требование - это "и без привлечения сторонних программ", то такого не встречал. Имеющиеся "скриптовые" решения опираются на использование WinMerge:
1) winMergeTabs.js
2) WinMerge.js
Сам пользуюсь первым. Если решите пользоваться вторым, то имейте в виду, что более новая версия скрипта есть в составе архив-коллекции VladSh.zip

Offline
Posts: 12
Joined: Tue May 05, 2020 11:39 pm

Re: Сравнение

Post by Arhaall »

opk44 wrote:
Arhaall wrote:Господа, может у кого-нибудь завалялся скрипт сравнения двух текстов в одной вкладке с пометкой различий и без привлечения сторонних программ как в notepad++? Ну или из двух вкладок.
Вещь нужная, а найти нигде не могу.
Если ключевое требование - это "и без привлечения сторонних программ", то такого не встречал. Имеющиеся "скриптовые" решения опираются на использование WinMerge:
1) winMergeTabs.js
2) WinMerge.js
Сам пользуюсь первым. Если решите пользоваться вторым, то имейте в виду, что более новая версия скрипта есть в составе архив-коллекции VladSh.zip
Не то чтобы прямо фатально, но очень предпочтительно было бы именно без стороннего софта. В том же notepad++ такое реализовано, наверняка возможно реализовать и здесь. А значит с большой вероятностью кто-нибудь да пробовал сам или ему такое попадалось.

Offline
Posts: 12
Joined: Tue May 05, 2020 11:39 pm

Re: Сравнение

Post by Arhaall »

opk44 wrote:Сам пользуюсь первым. Если решите пользоваться вторым, то имейте в виду, что более новая версия скрипта есть в составе архив-коллекции VladSh.zip
За сборку скриптов спасибо - может пригодится.
Post Reply