Scripts plugin

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

Post by [Yustas.NeO] »

AkelPad.GetSelStart вместо начала выделения возвращает ближайшую к началу текста границу выделения, аналогично AkelPad.GetSelEnd вместо конца выделения возвращает ближайшую к концу границу выделения.
Получается что, например, невозможно верно восстановить выделение!

Уточняю:
Ставим курсор на позицию 2:1, нажимаем Shift+Left.
AkelPad.GetSelStart возвращает 0, а должон 1;
AkelPad.GetSelEnd возвращает 1, а должон 0.

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

Post by Infocatcher »

Я что-то упустил, или скрипт не может добавить плагин в автозагрузку?
То есть Call() есть, а аналог +Call() что-то не наблюдается.

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

Post by FeyFre »

Я что-то упустил, или скрипт не может добавить плагин в автозагрузку?
То есть Call() есть, а аналог +Call() что-то не наблюдается.
Oo А он когда-то мог. Плагин в автозагрузке - это настройка редактора. А настройки редактора по моему ни один плагин знать и влиять не может.

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

Post by VladSh »

Instructor wrote:

Code: Select all

/// Запуск открытого на редактирование скрипта...
Спасибо за код!

Но есть ещё одна неприятная вещь - при ошибке в вызываемом с помощью eval(AkelPad.ReadFile(...)) скрипте, сообщается об ошибке на строке вызова, а хотелось бы чтобы определялась строка ошибки в подключаемом файле, а в идеале - его открытие и установка курсора на этой строке.


ReplaceSet усовершенствовали - здорово!
Вот ещё несколько предложений по унификации некоторых функций.

1. SaveFile:

Code: Select all

AkelPad.ReadFile(pFile[, nFlags][, nCodePage][, bBOM]);
OpenFile(pFile[, nFlags][, nCodePage][, bBOM]);

SaveFile(hHandle, pFile, nCodePage, bBOM[, nFlags]);
а). Сделать параметры nCodePage и bBOM необязательными, т.к. всё равно чаще всего приходится делать:

Code: Select all

AkelPad.SaveFile(hWndEdit, pMenuFile, AkelPad.GetEditCodePage(hWndEdit), AkelPad.GetEditBOM(hWndEdit));
б). У последней для однообразия лучше поменять параметры местами, т.е.

Code: Select all

SaveFile(hHandle, pFile[, nFlags][, nCodePage][, bBOM]);
2. GetEditFile:
Сейчас метод возвращает только имя файла текущей вкладки, т.е.

Code: Select all

var pEditFile = AkelPad.GetEditFile(0);
Предлагаю всё-таки сделать, чтобы GetEditFile возвращала массив наименований файлов либо структуру [hEditWnd, pFileName], тогда можно было бы находить нужный хэндл и реализовать метод передачи фокуса без OpenFile (с проблемами мы уже столкнулись), по хэндлу.


3. InputBox: (отредактировано с учётом комментов Infocatcher и FeyFre)
Для однообразия поменять местами pCaption, pText, как это сделано у MessageBox и в оригинальном InputBox:

Code: Select all

MessageBox(hHandle, pText, pCaption, nType);
InputBox(hHandle, pCaption, pLabel, pEdit);
4. Получение текста:
а). Всё-таки добавить метод, который если есть выделение, то работает как GetSelText, а если нет - получает весь текст. Для ленивых ))
б). Т.к. есть функции, позволяющие вернуть индексы, то иногда хотелось бы получить текст без его выделения, по индексам...


5. TextFind:
Баг: когда файл открыт на экране и уже что-то было найдено с помощью "0x00000001 //FR_DOWN Найти вниз.", то флаг "0x00200000 //FR_BEGINNING Поиск с начала (использование: FR_DOWN|FR_BEGINNING)." не ищет с начала, а продолжает искать как-то непонятно... Приходится перед каждым новым поиском делать SetSel(0, 0).
Примечание: вопрос снимается, т.к. флаг на самом деле 0x00200001.


6. TextReplace:
VladSh wrote:следующие параметры можно было бы сделать опциональными:
а). DWORD dwFlags
- если есть выделенный текст, то значение по умолчанию FR_DOWN|FR_SELECTION
- если нет - FR_DOWN|FR_BEGINNING
б). BOOL bAll
значение по умолчанию true
7. SetSel:
VladSh wrote:1. В методе SetSel 2-й параметр сделать необязательным для простой установки курсора

EDITED: в Hotkeys-плагине добавил вызов скрипта, да назвал скрипт неверно (случайно добавил -OLD в конец, т.е. получилось MyScript.js-OLD), потом при вызове выдалось сообщение с красным крестом:
Scripts плагин wrote:---------------------------
Сервер сценариев не найден.
---------------------------
ОК
---------------------------
Можно ли отркорректировать сообщение в более понятное, а то я долго маялся, не понимая что произошло...
Last edited by VladSh on Mon Jul 26, 2010 9:42 am, edited 5 times in total.

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

Post by Infocatcher »

VladSh wrote:Для однообразия поменять местами pText, pCaption, как это сделано у InputBox:
Это плохо для обратной совместимости.
Всё-таки добавить метод, который если есть выделение, то работает как GetSelText, а если нет - получает весь текст. Для ленивых ))
Лучше добавить GetAllText какой-нибудь. А за логику пусть скрипты сами отвечают.

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

Post by KDJ »

Instructor
When it is enabled "SmartSel::NoSelEOL", using the method AkelPad.SetSel() can not select the EOL.
I have a request.
Does in the method AkelPad.SetSel (nSelStart, nSelEnd) you can add optional argument, eg IgnoreNoSelEOL.

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

Post by VladSh »

Infocatcher wrote:Это плохо для обратной совместимости.
Да, я это понимаю.. но ради унификации готов переделать все свои скрипты.
Просто потом будет легче...
Лучше добавить GetAllText какой-нибудь. А за логику пусть скрипты сами отвечают.
Точно!
Правда у меня это был GetText :D

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

Post by FeyFre »

3. MessageBox:
Для однообразия поменять местами pText, pCaption, как это сделано у InputBox:
Менять не нужно. Это дело привычки. Вам было удобно когда я шаблоны к Templates положил не там где Вы ожидали? Нет. Я даю гарантию, никому не будет удобно если сменят
MessageBox(hHandle, pText, pCaption, nType)
на
MessageBox(hHandle, pCaption, pText, nType)
никто не будет рад. Эта форма продержалась больше 18 лет, и продержится ещё столько же.

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

Post by VladSh »

FeyFre
Ага, теперь я понял о чём говорил Infocatcher!
Свою неправоту осознал.. Спасибо за качественную аргументацию!

Кстати, зашёл в доку глянуть, это, оказывается, у InputBox'а надо эти же параметры менять местами!

Code: Select all

InputBox[$] ( prompt [ , [ title ] [ , [ default ] [ , xpos , ypos ] ] ] )
Сейчас в предложениях выше поменяю наоборот.

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

Post by FeyFre »

Спасибо за качественную аргументацию!
В данном случае я конкретного аргумента не привел, а именно: прототип этого MessageBox - системный вызов MessageBox из WIN32 API. И аргументы именно в этом порядке. И существует он со времён Windows NT 3.1 (релиз 1993 года). Вот вам и 18 лет. Такие привычки люди так просто не меняют(пусть даже и виртуальные).

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

Post by VladSh »

FeyFre
Это и есть самый главный аргумент :) Было бы глупо сделать НЕ так, как у всех.

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

Post by [Yustas.NeO] »

VladSh wrote:7. SetSel:
VladSh wrote:1. В методе SetSel 2-й параметр сделать необязательным для простой установки курсора
SetSel(variable1, variable1) не подойдет? :oops:
Или это изменение - для пущей элегантности?

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

http://www.script-coding.info/WSH.html
справка по WSH, причем есть и в CHM формате. Полезная вещь.

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

Post by VladSh »

[Yustas.NeO] wrote:SetSel(variable1, variable1) не подойдет?
Или это изменение - для пущей элегантности?
Там ребята предлагали похожие варианты...

Да, для элегантности. И для логики:
- SetSel(nStart, nEnd) - установить выделение;
- SetSel(n) - просто установить курсор в нужную позицию.

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

Post by KDJ »

I have a question, maybe someone knows how to do it.
How to read, and then set the vertical selection?
Post Reply