Scripts discussion (4)

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

С помощью скрипта linesHideShow.js отфильтровал файл. Сделал следующим образом. Есть такой текст:

Code: Select all

<span class="price nowrap">156</span>
 <b></b>   <p>Lorem ipsum dolor sit amet.<p/>
<span class="price nowrap">155</span>
   <p>Lorem ipsum dolor sit amet.<p/>  <i></i>
<span class="price nowrap">176</span>
   <img src="img.png" alt="">
<span class="price nowrap">352</span>
<b></b>   <b>Lorem ipsum dolor sit amet.<b/>
<span class="price nowrap">128</span>
 Lorem ipsum dolor. <span>something</span>
<span class="price nowrap">257</span>
- Выделил фрагмент текста «<span class="price nowrap">»
- В горячих клавишах записана команда «Call("Scripts::Main", 1, "LinesHideShow.js")»
- Запустил скрин комбинацией клавиш
В результате были скрыты не подподающие под шаблон строки (скрипт только скрывает) и получил необходимые мне строки. Однако, так как остальные строки скрыты, а не удалены из документа, то выделить курсором весь массива не получается потому, что вместе с ним копируются и скрытые строки. Как можно выделить именно оставшийся видимый текст, чтобы скопировать только их без скрытых строк???

Code: Select all

<span class="price nowrap">156</span>
<span class="price nowrap">155</span>
<span class="price nowrap">176</span>
<span class="price nowrap">352</span>
<span class="price nowrap">128</span>
<span class="price nowrap">257</span>

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

Post by AZJIO »

Eskander88
Я использовал LinesFilter.js, он видимо вырезает строки, то что я получил смог скопировать. Потом нажал "отмена" и вернул к первоначальному состоянию документ. Этот скрипт вроде идёт комплектом.
У меня так.

Code: Select all

"Фильтр строк с регулярными выражениями" Call("Scripts::Main", 1, "LinesFilter.js")

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

Post by Eskander88 »

AZJIO,
LineFilter.js конечно более продвинутое средство для сортировки строк, однако с linesHideShow.js некоторые операции делать удобнее. Скрипт linesHideShow.js позволяет с помощью одного клика выявлять необходимые строки по выделенному шаблона фрагмента и тут же обозревать все строки, а потом можно также быстро возвращаться. В LineFilter.js требует не только нескольких кликов, но и зачастую он используется и для иных манипуляций и тогда можно зацепить по запарке чекбокс с поиском по регулярке, что приводит к некоторым конфузам.

В коде скрипта linesHideShow.js есть достаточно не типовые языковые конструкции, поэтому мне сложно понять как избежать вышеописанную загвоздку и сохранить работоспособность скрипта.

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

Post by AZJIO »

Code: Select all

var oSys = AkelPad.SystemFunction();
var hWndEdit = AkelPad.GetEditWnd();
var nSelStart = AkelPad.GetSelStart();
var nSelEnd = AkelPad.GetSelEnd();

if (nSelStart == nSelEnd) {
	GetWord()
}

function GetWord() {
	var nLine = AkelPad.SendMessage(hWndEdit, 1078 /*EM_EXLINEFROMCHAR*/ , 0, nSelStart); // номер строки
	var nLineStart = GetBeginLine(nLine); // Начало строки
	var nLineEnd = GetEndLine(nLine); // Конец строки
	// var pLineText=AkelPad.GetTextRange(nLineStart, nLineEnd); // получили строку
	var pLineText1 = AkelPad.GetTextRange(nLineStart, nSelStart); // получили часть строки перед курсором
	var pLineText2 = AkelPad.GetTextRange(nSelStart, nLineEnd); // получили часть строки после курсора

	// pLineText2 = pLineText2.match(/^[\wа-яё]+/im); // метод включения
	pLineText2 = pLineText2.match(/^[^\\=\-\[\]\(\)\$#@%^&\*=\s,.!?<>\/:;"'\|~`]+/im); // метод исключения
	if (pLineText2 == null) {
		pLineText2 = "";
	} else {
		pLineText2 = pLineText2[0]; // из массива в строку
	}

	// делаем реверс левой части строки
	var res = "";
	var i;
	for (i = pLineText1.length; i > -1; i--) {
		res += pLineText1.charAt(i);
	}
	// res = res.match(/^[\wа-яё]+/im); // метод включения
	res = res.match(/^[^\\=\-\[\]\(\)\$#@%^&\*=\s,.!?<>\/:;"'\|~`]+/im); // метод исключения
	if (res == null) {
		res = "";
		pLineText1 = "";
	} else {
		// если есть результат, делаем обратный реверс
		pLineText1 = "";
		res = res[0]; // из массива в строку
		for (i = res.length; i > -1; i--) {
			pLineText1 += res.charAt(i);
		}
	}

	WScript.Echo(pLineText1 + pLineText2); // получаем результат. Курсор может быть в начале слова, в конце и в средине.

}

function SendMessage(hWnd, uMsg, wParam, lParam) {
	return oSys.Call("User32::SendMessage" + _TCHAR, hWnd, uMsg, wParam, lParam);
}

function GetBeginLine(nLine) {
	return SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/ , nLine, 0);
}

function GetEndLine(nLine) {
	return SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/ , nLine, 0) + SendMessage(hWndEdit, 193 /*EM_LINELENGTH*/ , SendMessage(hWndEdit, 187 /*EM_LINEINDEX*/ , nLine, 0), 0);
}
- определение букв происходит рег.выр.ом методом исключения или включения. Да, я нашёл вариант с использованием EM_FINDWORDBREAK без фикса и он плохо выделял на краях, поэтому продолжил доделывать свой вариант. Ну а потом уже нашёл это.

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

Post by AZJIO »

Обновил Search_internet.js добавив необязательное выделение слова, то есть захватывает слово под курсором.
Обновил CloseTabByExt.js, добавлен ключ -Ask=true, чтобы выдавать имена закрываемых файлов, и возможность отмены закрытия.

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

Post by Diamen »

Do it have a script, or other functionality, to smart replace initials spaces to correspondents tabs?

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

Post by opk44 »


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

Post by AZJIO »

Diamen
indent2Tab.js

Обновил CreateNewFileNext
Добавлено три аргумента:
1. Диалог запроса имени
2. Флаг создания копии, вместо нового. Для меня важно, так как я часто после встраивания некоторого законченного функционала в код/скрипт делаю его бэкап в виде имя_оригинала_индекс, например "CreateNewFileNext_1.js", где 1 это номер копии, потом будет 2 и т.д. То есть я могу откатится к предыдущей версии в случае падения системы с порчей файла или нерелевантных обновлений. Хотя я знаю о скрипте "backupVersion.js", но каждый делает как ему привычно. Кстати, функционал был изначально встроен и закомментирован в упрощённом варианте.
3. Имя при создании нового.

Обновил (исправил) CloseTabByExt.js
Правильно использовал параметр MinTabs.
Сначала исправил в строке 44:

Code: Select all

var nMinTabs = AkelPad.GetArgValue("MinTabs", 1);
было указано 2 минимальное количество вкладок, но на деле это число означает количество пунктов в списке, что для другого типа скрипта откуда я его взял означает именно вкладок. А у меня получилось так что открыв 10 txt-файлов я их не могу закрыть этим скриптом, так как это 1 пункт списка и поэтому он не появляется.

Теперь вернул MinTabs =2 по умолчанию, но использовал его именно при подсчёте количества вкладок в строке 474.

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

Post by AZJIO »

Kley
Посмотрел MsgBoxBuild.js, я такой тоже делал для AutoIt3, но с автозахватом переменных выделенного участка кода. То есть суть была вывод состояния переменных, чтобы каждый раз не составлять муторно конструкцию и запихивать переменные, а вызвать хоткей, убрать лишние переменные в списке и клавишей Ctrl+V вставить в нужную позицию. Единственное у AutoIt3 переменные легко детектируются (начинаются на $). То есть по сути создать отладчик с быстрым получением отладочной строки, то есть создать красивую мессагу раз в году можно и ручками, а вот отладочную строку приходится делать 10-100 раз на скрипт.
Image

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

Post by Infocatcher »

measuresConverter.js v. 0.2.9.1 - 2020-11-07
[x] Fix for expired certificate, back to use http://api.bitcoincharts.com.

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

Post by AZJIO »

Infocatcher
Сильно не разбирался, но я решил обновить сборку и скачал новый winMergeTabs.js через абдейтер, начинаю сравнивать 2 файла самого же winMergeTabs.js 0.1.3 и версию из интернет-сборки 0.1.2, пишет файлы идентичны, тут же сравниваю tileTabs.js, который тоже скачался, тоже пишет идентичны (в Meld), хотя я визуально вижу разные версии. Кидаю из интернет-сборки v0.1.2 в свою и сравниваю tileTabs.js, уже не пишет идентичны.

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

Post by Infocatcher »

AZJIO
Так сравнивает же приложение, а по части winMergeTabs.js – передача правильных параметров командной строки (в случае, если оба документа во вкладках уже сохранены). Правильные ли пишет пути к файлам? (У себя я пока проблем не вижу…)

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

Post by AZJIO »

Infocatcher
анимация-скрин
У меня просто попадает на исследование последний файл. Удивляет почему все проги не предупреждают что сравнивается один и тот же файл. Решил проверить а если новый документ (не файл), сравнил, тоже сравнивает последний в обоих окнах. Ну то есть генерирование файлов в %temp% тоже печальный вариант.

Проверил WinMerge, кинув в оба поля один и тот же файл, он промолчал что пути одинаковы, видимо подразумевается что файл может измениться и можно сравнить старый буфер с изменённым файлом, но факт не предупреждает что путь одинаковый.

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

Post by VladSh »

AZJIO
> слово под курсором

Медаль министру велосипедостроения!!! :D

Всё было "украдено" давно - CaretSelect.js.

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

Post by Infocatcher »

winMergeTabs.js v. 0.1.3.1 - 2020-11-14
[x] Fixed in PMDI mode (regression in v. 0.1.3 - 2020-06-14).

AZJIO wrote:У меня просто попадает на исследование последний файл.
Как оказалось, это особенность PMDI.
Старые версии переключались на вкладку, чтобы получить сведения о файле. А в новой версии сделана оптимизация:

Code: Select all

	var hWndEdit = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 2 /*FI_WNDEDIT*/, lpFrame);
	var hDocEdit = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 3 /*FI_DOCEDIT*/, lpFrame);
	var origFile = AkelPad.GetEditFile(hWndEdit);
Но получается, что в PMDI будет один и тот же hWndEdit (но разные hDocEdit).
Post Reply