Scripts discussion (1)

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

Post by VladSh »

Fr0sT
Слишком длинно получается.
И большие буквы в заглавии переменных ухудшают читабельность кода. Да и символ подчёркивания тоже.. лучше его использовать в исключительных случаях; у меня есть свои стандарты (это старый стандарт, раздел 3) наименований, где подчёркивания использовались, но я теперь ухожу от этого.
Last edited by VladSh on Sat Aug 07, 2010 10:05 am, edited 1 time in total.

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

Post by KDJ »

Check the new script InsertText.js.
I used in this script functions from the script LinesFilter.js written by Instructor.

Offline
Posts: 120
Joined: Sat Jan 12, 2008 10:16 am
Location: Shantou, China

Post by cnnnc »

KDJ wrote:Check the new script InsertText.js.
Method Insert("text", [Esc-sequences]) in ContextMenu, ToolBar and HotKey plugins will do most same job, and it even support Esc-sequences, but InsertText.js not( Now).

Instructor, I think it will be more welcome that method Insert have one more argument to call a inputbox for users to input what they like to do.

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

Post by VladSh »

FeyFre wrote:Очень и очень не рекомендовано запрашивать/отправлять данные размером больше машинного слова через WM_COMMAND(как и через многие другие), ибо междупроцессный барьер, и автоматического маршалинга для этого сообщения не выполняется.
Сразу не сообразил..

Во-1, ведь с помощью SendMessage можно вернуть формат даты из настроек? И он будет той же длины, что и дата..
Во-2, я ж и предлагаю для возвращения даты отказаться от WM_COMMAND (273), а использовать 0, т.е:

Code: Select all

var pDate = AkelPad.SendMessage(AkelPad.GetMainWnd(), 0, 4183, 0);

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

Post by FeyFre »

Во-1, ведь с помощью SendMessage можно вернуть формат даты из настроек? И он будет той же длины, что и дата..
С помощью SendMessage можно послать сообщение конкретному окну. Т.е. оно сначала станет в системную очередь сообщение, потом в очередь сообщений потока-владельца целевого окна(при этом если сообщение системное - отмаршалятся параметры сообщения если это предусмотренно сообщением), потом усли поток владелец пожелает его обработать то направит его дальше по цепочке, потом сработают туевая хуча хуков которые могут изменить сообщение(сделать код сообщения 0), отбросить его, перенаправить другому окну, и аж потом сообщение попадает в процедуру обработчик, обрабатывается, и результат ползет по похожей цепочке назад.
Во-2, я ж и предлагаю для возвращения даты отказаться от WM_COMMAND (273), а использовать 0, т.е:
Читаем книжку о сообщении номер 0
Читаем книжку о собственных сообщениях

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

Post by VladSh »

FeyFre
Про 0, может, я и не прав. Да и там хренова туча других номеров есть, вот например:

Code: Select all

var nTabStop = AkelPad.SendMessage(AkelPad.GetEditWnd(), 3239 /*AEM_GETTABSTOP*/, 0, 0);		//Number of Spaces in Tabs (take from the program settings)
Здесь главное идея. Сделать можно, было бы желание. В крайнем случае можно использовать последний параметр, который специально зарезервирован для разных целей.

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

Post by KDJ »

cnnnc wrote:
KDJ wrote:Check the new script InsertText.js.
Method Insert("text", [Esc-sequences]) in ContextMenu, ToolBar and HotKey plugins will do most same job, and it even support Esc-sequences, but InsertText.js not( Now).
I completed the script for handling "ESC sequences" (new line and tabulation).

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

Post by Fr0sT »

Влад
Слишком длинно получается.
ну так либо длинные имена, либо шанс пересечься с другими переменными... можешь типа венгерской нотации применить, sclVarName.

Насчет даты: а разве её нельзя получить стандартным путём получения настроек (тут недавно мелькало) через Openini, Loadsection и так далее? Думаю, можно. А дефолтный системный формат берется из GetLocaleFormatSettings, или как-то вроде того функция называется.

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

Post by FeyFre »

Fr0sT
Насчет даты: а разве её нельзя получить стандартным путём получения настроек (тут недавно мелькало) через Openini, Loadsection и так далее?
Нельзя, ибо перечисленное АПИ работает с указанным ini-файлом. В случае АкелПад, ini-файла может и не быть(если настройки хранятся в реестре). Так что, что-бы узнать спросить настройки АкелПад-а нужно их спрашивать у него самого, а не читать с хранилища(настройки в хранилище сбрасываются во время завершения редактора, т.е. если пользователь их менял, то в ini-файле/реестре они ещё не изменились)

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

Post by KDJ »

In the script InsertText.js I added memorization of texts in the registry by using ComboBox.

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

Post by Fr0sT »

Нельзя, ибо перечисленное АПИ работает с указанным ini-файлом. (...) что-бы узнать спросить настройки АкелПад-а нужно их спрашивать у него самого, а не читать с хранилища
Собственно, поэтому я и создавал тему в поддержку добавления единого API для получения настроек.

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

Post by VladSh »

Fr0sT wrote:Насчет даты: а разве её нельзя получить стандартным путём получения настроек (тут недавно мелькало) через Openini, Loadsection и так далее? Думаю, можно. А дефолтный системный формат берется из GetLocaleFormatSettings, или как-то вроде того функция называется.
Ответ здесь:
Fr0sT wrote:2. Да, я смотрел InsertDate, но мне не показалось продуктивным в каждый вызов лога дёргать две системные функции. Так что сделал самое простое, что есть. Иначе код раздуется до сотни строк)
:)

Я собственно не только про дату предлагаю (обработку только даты - было бы бредово...) Это общая идея, т.е. чтобы, например последним параметом командовать как будет работать вызов, как процедура (как сейчас) или как функция, например:

Code: Select all

var bResult = AkelPad.SendMessage(AkelPad.GetMainWnd(), 273 /*WM_COMMAND*/, 4103 /*Диалог открытия файлов*/, 0);
как обычно, работает как процедура - открывает файл.

Code: Select all

var arrFiles = AkelPad.SendMessage(AkelPad.GetMainWnd(), 273 /*WM_COMMAND*/, 4103 /*Диалог открытия файлов*/, 1);
работает как функция - возвращает массив имён выбранных для открытия файлов.
Т.о. в данном примере мы обретаем возможность работать непосредственно с диалогом проги (с предпросмотром...), а значит делать то, что заявлено в описании команды: "Диалог открытия файлов", т.е. выводить диалог.
И так почти все вызовы (где можно возвращать что-то осмысленное).

P.S. Смею напомнить, что раньше во внутренних командах вообще не было понятия Return Value.

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

Post by Fr0sT »

VladSh
Ответ здесь:
Не-е-е, всё-таки есть разница, один раз при инициализации получить формат или дёргать при каждом вызове :-Р
Я собственно не только про дату предлагаю (обработку только даты - было бы бредово...) Это общая идея, т.е. чтобы, например последним параметом командовать как будет работать вызов, как процедура (как сейчас) или как функция, например:
Ууу, это вряд ли. Так небрежно с памятью вообще не стоит обращаться, а уж если предполагается передавать её плагинам или тем паче скриптам... это будет крайне нестабильная конструкция.

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

Post by KDJ »

In the script InsertText.js I added insert text in each of selected lines.

Offline
Posts: 120
Joined: Sat Jan 12, 2008 10:16 am
Location: Shantou, China

Post by cnnnc »

KDJ wrote:In the script InsertText.js I added insert text in each of selected lines.
When InsertText.js do with column selection In each of Selected, the result same as normal selection.

When InsertText.js do with column selection In Selection, the result is diffterent to normal selection.

My NumberCount.js can insert text and/or number to every selected line even column selection. but there are some bugs I unable to fix. :(
Locked