Scripts discussion (2)

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

Post by FeyFre »

Обновил History.js - горячие клавиши: возврат псоследнего и всех закрытых документов.

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

Post by KDJ »

FeyFre
History.js
1. You can change the color of the selected item when focus is in another window.
2. You have to do setting to change the hotkeys.

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

Post by FeyFre »

KDJ
1. List is ordinary LISTBOX, and selection remains active even when AkelPad is inactive. I don't think I can set different behaviour here.
2. See v0.4. Sorry for GUI-less, but that is all I can do now.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

вроде добавили поддержку CSS

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

Post by KDJ »

FeyFre wrote:1. List is ordinary LISTBOX, and selection remains active even when AkelPad is inactive. I don't think I can set different behaviour here.
2. See v0.4. Sorry for GUI-less, but that is all I can do now.
1. May use ListView instead of ListBox.

2. So, to change shortcut keys on Alt+T and Shift+Ctrl+Alt+T, I have to write in the file History.ini:
HK_RT=1108
HK_RA=1876

Calculation for Shift+Ctrl+Alt+T:
((1 | 2 | 4) << 8 ) | 0x54 == 0x0754 == 1876
A little complicated for a normal user.

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

Post by Infocatcher »

se7h wrote:вроде добавили поддержку CSS
Ага, неплохо. Только пробелов не хватает:

Code: Select all

color:#f00!important
jsBeautifier.js
Updated: https://github.com/einars/js-beautify/c ... ca0c85ec65
Added -indentScripts argument.

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

Post by FeyFre »

> 1. May use ListView instead of ListBox.
I shall use ListView if I shall write on C, or on any other language where I have direct access into memory.
ListView as ListBox does not have any shortcuts to tune drawing of items.
> 2. So, to change shortcut keys on
To use Calc.exe it is not so complicated.
((1 | 2 | 4) << 8 ) | 0x54 == 0x0754 == 1876
is equal to
(1+2+4)*256+84 = 1876
If to take into account this operation is singular(i.e user will tune hotkeys once in life, not once per hour) - don't see any problems.

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

Post by VladSh »

Коллеги, подскажите.
Надо взять содержимое файла следующей от текущей вкладки. Желательно не переключаться в следующую вкладку, но не суть важно.

Ещё вопрос: можно ли использовать для чтения настроек AkelPad'а oSet?

Просьба помочь: пытаюсь взять из настроек редактора расширение для сохранения "по умолчанию":

Code: Select all

var pDefaultExt = AkelPad.SendMessage(AkelPad.GetMainWnd(), 1222 /*AKD_GETMAININFO*/, 224 /*MI_DEFAULTSAVEEXT*/, 0)
но оно возвращает не расширение, а 4.. В чём тут собака порылась?)

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

Post by FeyFre »

VladSh
но оно возвращает не расширение, а 4.. В чём тут собака порылась?)
Собакак порылась в том что АР не выдаст нагора указатели на память которую он использует. В целях безопасности(что-бы никто туда не нагадил).
В данному случае в качестве lParam(4 аргумент) нужно дать адрес памяти, куда записать значение, а возвращает оно количество символов записаных.
Если вызвали с 0 параметром, оно скажет сктолько нужно нужно _TCHAR-ов памяти(включая завершающий ноль).
Если вызвали с адресом буфера - запишет туда, и вернет количество _TCHAR-ов, но уже без нуля.

oSet - нельзя. Даже для чтения настроек плагинов нельзя. АР читает свои настройки немножко по другому алгоритму, даже чем настройки плагинов.
Надо взять содержимое файла следующей от текущей вкладки.
сообщение AKD_FRAMEFIND возвращает структуру FRAMEDATA в которой встроена структура EDITINFO, в которой есть поле типа AEHDOC которое по сути идентифицирует открытый документ во вкладке. Пошаманить вокруг этого, возможно что-то и достанете.

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

Post by Instructor »

FeyFre
History.js

Code: Select all

AkelPad.WindowSubClass(lb_hist, ListSubClass)
Снова не указан фильтр сообщений.

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

Post by FeyFre »

Instructor
Поправил, но это не спасает от этого http://staynormal.org.ua/akelpad/shadow.png

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

Post by Instructor »

FeyFre
1.

Code: Select all

g_hDockWnd = CreateWindowEx(0,DOCKCLASSNAME,DOCKCLASSNAME,WS_VISIBLE|WS_CHILD
->

Code: Select all

g_hDockWnd = CreateWindowEx(0,DOCKCLASSNAME,DOCKCLASSNAME,/*WS_VISIBLE|*/WS_CHILD
2.

Code: Select all

ShowWindow(g_hDockWnd,SW_SHOW);
->

Code: Select all

//ShowWindow(g_hDockWnd,SW_SHOW);
3.

Code: Select all

AkelPad.SendMessage(g_hAkelPad, AKD_DOCK, DK_SHOW, g_pDock);
AkelPad.SendMessage(g_hAkelPad, AKD_RESIZE, 0, 0);
->

Code: Select all

AkelPad.SendMessage(g_hAkelPad, AKD_DOCK, DK_SHOW, g_pDock);
//AkelPad.SendMessage(g_hAkelPad, AKD_RESIZE, 0, 0);
4.

Code: Select all

MoveWindow(st_fr, pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_EXIT);
MoveWindow(btn_exit, pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_HIST);
MoveWindow(lb_hist , pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_HKT);
MoveWindow(hk_t, pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_HKA);
MoveWindow(hk_a, pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_HKBT);
MoveWindow(hkbt, pos.x, pos.y, pos.w, pos.h, 1);
pos = GetControlPos(_W,_H,IDC_HKBA);
MoveWindow(hkba, pos.x, pos.y, pos.w, pos.h, 1);
->

Code: Select all

MoveWindow(st_fr, pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_EXIT);
MoveWindow(btn_exit, pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_HIST);
MoveWindow(lb_hist , pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_HKT);
MoveWindow(hk_t, pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_HKA);
MoveWindow(hk_a, pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_HKBT);
MoveWindow(hkbt, pos.x, pos.y, pos.w, pos.h, 0);
pos = GetControlPos(_W,_H,IDC_HKBA);
MoveWindow(hkba, pos.x, pos.y, pos.w, pos.h, 0);
5.

Code: Select all

function MoveWindow(hwnd,x,y,w,h)
{
   oSys.Call("user32::MoveWindow",hwnd,x,y,w,h);
}
->

Code: Select all

function MoveWindow(hwnd,x,y,w,h,repaint)
{
   oSys.Call("user32::MoveWindow",hwnd,x,y,w,h,repaint);
}

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

Post by FeyFre »

1. 2. 3. 4.
Сделал. Исправилось. Вот только вспомнить почему я его изначально делал.
4.
Оо Фигасе втыканул. И чего же оно не падало?

В любом случае 0.5.2 готова

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

Post by VladSh »

Изменился CommonFunctions.js:
• исправлено сохранение файла без расширения, для нового файла, когда оно не смогло быть определено из первой строки или выделения;
• код переделан на использование "расширения по умолчанию" из настроек программы (раньше жёстко задавалось в скрипте);
• мелкие унификации (старался ничего не поломать..))).
Благодарности: FeyFre.

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

Post by VladSh »

FeyFre wrote:
Надо взять содержимое файла следующей от текущей вкладки.
сообщение AKD_FRAMEFIND возвращает структуру FRAMEDATA в которой встроена структура EDITINFO, в которой есть поле типа AEHDOC которое по сути идентифицирует открытый документ во вкладке. Пошаманить вокруг этого, возможно что-то и достанете.
Понимаю, что это наверное правильно, но, думаю, сейчас не подниму, потому пошёл по пути, который проще:

Code: Select all

AkelPad.Command(4316/*IDM_WINDOW_FRAMENEXT*/);
Только одно НО: когда открыто всего 2 вкладки, то надо брать всегда именно первый открытый файл, а потом 2-й, не зависимо какая вкладка сейчас текущая. Т.е. надо знать, когда переключаться на 1-ю вкладку (когда стоим на 2-й) и когда не нужно (когда стоим на 1-й). Как это определить, на какой по номеру вкладке стою?

Upd: вопрос снимается; ответ:

Code: Select all

var hWndMain = AkelPad.GetMainWnd();
var lpFrameCur = AkelPad.SendMessage(hWndMain, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0) | 0; 
var nFrameIndex = AkelPad.SendMessage(hWndMain, 1294 /*AKD_FRAMEINDEX*/, 0, lpFrameCur);
Locked