Page 6 of 24
Posted: Fri Sep 23, 2011 7:45 am
by ermakoov
Подскажите пожалуйста скрипт на js - найти вверх от текущего положения курсора ближайшую последовательность двух знаков - табулятор, конец строки. Заранее благодарен.
Posted: Fri Sep 23, 2011 8:29 am
by VladSh
ermakoov wrote:... скрипт на js - найти вверх от текущего положения курсора ближайшую последовательность двух знаков - табулятор, конец строки.
Есть скриптец
BlockSelect.js, если пройти по функциям, то можно добраться.. Но чтобы не париться, для своих скриптов можно использовать функционал объекта oCh, примеров в скриптах масса.
Posted: Fri Sep 23, 2011 4:01 pm
by ermakoov
Влад, спасибо! Но напоминаю, что я эксклюзивный чайник. Более того, упрямый до безобразия - не хочу изучать программирование, дабы осталось время на девочек и звёзды. Твой пассаж (ответ) для меня тёмный лес :)
Народ, дайте пожалуйста только текст просимого (и догадываюсь - простейшего) скрипта, безо всяких дополнительных советов!
Posted: Fri Sep 23, 2011 4:28 pm
by VladSh
ermakoov
девочек - это хорошо!
Code: Select all
var sTagOpen = "\t"; //сюда вписать искомый текст (сейчас указан "табулятор"); табулятор и конец строки будет выглядеть так: "\t\r"
var iCursor = AkelPad.GetSelStart(); //текущее положение курсора, от него и начинаем искать вверх
var pContent = AkelPad.GetTextRange(0, -1); //берём весь текст документа
var iTagOpenStart = pContent.lastIndexOf(sTagOpen, iCursor); //ищем вверх индекс первого найденного тэга
var iTagOpenEnd = iTagOpenStart + sTagOpen.length; //индекс окончания искомого тега: <индекс начала> + <длина тэга>
AkelPad.SetSel(iTagOpenStart, iTagOpenEnd); //выделяем найденный текст для наглядности
Posted: Fri Sep 23, 2011 4:31 pm
by Andrey_A_A
звёзды - это хорошо!
а скрипт SearchReplace.js не подойдёт?
Найти \t\n
Esc-последовательности
Вверх
Posted: Fri Sep 23, 2011 5:17 pm
by ermakoov
VladSh
Кажется, это то, что мне надо - сейчас буду испытывать.
Posted: Fri Sep 23, 2011 5:22 pm
by ermakoov
Andrey_A_A
Андрюха, а тебя чуть не понял. Сам скрипт "сёчриплейс", конечно, подойдет. То есть - поменять это на то же самое - мне и нужно просто переместить курсор в то неизвестное место, где табулятор и конец строки. Но там же в скрипте много лишнего кода. Мне же нужно автоматом, без открытия вручную окна замены. То есть нужен какой-то коротенький код, как я понимаю. А код ты и не приводишь :(
Posted: Fri Sep 23, 2011 5:30 pm
by VladSh
ermakoov wrote:нужно просто переместить курсор в то неизвестное место, где табулятор и конец строки.
Мне же нужно автоматом, без открытия вручную окна замены.
Если нужно не выделение, а простая переброска курсора, то последнюю строку надо заменить на
Code: Select all
AkelPad.SetSel(iTagOpenStart, iTagOpenStart); //переход к началу искомого текста
Posted: Fri Sep 23, 2011 6:06 pm
by ermakoov
VladSh
Влад, спасибо! Твой код проверил - всё работает, как надо. То я спрашивал Андрея на счёт скрипта "сёчриплейс". Там я не понял, как надо воспользоваться его советом - поэтому и задал ему допвопрос.
Posted: Fri Sep 23, 2011 8:14 pm
by Andrey_A_A
поэтому и задал ему допвопрос
ermakoov
SearchReplace.js я имел ввиду для внешнего вызова, где вводишь необходимое - а потом прочитал что нужно без внешнего вызова.
А теперь по делу.
VladSh
Можно сделать это гораздо проще. Есть функция
Code: Select all
TextFind(hHandle, pFindIt, nFlags)
только я не смог добиться поиска с Esc-последовательностями
простой поиск работает - допустим мы ищем русскую букву "а",
то на vbs будет одна строка
Code: Select all
Call AkelPad.TextFind(0, "а", 00200001)
на js и co скриптом EvalCmd.js будет кнопка
Code: Select all
-"Поиск буквы а (руской)" Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "а", 00200001);'`) Icon(0)
по описанию в Scripts-Rus.txt с Esc-последовательностями - 0x00800000 //FR_ESCAPESEQ
но я не смог добиться результата, с учётом задачи - поиска вверх должно быть
Code: Select all
Call AkelPad.TextFind(0, "\t\n", 00900000)
и
Code: Select all
-"Поиск буквы а (руской)" Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\n", 00900000);'`) Icon(0)
но это не работает...
пошёл по другому пути, это работает только вниз
Code: Select all
Call AkelPad.TextFind(0, Chr(9) & Chr(13), 00200001)
вверх также не смог подобрать нужные цифры вместо 00200001
может
Instructor что подскажет
Posted: Sat Sep 24, 2011 9:24 am
by opk44
Andrey_A_A wrote:...вверх также не смог подобрать нужные цифры вместо 00200001...
...малость потестировал.
Вот так не работает:
Code: Select all
Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\n", 0x00900000);'`) Icon(0)
Зато вот так работает:
Code: Select all
Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\r", 0x00900000);'`) Icon(0)
Вывод: замените в вызове "\n" на "\r".
Posted: Sat Sep 24, 2011 6:58 pm
by VladSh
Andrey_A_A, opk44
Пользование UI-фишками - плохой стиль, апотому делал по привычке. Но здесь, для переброски курсора (а это и есть UI-фишка), можно и так.
Posted: Sat Sep 24, 2011 7:48 pm
by Andrey_A_A
VladSh
Пользование UI-фишками - плохой стиль
Что есть UI-фишки? поподробнее, не понял... на будущее ...
Posted: Sun Sep 25, 2011 1:31 pm
by VladSh
Andrey_A_A
UI - user interface.
В прогах обычно) есть код, работающий в формах, диалогах и т.п., а есть бэкграундный функционал, т.е. тот, который работает независимо от UI.
Так вот лучше всего, чтобы в бэкграундный был выделен код по максимуму, тогда при изменении форм и т.п. много переписывать не придётся.
Одна из болезней - смешивание UI и BE функционала. Болезнь^2 - это ещё и смешивание кода с данными.
Posted: Sun Sep 25, 2011 2:07 pm
by Andrey_A_A
VladSh
Если честно я многое не понял о чём ты написал. Не в укор тебе и многим, кто тебя понял. Я не программист, учусь на примерах. Для меня, и других юзеров, есть одно понятие - работает или нет. Зачем же самим создавать такие примеры, которые ведут к тому, что ты описал, если бы не скрипт EvalCmd.js мне бы в голову не пришло "обрезать углы" . До сих пор не знаю что такое UI и BE , единственное, просьба, дать ссылку на прочитку, что такое хорошо и что такое плохо