Scripts plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

us-us
Флаги - обычные целые числа(которые в двоичном представлении занимают как правило 1-2 уникальных бита, и не пересекаются этими битами между собой). Потому флаги можно(и принято) комбинировать битовыми операциями (побитовые ИЛИ, И, НЕ) и пр, и соответственно определять их значения в виде более менее удобным для того чтобы человек быстро распознал какой бит установлен, т.е в виде 16-ричного числа, либо двоичного числа. Но они числами не перестают от этого быть. Например:
AkelPad.TextFind(hEditWnd, "text", 0x00000001|0x00200000)
полностью эквивалентно(но не очень понятно и читаемо, правда?)
AkelPad.TextFind(hEditWnd, "text", 1 | 2097152)
или
AkelPad.TextFind(hEditWnd, "text", 2097153)

В языке JavaScript(как и в C/C++) 16-ричные числа представляются в таком виде 0xYYYYYYYY :
0x - префикс, указывающий что дальше идут 16-ричные цифры
YYYYYYYY - сами 16-ричные цифры.
Количество цифр зависит от размера числа в памяти, по две цифры на байт, слева более значащая цифра, справа - менее.
В языках производных от Basic (VBScript, Visual Basic, VB.NET и пр) представление 16-ричных чисел аналогичное, но согласованное с синтаксисом языка: &HYYYYYYYY
&H - префикс 16-ричного числа
YYYYYYYY - 16-ричные цифры
Таким образом 0x12345678 в JavaScript, C/C++ эквивалентно &H12345678 в Basic

Что касается значений-флажков сабжевой функции, которые Вы ищите, то их можно посмотреть в исходниках AkelPad (файл AkelDll.h) либо в исходниках любого из доступных плагинов(в том же файле AkelDll.h)

Offline
Posts: 15
Joined: Mon Feb 28, 2011 11:00 am

Post by us-us »

FeyFre

Восполнил свой пробел.
Благодарю, теперь понятно! :)

Offline
Posts: 15
Joined: Sun Oct 11, 2009 10:51 am

Scripts.dll & DllRegisterServer

Post by oyaebu »

Scripts.dll была загружена, но найти точку входа для DllRegisterServer не удалось. Зарегистрировать этот файл невозможно.

При запуске Scripts-register.bat.

Система Windows XP. Как все-таки исправить ошибку? Не работают скрипты.

Image

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

Post by Infocatcher »

Новые версии плагина больше не требуется регистрировать.

Offline
Posts: 15
Joined: Sun Oct 11, 2009 10:51 am

Post by oyaebu »

Вот оно как. А я думал, мой скрипт не работает из-за того, что плагин не зарегистрирован. Другие даже не проверял. -_-

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

Post by Infocatcher »

Хорошо бы в AkelPad.InputBox() сделать нормальные разделители слов (Ctrl+стрелки сильно фрустрируют :D) и нормальное поведение на влево/вправо при наличии выделения. Вот можно поле для ввода на AkelEdit заменить?

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

Post by Infocatcher »

Странно. Вроде, ничего особо не делал, а

Code: Select all

AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/)
стал возвращать путь со строчной буквы («d:\dir\» вместо «D:\dir\»). После перезапуска исчезло.
Хотелось бы понять, что это было и может ли повториться.

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

Post by Instructor »

Infocatcher wrote:Вот можно поле для ввода на AkelEdit заменить?
В AkelEdit'е не предусмотрено использование стиля "однострочный".
...стал возвращать путь со строчной буквы...
Windows сам решает как вернуть путь для системных вызовов. Но обработка пути должна быть регистронезависимой, т.к. "D:\A.TXT" и "d:\a.txt" равнозначны.

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

Post by Infocatcher »

Instructor wrote:В AkelEdit'е не предусмотрено использование стиля "однострочный".
Тогда или предусмотреть, или реализовать как-то иначе. :D
Instructor wrote:Но обработка пути должна быть регистронезависимой, т.к. "D:\A.TXT" и "d:\a.txt" равнозначны.
Я как-то недоглядел и сделал file и FILE на NTFS из-под Linux, так пришлось потом обратно загружаться, чтобы удалить. :)

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

Post by FeyFre »

Infocatcher
Я как-то недоглядел и сделал file и FILE на NTFS из-под Linux, так пришлось потом обратно загружаться, чтобы удалить.
А chkdsk не помогало? По идее драйвер ФС де ложен был допустить подобного непотребства.
Microsoft честно предупреждает что он в случае чего игнорирует регистр, но тем не менее сохраняет его. И рекомендует пользоваться именами файлов в том регистре, от в котором получили от системы, ибо файловая система может поддерживаться чувствительность(например NFS)

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

Post by Infocatcher »

FeyFre wrote:А chkdsk не помогало?
Я тогда не проверил – сразу вспомнил, как такие файлы могли получиться, и убрал точно так же, как и добавил.
FeyFre wrote:По идее драйвер ФС де ложен был допустить подобного непотребства.
«Официальная» реализация, может, и должна. :)

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

Post by FeyFre »

Infocatcher
Перечитал я тут маны по NTFS и таки вспомнил что там есть два пространства имен: WIN32 - регистронечувствительное(плюс не разрешает некий набор символов) и POSIX - регистрочувствительное(разрешает всё кроме ноль-символа и разделитель структуры в именах). Так что всё норм.

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

Post by VladSh »

По мотивам ... пейшу скрипты, которые будут экспортировать/импортировать настройки, но в oSet.Begin можно указать только "скриптовые" ini'шки.
Можно ли сделать так, чтобы при указании полного пути, он хавался? Т.е. если в первом параметре нет слэша, то значит это "скриптовая" ini, а если есть, то брать полный путь?
Хотел и писал так:

Code: Select all

if (oSet.Begin(AkelPad.GetAkelDir(4) /*ADTYPE_PLUGS*/ + "\\ContextMenu.ini", 0x1 /*POB_READ*/))
P.S. Или так.

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

Post by FeyFre »

VladSh
Попросить то можно. Если нужно настройки только плагинов, то можно воспользоваться напрямую API: AKD_BEGINOPTIONS...

Если ещё и чужих, тот тут либо хитрим с копированием файлов и подобными трюками, либо сами учимся парсить/реестр.

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

Post by VladSh »

FeyFre wrote:Если нужно настройки только плагинов...
Если ещё и чужих...
В идеале хочется, чтобы этот функционал понимал, что:
- если это настройки проги/плагов/скриптов (а это можно определить), то брать в зависимости от того, где хранятся настройки (ini или реестр);
- если это чужое, и если передан полный путь к ini/реестра, то просто читать/писать указанный параметр.
IMHO, всё дело в добавлении функционала "свой-чужой" и, если чужой, то добавлении функционала определения, что это, ini или реестр (для чтения реестра WSH.RegRead пользоваться неудобно, т.к. он при отсуствии параметра генерит ошибку - надо каждый раз ставить обработчик, а тянуть GetObject("winmgmts:...:StdRegProv") в скрипты нецелесообразно).
Тем более, что для этого весь основной функционал в плаге уже есть.


Instructor
Вопросы по ходу:
1. Как обновить ContextMenu.ini? Насколько я понял, то запись в него производится при гашении проги.. т.е. если добавить что-то в "Избранное", а затем сразу же экспортировать (читать ini), то мы получим старое значение FavText. Есть ли какая-нибудь скрытая функция, позволяющая принудительно сбросить данные плага на диск?
2. Как обновить меню? При изменении ContextMenu.ini надо перезагрузить меню, чтобы результат скрипта был виден визуально. Есть ли какая-нибудь скрытая функция..?
Post Reply