Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 267
- Joined: Mon Mar 12, 2007 3:45 pm
С помощью скрипта нужно ближайшую вверх по тексту "единичку" заменить на "двойку", а ближайшую вниз по тексту "тройку" заменить на "четверку".
Пишу:
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart, nSelStart);
q=AkelPad.TextReplace(AkelPad.GetEditWnd(), '1', '2', 0x00100000, false);
AkelPad.SetSel(nSelEnd, nSelEnd);
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, false);
AkelPad.MessageBox(AkelPad.GetMainWnd(), q+ ' : ' + a, "", 64 /*MB_ICONINFORMATION*/);
Вбиваю текст:
1313131313131313131313
Итого:
q и w вроде бы возвращаются не нулевые, а заменять ничего не заменяет
Я, может, неправильно понял назначение этих операторов?
Пишу:
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart, nSelStart);
q=AkelPad.TextReplace(AkelPad.GetEditWnd(), '1', '2', 0x00100000, false);
AkelPad.SetSel(nSelEnd, nSelEnd);
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, false);
AkelPad.MessageBox(AkelPad.GetMainWnd(), q+ ' : ' + a, "", 64 /*MB_ICONINFORMATION*/);
Вбиваю текст:
1313131313131313131313
Итого:
q и w вроде бы возвращаются не нулевые, а заменять ничего не заменяет

-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Размер табуляции, если это табуляция, роли не играет. Если у меня я ставил табы размером 8, то у Вас они же будут отображаться размером 4.[Yustas.NeO] wrote:Ну, например, я привык к размеру табуляции 4, а файлы *.coder сохранены с размером 8 - вот и хотел для оперативности повесить на хоткей...
Может тогда есть еще какой-нибудь способ?
Если это не табуляция (у того, кто редактировал файл, стоит галка "Пробелы"), тогда можно сделать замену. Т.е. заменить 4 пробела на 1 символ табуляции. Для этого подойдёт скрипт SpacesToTabs.js. Вызываете диалог, задаёте 4.
Если всё же табуляции, тогда значит надо их уменьшить вдвое, т.е. примитивный скрипт (можно написать настраиваемый):
Code: Select all
AkelPad.SetSel(0, -1);
pContent = AkelPad.GetSelText();
pContent = pContent.replace(/\t\t/g, "\t");
AkelPad.ReplaceSel(pContent);
-
Offline
- Posts: 1949
- Joined: Sat Mar 06, 2010 7:40 pm
- Location: Poland
Try this:[Yustas.NeO] wrote:С помощью скрипта нужно ближайшую вверх по тексту "единичку" заменить на "двойку", а ближайшую вниз по тексту "тройку" заменить на "четверку".
Пишу:
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart, nSelStart);
q=AkelPad.TextReplace(AkelPad.GetEditWnd(), '1', '2', 0x00100000, false);
AkelPad.SetSel(nSelEnd, nSelEnd);
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, false);
AkelPad.MessageBox(AkelPad.GetMainWnd(), q+ ' : ' + a, "", 64 /*MB_ICONINFORMATION*/);
Вбиваю текст:
1313131313131313131313
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart, nSelStart);
q=AkelPad.TextReplace(AkelPad.GetEditWnd(), "1", "2", 0x00100000, true);
AkelPad.SetSel(nSelEnd, nSelEnd);
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, true);
AkelPad.MessageBox(AkelPad.GetMainWnd(), q+ ' : ' + a, "", 64 /*MB_ICONINFORMATION*/);
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
UI-примочки надо использовать в крайнем случае, это хороший тон.[Yustas.NeO] wrote:...
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, false);
...
Разобраться можно, но мне лень)))
Code: Select all
pContent = AkelPad.GetSelText();
pContent = pContent.replace(/1/, "2");
pContent = pContent.replace(/3/, "4");
AkelPad.ReplaceSel(pContent);
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Code: Select all
AkelPad.SetSel(nSelStart, nSelStart);
Code: Select all
AkelPad.SetSel(nSelStart, nSelStart+1);
Code: Select all
AkelPad.SetSel(nSelEnd, nSelEnd);
Code: Select all
AkelPad.SetSel(nSelEnd, nSelEnd+1);
А если подумать, то для ближайшей вверх Вам нужно делать выделениеStart position - number of first selected character
End position - number of first non-selected character immediately after selection
Code: Select all
AkelPad.SetSel(0, nSelStart);
Code: Select all
AkelPad.SetSel(nSelEnd, -1);
-
Offline
- Posts: 267
- Joined: Mon Mar 12, 2007 3:45 pm
Thanks, but i need to replace only nearest, not all.KDJ wrote:q=AkelPad.TextReplace(AkelPad.GetEditWnd(), "1", "2", 0x00100000, true);
a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, true);
Это нужно чтобы учесть и выделение и просто постановку курсора, и заменить ближайшие вверх-вниз символы.FeyFre wrote:(Только зачем это нужно в контексте задачи я не понял)
Тоесть, если есть выделение (красным отмечено то, что выделено):
131313131313
То третий символ должен стать "2", а десятый "4".
А если есть курсор (он красный)
131313|131313
То пятый символ должен стать "2", а восьмой - "4".
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 267
- Joined: Mon Mar 12, 2007 3:45 pm
Да, но при этом потеряется табличный вид. Вот и приходится каждый раз менять туда-сюда.VladSh wrote:Если у меня я ставил табы размером 8, то у Вас они же будут отображаться размером 4.
Я правильно понимаю, что replace() заменяет только первое вхождение?VladSh wrote:pContent = pContent.replace(/1/, "2");
ТренируюсьVladSh wrote:А для чего это всё?

В данном случае пытаюсь написать скрипт комментирования строк задействованных в выделении.
-
Offline
- Posts: 3234
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Потому и говорю - лучше обработать скриптом под себя 1 раз.[Yustas.NeO] wrote:Да, но при этом потеряется табличный вид. Вот и приходится каждый раз менять туда-сюда.
Такая запись - да.[Yustas.NeO] wrote:Я правильно понимаю, что replace() заменяет только первое вхождение?Code: Select all
pContent = pContent.replace(/1/, "2");
По всему тексту будет так:
Code: Select all
pContent = pContent.replace(/1/g, "2");
Уже написаны: CommentsAdd.js и toggleComments.js.[Yustas.NeO] wrote:В данном случае пытаюсь написать скрипт комментирования строк задействованных в выделении.
Last edited by VladSh on Tue Aug 03, 2010 2:32 pm, edited 2 times in total.
-
Offline
- Posts: 1949
- Joined: Sat Mar 06, 2010 7:40 pm
- Location: Poland
Sorry, I misunderstood.[Yustas.NeO] wrote:Thanks, but i need to replace only nearest, not all.
I guess your problem solved:
Code: Select all
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();
AkelPad.SetSel(nSelStart, nSelStart);
var q=AkelPad.TextReplace(AkelPad.GetEditWnd(), "1", "2", 0x00100000, false);
if (q > -1)
AkelPad.TextReplace(AkelPad.GetEditWnd(), "1", "2", 0x00500000, false);
AkelPad.SetSel(nSelEnd, nSelEnd);
var a=AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00000001, false);
if (a > -1)
AkelPad.TextReplace(AkelPad.GetEditWnd(), "3", "4", 0x00400001, false);
AkelPad.SetSel(nSelStart, nSelEnd);