Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

ShiftMarker.js
Небольшое предложение по изменению функционала: нельзя ли сделать параметры такими:
1. _10 устанавливает маркер на 10;
2. +10 смещает маркер на 10 вправо;
3. -10 смещает маркер на 10 влево.


SelCompleteLine.js
А можно чуточку поподробнее, а то у меня так и не получается :(
Я хотел повесить в "Меню окна редактирования" пункт меню типа
-"SelectCompleteLine.js... Alt+L" Call("Scripts::Main", 1, "SelectCompleteLine.js")
и ткнув курсор в какую-нибудь часть текста (или выделив несколько строк) и выбрав этот пункт меню - получить выделение строки (или нескольких строк).
Подскажите, пожалуйста, какой текст надо внести в файл SelectCompleteLine.js?

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

Post by VladSh »

[Yustas.NeO] wrote:Не может, случаем, быть так, что ты смотришь не на черту маркера а на черту активного столбца?
Нет, я не использую "активный столбец".

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

Post by VladSh »

[Yustas.NeO]

В контекстном меню вызов:
-"Полное выделение строк" Call("Scripts::Main", 1, "MyScript.js")

Создаём собственный файл MyScript.js, вот его код:

Code: Select all

//Подключаем скрипт-"библиотеку" SelCompleteLine.js, который содержит функции для работы с выделенным текстом
eval(AkelPad.ReadFile(AkelPad.GetAkelDir() + "\\AkelFiles\\Plugs\\Scripts\\SelCompleteLine.js", 0xD, 0, 0));

//Вызываем её, т.е. выделяем текст
SelCompleteLine(AkelPad.GetEditWnd(), AkelPad.GetSelStart(), AkelPad.GetSelEnd());

//Пишем собственную обработку выделения
//..
Всё.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Блин, даже и не знаю...
Сверим вызовы?
-"ShiftMarker.js" Call("Scripts::Main", 1, "ShiftMarker.js", "-10") Icon("explorer.exe", 11)
-"ShiftMarker.js" Call("Scripts::Main", 1, "ShiftMarker.js", "-1") Icon("explorer.exe", 11)
-"ShiftMarker.js" Call("Scripts::Main", 1, "ShiftMarker.js", " 1") Icon("explorer.exe", 12)
-"ShiftMarker.js" Call("Scripts::Main", 1, "ShiftMarker.js", " 10") Icon("explorer.exe", 12)

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

Post by VladSh »

У меня только

Code: Select all

 -"ShiftMarker.js"	Call("Scripts::Main", 1, "ShiftMarker.js", "-10")
 -"ShiftMarker.js"	Call("Scripts::Main", 1, "ShiftMarker.js", " 10")
Да Бог с ним, мне просто было интересно, что оно такое...

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Это немного не то. Я имел ввиду - выделение от \n до \n.
Такое-то выделение можно получить просто проведя курсором по LinaBoard-плагину...

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

Post by VladSh »

[Yustas.NeO] wrote:Такое-то выделение можно получить просто проведя курсором по LinaBoard-плагину...
Скрипт нужен, чтобы выделять программно, а не тягать рукой :)

[Yustas.NeO] wrote:Это немного не то. Я имел ввиду - выделение от \n до \n.
Есть SelCompleteLine.js, есть AkelPad.SetSel(nSelStart, nSelEnd) (Scripts-Rus.txt), чем оно не подходит?

То, что писалось ранее
[Yustas.NeO] wrote:и ткнув курсор в какую-нибудь часть текста (или выделив несколько строк) и выбрав этот пункт меню - получить выделение строки (или нескольких строк).
для этого как раз и есть SelCompleteLine.js.

Опиши задачу подробно, я не пойму, что ты хочешь...


EDITED: Или может тебе надо просто получить выделенный текст? Так для этого есть AkelPad.GetSelStart, AkelPad.GetSelEnd или просто AkelPad.GetSelText.
Last edited by VladSh on Mon Jan 31, 2011 9:45 am, edited 1 time in total.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

VladSh wrote:Скрипт нужен, чтобы выделять программно, а тягать рукой :)
Я имел ввиду что, то что сделал предыдущй скрипт - "руками" я сделаю быстрее (в один клик) по сравнению с вызовом меню :)
VladSh wrote:чем оно не подходит?
Не подходит оно тем, что я не умею писать эти скрипты :oops:
VladSh wrote:Опиши задачу подробно, я не пойму, что ты хочешь...
Режим "Переносить длинные строки включен". Имеем очень длинную строчку текста, не влезающую на экран и расположившуюся в несколько строк. Ставим курсор куда-то в середину этой строчки текста и выбираем пункт меню "Выделить целиком строку". Выделение становится: от ближайшего физического \n выше по тексту до ближайшего физического \n ниже по тексту. В случае если не просто курсор стоит, а выделено несколько строк текста, то: от ближайшего физического \n выше верхней границы выделенного до ближайшего физического \n ниже нижней границы выделенного.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

[Yustas.NeO]
Тройной клик мыши выделяет строку полностью.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

О! Спасибо!

Но для выделения нескольких строк, видимо придется все-таки JS изучать :)

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

Post by VladSh »

Тройной клик чем не подходит?
Кстати он глючит с включённой SmartSel::NoSelEOL :cry:

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

[Yustas.NeO] wrote:ShiftMarker.js
Небольшое предложение по изменению функционала: нельзя ли сделать параметры такими:
1. _10 устанавливает маркер на 10;
2. +10 смещает маркер на 10 вправо;
3. -10 смещает маркер на 10 влево.
Добавил.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

VladSh wrote:Тройной клик чем не подходит?
Тем что выделяет только одну строчку текста, а надо - по выделенному куску выделять все строчки текста содержащие это выделение.


Если я правильно разобрался...

Code: Select all

var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
var nSelTemp;
if (nSelStart > nSelEnd)
{
	nSelTemp=nSelEnd;
	nSelEnd=nSelStart;
	nSelStart=nSelTemp;
}
AkelPad.SetSel(0, 1000000);
var allText=AkelPad.GetSelText();
var lineStart=allText.lastIndexOf('a', nSelStart);
var lineEnd=allText.indexOf('a', nSelEnd);
AkelPad.SetSel(lineStart+1, lineEnd);
Подскажите плиз:
1. Есть ли другой способ искать во всем тексте? (9-10 строки)
2. Как искать "конец строки" "перевод каретки", да так, что б не зависило от кодировки? (11-12 строки)

Instructor wrote:Добавил.
В очередной раз Гранд мерси :)

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

Post by VladSh »

[Yustas.NeO] wrote:Тем что выделяет только одну строчку текста, а надо - по выделенному куску выделять все строчки текста содержащие это выделение.
Он правильно выделяет, несколько строк. Это баг SmartSel::NoSelEOL, при его включении выделяется одна строчка, причём от начала, до текущего положения курсора, а не до конца строки.

[Yustas.NeO] wrote:Подскажите плиз:
1. Есть ли другой способ искать во всем тексте?
На сколько мне известно - на данный момент нет.
Выделить всё:

Code: Select all

AkelPad.SetSel(0, -1);
Либо что-то мутить на основе тех функций, что внутри SelCompleteLine.js.

[Yustas.NeO] wrote:2. Как искать "конец строки" "перевод каретки", да так, что б не зависило от кодировки?
Использовать не \n, а \r.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

VladSh wrote:Он правильно выделяет, несколько строк. Это баг SmartSel::NoSelEOL, при его включении выделяется одна строчка, причём от начала, до текущего положения курсора, а не до конца строки.
Не-не-не, я имею ввиду: если в выделени находится несколько строк текста (тоесть в выделении находится символ переноса строки.), то нужно получить ПОЛНОЕ выделение этих строк текста. А если тройным кликом, то выделится только текущая строка текста.
К тому же этот плагин у меня и не включен...
VladSh wrote:На сколько мне известно - на данный момент нет.
Будем подождать :)
VladSh wrote:Выделить всё:

Code: Select all

AkelPad.SetSel(0, -1);
Спасибо, пока подойдет!
VladSh wrote:Использовать не \n, а \r.
Ок!


Вот что получилось:

Code: Select all

var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
var nSelTemp;
if (nSelStart > nSelEnd)
{
	nSelTemp=nSelEnd;
	nSelEnd=nSelStart;
	nSelStart=nSelTemp;
}
AkelPad.SetSel(0, -1);
var allText=AkelPad.GetSelText();
var lineStart=allText.lastIndexOf('\r', nSelStart);
var lineEnd=allText.indexOf('\r', nSelEnd);
AkelPad.SetSel(lineStart+1, lineEnd);
И вроде бы даже работает так как я хотел.
Жаль только что скролл текста прыгает...
Locked