Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Набрел на полезную страничку: http://en.wikipedia.org/wiki/Conversion_of_units
А ошибки по-прежнему не исключаются. :)
measuresConverter.js

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

Post by se7h »

Infocatcher
toggleComments.js при встрече с файлом "view.html.php" уверен, что это html-файл, хотя очевидно, что это php

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

Post by Infocatcher »

se7h
А для view.php будет то же самое.
Там идет

Code: Select all

if(commentsMultipleEnabled)
	commentsSets.php = commentsSets.html;
и дальше проверяется наличие <? и ?> вокруг комментируемого.


measuresConverter.js
Fixed switch between source and target measure, now there are two separate commands for text fields and for measures.

AESCrypt.js (released test version)

converter.js
Added preview option.
Compact dialog window.
Simplified logic of arguments handling. You should use -dialog=false to don't show dialog.

getHash.js
Simplified logic of arguments handling.

goToLongestLine.js (released test version)

openFileIn.js (released test version)
Added support for openFileIn-options.js file.

toggleComments.js (released test version)

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

Post by Instructor »

Infocatcher

converter.js

Code: Select all

var xPos = lParam & 0xFFFF;         //GET_X_LPARAM(lParam) => (int)(short)LOWORD(lParam)
var yPos = (lParam >> 16) & 0xFFFF; //GET_Y_LPARAM(lParam) => (int)(short)HIWORD(lParam)
Здесь лучше GetCursorPos, иначе, если диалог находится на втором мониторе, то меню появится на первом. Еще не учитывается контекстное меню с клавиатуры lParam в этом случае равен -1.

И вместо EM_GETSELTEXT оптимальнее будет AEM_GETSEL с нулями в WPARAM и LPARAM, т.к. EM_GETSELTEXT вычисляет размер выделенной области. Правда в этом случае это не особо важно.

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

Post by Infocatcher »

Instructor
Экие хитрости.
HexSel.c:

Code: Select all

  if (!bMouse)
  {
    SendMessage(hWnd, AEM_GETCARETPOS, (WPARAM)&pt, 0);
    pt.y+=(int)SendMessage(hWnd, AEM_GETCHARSIZE, AECS_HEIGHT, 0);
    ClientToScreen(hWnd, &pt);
  }
  else GetCursorPos(&pt);
Не понятно, что делать с AEM_GETCHARSIZE, это же нестандартное сообщение. И тут тоже не особо понятно.
Понятно только, что надо через GetObject() получить LOGFONT.
А без высоты каретки

Code: Select all

var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
if(!lpPoint)
	break;
var xPos = 0;
var yPos = 0;
if(lParam == -1) { // Context menu from keyboard
	if(oSys.Call("user32::GetCaretPos", lpPoint)) {
		oSys.Call("user32::ClientToScreen", hWndOutput, lpPoint);
		xPos = AkelPad.MemRead(lpPoint,     3 /*DT_DWORD*/);
		yPos = AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
	}
	//yPos += caretHeight;
}
else if(oSys.Call("user32::GetCursorPos", lpPoint)) {
	xPos = AkelPad.MemRead(lpPoint,     3 /*DT_DWORD*/);
	yPos = AkelPad.MemRead(lpPoint + 4, 3 /*DT_DWORD*/);
}
AkelPad.MemFree(lpPoint);
.

Кстати, а
var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/, true);
уже выпилили?
Когда-то давно в случаях с

Code: Select all

AkelPad.SendMessage(hWndEdit, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);
без него иногда падало.
Правда в этом случае это не особо важно.
А когда важно?

P.S. Да, про ShowStandartViewMenu(): http://multitran.ru/c/m.exe?s=Standart и http://multitran.ru/c/m.exe?s=Standard.

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

Post by KDJ »

Infocatcher
In the script measuresConverter.js, I suggest to add in the section of currency:
1. Column containing the currency codes (in listbox).
2. Sort listbox by currency name or by currency code.
3. Button to load the current exchange rate.

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

Post by Infocatcher »

KDJ
http://msdn.microsoft.com/en-us/library ... ULTICOLUMN
A list box with the LBS_MULTICOLUMN style cannot scroll vertically—it ignores any WM_VSCROLL messages it receives.
I not sure about multicolumn listbox. :?
3. Button to load the current exchange rate.
Now there are two hotkeys:
F5 – update
Ctrl+F5 or Shift+F5 – force update (ignore last update time and -offlineExpire argument)
But update process lock dialog window and AkelPad. Asynchronous requests should be better, of course, but needed more code... :)

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

Post by KDJ »

Infocatcher wrote:I not sure about multicolumn listbox. :?
It can be done a list view instead of listbox.

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

Post by Instructor »

Infocatcher
Не понятно, что делать с AEM_GETCHARSIZE, это же нестандартное сообщение.
Создание RichEdit20 в среде AkelPad'а равнозначно созданию AkelEdit окна с именем класса RichEdit20.
уже выпилили?
Да, второй параметр не обрабатывается, после того как Scripts.dll перестал быть ActiveX.
А когда важно?
Когда предполагается работа с большими объемами текста. Хотя и тут возможно кто-нибудь захочет конвертануть 100Мб текста, а потом скопировать все кроме первой строки :)
P.S.
Для внутреннего кода можно :)

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

Post by Infocatcher »

Instructor wrote:Создание RichEdit20 в среде AkelPad'а равнозначно созданию AkelEdit окна с именем класса RichEdit20.
А я что-то поздно решил проверить. И как-то проглядел
AEM_GETSEL с нулями в WPARAM и LPARAM
:)
Обновил: converter.js
Instructor wrote:Хотя и тут возможно кто-нибудь захочет конвертануть 100Мб текста, а потом скопировать все кроме первой строки :)
Не догнал.

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

Post by Infocatcher »

.vbs:

Code: Select all

dim oSys
oSys = AkelPad.SystemFunction

Code: Select all

Строка:	2
Символ:	1
Ошибка:	Объект не поддерживает это свойство или метод
Код:	800A01B6

Code: Select all

dim x
x = _TCHAR

Code: Select all

Строка:	2
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408

Code: Select all

dim _x

Code: Select all

Строка:	1
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408
А идея была – сделать универсальный скрипт для запуска скриптов. Если файл лежит в папке скриптов, то AkelPad.Call("Scripts::Main", 1, fileName), иначе – eval().
При этом для несохраненных файлов сложно определить, js это или vbs, но можно попробовать выполнить как js, а в случае ошибки – как vbs. И если выполнение как vbs не вызвало ошибок, то хотелось бы не показывать ошибку js (с этим как раз и сложность).
То есть vbs-скрипт должен как-то сообщить, что все успешно, а js-скрипт – прочитать это сообщение.
(Я думал создавать окно, а в vbs его закрывать, отсюда и oSys с _TCHAR.)

Пока вот так:

Code: Select all

// Execute script from AkelFiles\Plugs\Scripts\ directory or just eval() selected or all code

var filePath = AkelPad.GetEditFile(0);
if(filePath == WScript.ScriptFullName)
	WScript.Quit();
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(fso.GetParentFolderName(filePath) == AkelPad.GetAkelDir(5 /*ADTYPE_SCRIPTS*/))
	AkelPad.Call("Scripts::Main", 1, fso.GetFileName(filePath));
else {
	var ext = /\.([^.]+)$/.test(filePath) ? RegExp.$1 : "";
	var isVbs = /^(bas|vb[s5]?|wbt|frm)$/.test(ext);
	if(!isVbs) try {
		eval(AkelPad.GetSelText() || AkelPad.GetTextRange(0, -1));
		WScript.Quit();
	}
	catch(e) {
		var err = e;
	}
	AkelPad.Call("Scripts::Main", 1, WScript.ScriptName.replace(/\.[^.]+$/, "") + ".vbs");
	if(err)
		throw err;
}

Code: Select all

if AkelPad.GetSelStart = AkelPad.GetSelEnd then
	execute AkelPad.GetTextRange(0, -1)
else
	execute AkelPad.GetSelText
end if

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Infocatcher wrote:.vbs:

Code: Select all

dim x
x = _TCHAR

Code: Select all

Строка:	2
Символ:	6
Ошибка:	Недопустимый  знак
Код:	800A0408
По большому счету, проблема не новая.
О причинах см. например "...\AkelFiles\Docs\Scripts-Rus.txt":

Code: Select all

стр. 1409: Пример (VBScript):
...
стр. 1417:  'VBScript deny names start with (_) underscope
...
Хотя, исходя из этого, странно, что были намеренно выбраны именно такие имена. Видимо чтобы добавить проблем "vbs-никам" :).

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

Post by FeyFre »

Хотя, исходя из этого, странно, что были намеренно выбраны именно такие имена. Видимо чтобы добавить проблем "vbs-никам" :)
Уверяю Вас, такие имена были выбраны, потому что так удобно и привычно С-шникам, и такие имена позволяет ScriptEngine

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

Post by VladSh »

Infocatcher
> runScript.js...
Чувствую, что что-то полезное.. Какова область применения? Можно ли какой-нибудь пример использования?

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

Post by Infocatcher »

VladSh
Назначить хоткей и быстро запускать редактируемый скрипт.
Или есть скрипт, но лень его сохранять (вдруг не очень полезный :)) – можно быстро посмотреть.

Разве что для запуска скриптов, правящих текст, не очень подходит. Но тут особо ничего не сделать. Тут бы подошел ввод аргументов в окне со скриптами.
Или можно предусмотреть вызов runScript.js с параметрами – чтобы можно было имя скрипта передать*. Но тогда все же придется на время тестирования сделать новый хоткей/кнопку/пункт меню.

*Сделал, обновил: runScript.js.
Last edited by Infocatcher on Fri Mar 04, 2011 7:40 pm, edited 1 time in total.
Locked