Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Skif_off wrote:AkelPad с плагином LineBoard подсвечивает цветом сохранённые и несохранённые строки, возможно ли написать скрипт, чтобы по ним можно было перемещаться? Типа Перейти к следующей несохранённой строке, предыдущей и по сохранённым. Вполне достаточно перехода в начало строки. Отменить/Повторить не очень удобно.
С версии AkelPad 4.9.3 команды 4199, 4200 также переводят каретку по позициям буфера отмен.

Чтобы перевести каретку к ближайшей позиции отмены: UndoPos.js

Offline
Posts: 3
Joined: Fri Jul 10, 2015 11:54 am

Post by dash73 »

Подскажите пожалуйста как я могу отсортировать слова в строке по длине слова и по алфавиту: сначала идут самые длинные по алфавиту, затем короче и также по алфавиту и тд?

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

Post by Infocatcher »

dash73
Примерно так:

Code: Select all

AkelPad.ReplaceSel(
	AkelPad.GetSelText()
		.split(" ")
		.sort(function(a, b) {
			var dl = b.length - a.length;
			if(dl == 0) {
				if(a == b)
					return 0;
				if(a > b)
					return 1;
				return -1;
			}
			return dl;
		})
		.join(" ")
);
На слова разбивается просто по пробелам, потом склеивается обратно.

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

Post by Lenchik »

SortLines.js

Offline
Posts: 3
Joined: Fri Jul 10, 2015 11:54 am

Post by dash73 »

Infocatcher wrote:dash73
Примерно так:
...
На слова разбивается просто по пробелам, потом склеивается обратно.
Спасибо Infocatcher работает правильно для одной выделенной строки...
А как сделать для всех строк? Ломает текст (строки), если выделить несколько строк...
Lenchik wrote:SortLines.js
Спасибо Lenchik - не получается у меня им желаемый результат (...

Может сначала SortWord.js - в каждой строке слова становятся по алфавиту... А как или чем потом сделать - порядок слов в строке по длине слова с алфавитным порядком )

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

Post by Infocatcher »

dash73 wrote:А как сделать для всех строк? Ломает текст (строки), если выделить несколько строк...
Вот так:

Code: Select all

var lines = AkelPad.GetSelText().split("\r");
for(var i = 0, l = lines.length; i < l; ++i) {
	lines[i] = lines[i]
		.split(" ")
		.sort(function(a, b) {
			var dl = b.length - a.length;
			if(dl == 0) {
				if(a == b)
					return 0;
				if(a > b)
					return 1;
				return -1;
			}
			return dl;
		})
		.join(" ");
}
AkelPad.ReplaceSel(lines.join("\r"));

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

Post by yozhic »

Создал пользовательское меню с помощью библиотеки Include/ShowMenu.js. В библиотеке есть константы появления меню на экране:

Code: Select all

var POS_CARET   =-1; //Under caret position.
var POS_CURSOR  =-2; //Cursor position.
Можно также задать произвольные координаты x, y. Помогите, пожалуйста, показать меню по центру окна редактирования.

Offline
Posts: 3
Joined: Fri Jul 10, 2015 11:54 am

Post by dash73 »

Infocatcher wrote:
dash73 wrote:А как сделать для всех строк? Ломает текст (строки), если выделить несколько строк...
Вот так: ...
Infocatcher Большое Вам человеческое спасибо!!! Всё работает!!!
Творческих и личных удач Вам, новых побед и великих свершений,
здоровья, мудрости и процветания!!!

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

Post by KDJ »

yozhic wrote:Помогите, пожалуйста, показать меню по центру окна редактирования.
Center x, y positions of the menu in edit window:

Code: Select all

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

//Variables
var lpItems;
var nItem;
var nX, nY;
var lpRECT = AkelPad.MemAlloc(16 /*sizeof(RECT)*/);

AkelPad.SystemFunction().Call("User32::GetWindowRect", AkelPad.GetEditWnd(), lpRECT);

nX = AkelPad.MemRead(_PtrAdd(lpRECT, 0), 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(_PtrAdd(lpRECT, 4), 3 /*DT_DWORD*/);
nX += (AkelPad.MemRead(_PtrAdd(lpRECT,  8), 3 /*DT_DWORD*/) - nX) / 2;
nY += (AkelPad.MemRead(_PtrAdd(lpRECT, 12), 3 /*DT_DWORD*/) - nY) / 2;

AkelPad.MemFree(lpRECT);

lpItems=[["ItemA", MF_NORMAL, 101],
         ["ItemB", MF_SUBMENU],
           ["ItemB-1", MF_NORMAL, 102],
           ["ItemB-2", MF_NORMAL, 103],
           ["ItemB-3", MF_NORMAL|MF_LAST, 104],
         ["ItemC", MF_NORMAL, 105],
         ["", MF_SEPARATOR],
         ["ItemD", MF_NORMAL|MF_GRAYED, 106],
         ["ItemF", MF_SUBMENU],
           ["ItemF-1", MF_NORMAL|MF_CHECKED, 107],
           ["ItemF-2", MF_NORMAL, 108],
           ["ItemF-3", MF_SUBMENU|MF_LAST],
             ["ItemF-3a", MF_NORMAL, 109],
             ["ItemF-3b", MF_NORMAL|MF_LAST, 110]];

nItem=ShowMenu(lpItems, nX, nY);
if (nItem == -1)
  WScript.Echo("Nothing selected");
else
  WScript.Echo("Item index: " + nItem + "\nItem name: " + lpItems[nItem][0] + "\nItem ID: " + lpItems[nItem][2]);

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

Post by yozhic »

KDJ
Спасибо огромное. Работает!

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Post by sasa236 »

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

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

sasa236 wrote:Большая просьба помочь написать скрипт, который удаляет досовские непечатные символы в тексте.
Для этого скрипт не нужен, достаточно регулярных выражений и стандартного инструмента замены:

Code: Select all

Что: [\x00-\x1F]*+
Чем:
и "Заменить всё"

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

Post by FeyFre »

YuS, и все переносы строк ушли в отпуск ? :D А также символы табуляции :wink:

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

FeyFre wrote:и все переносы строк ушли в отпуск ? :D А также символы табуляции :wink:
Дык, что заказывали, то и получили... :)
Я-то здесь при чем? Символы-то непечатные, а их просили удалить. :)

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

Post by FeyFre »

YuS, дык перенос и таб - печатные. Управляющие - да, но печатные :)
Post Reply