Scripts plugin

Discuss and announce AkelPad plugins
Post Reply
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
Оригинально!
Но я ещё вызываю:

Code: Select all

AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4406 /*IDM_NONMENU_MDICLOSE*/, 0);
для закрытия вкладки, ставшей пустой при закрытии файла. В SDI эта команда игнорируется - это хорошо :)

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

Post by Instructor »

Changed: now old script hotkeys erased before saving new ones.

Added: KeybLayoutEngRus.js -convert keyboard layout En->Ru.
Added: KeybLayoutRusEng.js -convert keyboard layout Ru->En.
Added: KeybTranslitEngRus.js -transliteration Latin->Cyrillic.
Added: KeybTranslitRusEng.js -transliteration Cyrillic->Latin.

Fixed: LinesFilter.js worked only with Latin characters (with regular expressions option - off).


Scripts plugin v2.6

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

и всё-таки...

Post by VladSh »

Приветствую!

Всё ещё беспокоит :) идея по истории отсюда.
Корректировал скрипт простановки коментариев и, видимо в проге или в RichEdit-control'е, есть бок (см. последний комент скрипта), что приходится записывать результат двойным ReplaceSel - неудобно отменять команду, т.к. отмена тогда идёт в 2 действия!
Но даже если бы не эта ошибка, всё равно ИМХО управлять записью истории изменений - это хорошая идея.
Вижу 2 вариатна:
1. Выдывать спец. командой (её надо написать :) ) "виртуальное" (невидимое для пользователя) окно и в нём производить все промежуточные изменения, а результат помещать в основное окно редактирования. Но этот вариант некрасив.
2. Смотрел в параметрах проги, там можно устанавливать Undo-лимит "Подробно" или нет, т.е. фактически можно управлять историей изменений!
Можно добавить пару методов в плагин... один из которых вызывается в начале скрипта и отключает запись в историю, а второй вызывается в конце скрипта и включает запись, сразу же сохраняя текущее состояние, тем самым записывая все изменения в одно действие отмены. Мне кажется, что это можно реализовать.

Пользуясь плагином для работы с текстом в окне редактирования возникает потребность в 2-х функциях:
1-я (в начале скрипта), которая бы выполняла:
- ВКЛючение защиты от удержания клавиш (CreateMutex);
- ОТКЛючение прорисовки (SETREDRAW = false);
- ОТКЛючение записи действий в историию изменений (???).

... выполнение скрипта (модификация текста в окне редактирования) ...

2-я (в конце скрипта), которая бы выполняла:
- ОТКЛючение защиты от удержания клавиш (ReleaseMutex);
- ВКЛючение прорисовки (SETREDRAW = true);
- ВКЛючение записи действий в историию изменений и сохранение текущего состояния(???).

Думаю, было бы удобно :!:
:wink:

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

Post by Instructor »

Changed: now OpenFile, ReadFile methods requires only first parameter (other parameters optional).

Added: SaveFile, TextFind, TextReplace, GetEditCodePage, GetEditBOM, GetEditNewLine, GetEditModified methods.


Scripts plugin v2.7

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

Post by VladSh »

Из темы про 3.4.5
Добавлено: многие команды IDM_* теперь возвращают значения после вызова.
Это супер! Вообще много хороших изменений в проге и плагинах с Нового Года; это просто праздник какой-то! :)

Не понял только по IDM_NONMENU_REOPEN_MSG.
Она даёт это сообщение только если файл не редактировался AkelPad'ом.
Если же он параллельно редактируется в блокноте, то AkelPad спокойно это хавает и никаких предупреждений не выводит. А смысл (кто-то в какой-то теме это предлагал - не помню) был именно в этом.
Я думаю, чтобы такое сделать, то нужно при сохранении файла где-то сохранять контрольную сумму содержимого файла и дату изменения. По этим данным можно будет производить анализ.
Изменено: клик по ссылке срабатывает, только если выделение текста отсутствует.
Значит написать обработчик клика по ссылке можно! :)
В некоторых скриптовых файлах вызываются другие файлы с помощью eval и путь с файлом .js также подсвечен. Можно ли сделать так, чтобы при клике на такую подсвеченную "ссылку" этот js-файл открывался бы в AkelPade? Было бы удобно для навигации.
Я хотел написать свой обработчик, но... не получается, т.к. для этого мне нужно получить (скопировать Link(2)) саму ссылку, проанализировать её и выполнить опред действие (Link(1) или своё), но выполнить действия Link(...) из скрипта не получается...

Теперь непосредственно по плагину.

1. Не удалось запустить TextReplace. Этот код не работает:

Code: Select all

var AkelPad = new ActiveXObject("AkelPad.document");
var n;
AkelPad.TextReplace(0x00000001|0x00200000 /*FR_DOWN|FR_BEGINNING*/, "ddd", "bbb", true, n);
2. Ну добавьте пожалуйста-а-а метод вывода диалога файлов/папок (OpenDialog)!!! :))) Не хватает для полного счастья :)
И чтобы можно было опционально настраивать InitialFolder и nFlags.

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

Post by Instructor »

Не понял только по IDM_NONMENU_REOPEN_MSG.
Это сообщение используется функцией "Следить за изменением файла".
Я хотел написать свой обработчик, но... не получается, т.к. для этого мне нужно получить (скопировать Link(2)) саму ссылку, проанализировать её и выполнить опред действие (Link(1) или своё), но выполнить действия Link(...) из скрипта не получается...
Надо писать свой плагин, потому как скрипт не может находится "резидентом" в памяти и реагировать на нажатия мыши.
1. Не удалось запустить TextReplace. Этот код не работает:
Что это за импровизация в параметрах :)
Из readme пока можно вынести тока список доступных методов, поэтому можете посмотреть синтаксис вызова TextReplace в "Scripts.zip\Source\Scripts.idl"

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

Post by VladSh »

Instructor wrote:
Я хотел написать свой обработчик, но... не получается, т.к. для этого мне нужно получить (скопировать Link(2)) саму ссылку, проанализировать её и выполнить опред действие (Link(1) или своё), но выполнить действия Link(...) из скрипта не получается...
Надо писать свой плагин, потому как скрипт не может находится "резидентом" в памяти и реагировать на нажатия мыши.
Я имел ввиду, что в меню ссылок "Open" вместо Link(1) ставлю свой скрипт.
Внутри скрипта:
1. Вызываю "Link(2)" (если бы можно было вызывать её из скрипта), т.е. копирую ссылку.
2. Анализирую, является ли она файлом
- если да, то открываю его на редактирование в AkelPad'е;
- если нет, то вызываю стандартный обработчик ссылки, т.е. "Link(1)" (конечно, если бы можно было вызывать её из скрипта).
Таким образом плагин и прога-резидент не нужны.
Instructor wrote:Что это за импровизация в параметрах :)
Из readme пока можно вынести тока список доступных методов, поэтому можете посмотреть синтаксис вызова TextReplace в "Scripts.zip\Source\Scripts.idl"
Я смотрел в AkelDLL.h описание соотв. структуры :)
Спасибо, теперь буду знать откуда смотреть параметры :D
Кстати, а почему бы *.idl не добавить в какой-нибудь файл подсветки? К какой подсветке он больше подходит?
Last edited by VladSh on Thu Jan 10, 2008 3:11 pm, edited 2 times in total.

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

Post by Instructor »

Кстати, а почему бы *.idl не добавить в какой-нибудь файл подсветки? К какой подсветке он больше подходит?
cpp.highlight

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

Post by VladSh »

спасибо, сделал - стало чуть получше :)


Было бы просто супер иметь в этом плагине метод, типа eval, который бы выполнял "скриптовые" команды из контекстного меню, типа Command(), Link() и т.д... ну и чтобы возвращал значения :)
Было бы проще в пользовании.


По TextReplace - работает зараза! :D
Но IMHO следующие параметры можно было бы сделать опциональными:
а). DWORD dwFlags
- если есть выделенный текст, то значение по умолчинию FR_DOWN|FR_SELECTION
- если нет - FR_DOWN|FR_BEGINNING

б). BOOL bAll
значение по умолчанию true

UPDATED: плохо, что TextReplace не работает с /.../ т.е. с RegExp :( Это сильно снижает возможность его применения.
Разве что вызывать в цикле, что не есть удобно... да и всех вариантов, которые предусматривает RegExp, всё равно циклом не смоделируешь...

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

Post by Instructor »

Added: MemCopy method returns number of bytes copied to the buffer, if buffer is zero returns required number of bytes.

Fixed: DBCS codepages support.


Scripts plugin v2.8

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

Post by VladSh »

Во многих скриптах действие должно выполняться для выделенного текста, а если текст не выделен, то ко всему документу. Т.е. просматривается общая логика.
Есть метод GetSelText, можно ли добавить метод GetText, который бы работал по этой логике:

Code: Select all

Content = AkelPad.GetSelText();

if (Content == '')
{
   AkelPad.SetSel(0, -1);			//Select all text
   Content = AkelPad.GetSelText();
}

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

Post by Instructor »

Changed: AkelPad 3.5.0 required.


Scripts plugin v2.9

Offline
Posts: 3
Joined: Sat Mar 22, 2008 9:49 am

Post by chapeau »

Очень расстраивает, что не работает правильно поиск и замена регулярных выражений (скрипт SearchReplace.js). Это, по-моему, единственная большая фича, которой не хватает программе.

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

Post by Instructor »

chapeau
Поконкретней, что именно не работает?

Offline
Posts: 3
Joined: Sat Mar 22, 2008 9:49 am

Post by chapeau »

Instructor
Текст неправильно ищет. Все эти специальные символы (даже * и ?, не говоря о всяких наворотах) как будто вообще не воспринимаются. Может найти только пару последних символов из поисковой строки, может вообще ничего не найти (хотя найти что-то стопудово должен).

Хм, получается, это у меня у первого такие проблемы?
Post Reply