View previous topic :: View next topic |
Author |
Message |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sat Nov 24, 2012 9:14 pm Post subject: |
|
|
FindFiles.js
Changed: double click on file - open file for editing and select the found text (or close file if is currently edited) |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sun Nov 25, 2012 6:18 pm Post subject: |
|
|
Question:
how to get RichOffset from ByteOffset and vice versa?
For example we have the string:
a\r\r\nb\nc\r\nd\r
(\r - carriage return 0x0D,
\n - line feed 0x0A).
This string is displayed as follows:
If ByteOffset is 8, what is the value of RichOffset? |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Mon Nov 26, 2012 7:58 pm Post subject: |
|
|
Answer:
ByteOffsetToRichOffset.js Code: | function ByteOffsetToRichOffset(nByteOffset)
{
var hEditWnd = AkelPad.GetEditWnd();
var lpIndexOffset = AkelPad.MemAlloc(16 /*sizeof(AEINDEXOFFSET)*/);
var lpCharIndex1 = AkelPad.MemAlloc(12 /*sizeof(AECHARINDEX)*/);
var lpCharIndex2 = AkelPad.MemAlloc(12 /*sizeof(AECHARINDEX)*/);
var nRichOffset;
AkelPad.MemCopy(lpIndexOffset, lpCharIndex1, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpIndexOffset + 4, lpCharIndex2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpIndexOffset + 8, nByteOffset, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpIndexOffset + 12, 3 /*AELB_ASIS*/, 3 /*DT_DWORD*/);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 1 /*AEGI_FIRSTCHAR*/, lpCharIndex1);
AkelPad.SendMessage(hEditWnd, 3135 /*AEM_INDEXOFFSET*/, 0, lpIndexOffset);
nRichOffset = AkelPad.SendMessage(hEditWnd, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpCharIndex2);
AkelPad.MemFree(lpIndexOffset);
AkelPad.MemFree(lpCharIndex1);
AkelPad.MemFree(lpCharIndex2);
return nRichOffset;
} |
RichOffsetToByteOffset.js Code: | function RichOffsetToByteOffset(nRichOffset)
{
var hEditWnd = AkelPad.GetEditWnd();
var lpIndexSubtract = AkelPad.MemAlloc(16 /*sizeof(AEINDEXSUBTRACT)*/);
var lpCharIndex1 = AkelPad.MemAlloc(12 /*sizeof(AECHARINDEX)*/);
var lpCharIndex2 = AkelPad.MemAlloc(12 /*sizeof(AECHARINDEX)*/);
var nByteOffset;
AkelPad.MemCopy(lpIndexSubtract, lpCharIndex1, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpIndexSubtract + 4, lpCharIndex2, 3 /*DT_DWORD*/);
AkelPad.MemCopy(lpIndexSubtract + 12, 3 /*AELB_ASIS*/, 3 /*DT_DWORD*/);
AkelPad.SendMessage(hEditWnd, 3130 /*AEM_GETINDEX*/, 1 /*AEGI_FIRSTCHAR*/, lpCharIndex1);
AkelPad.SendMessage(hEditWnd, 3137 /*AEM_RICHOFFSETTOINDEX*/, nRichOffset, lpCharIndex2);
nByteOffset = -AkelPad.SendMessage(hEditWnd, 3134 /*AEM_INDEXSUBTRACT*/, 0, lpIndexSubtract);
AkelPad.MemFree(lpIndexSubtract);
AkelPad.MemFree(lpCharIndex1);
AkelPad.MemFree(lpCharIndex2);
return nByteOffset;
} |
|
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1015 Location: Kyiv, Ukraine
|
Posted: Mon Nov 26, 2012 8:22 pm Post subject: |
|
|
Обновил RunMe.js.
Что нового:
- расширения файлов сравниваются регистро-независимо;
- добавлен Python и Free Pascal (предполагается, что при установке они зарегистрировались в системе - иначе в файле RunMe.js нужно указать к ним полный путь);
- добавлен внешний вызов Call("Scripts::Main", 1, "RunMe.js", "1"), позволяющий изменить строку запуска - например, добавить какие-то параметры. Изменённая строка запуска сохраняется для последующего использования.
Вот такие вот пироги с котятами  |
|
Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 3076 Location: Киев, Русь
|
Posted: Thu Nov 29, 2012 12:06 pm Post subject: |
|
|
DV
Вопрос по Вашему скрипту.
Лучше бы сделать задание параметров в обычном ini-файле:
а уже внутри скрипта считывать их в oCommands, чтобы пользователи не переколбашивали скрипт или не делали себе копий...
А так параметры ini-файла по опыту пользователей постепенно бы добавлялись (можно вести его там же, рядом со скриптом, чтобы каждый мог выбрать те строки, что ему подходят). |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1015 Location: Kyiv, Ukraine
|
Posted: Thu Nov 29, 2012 12:22 pm Post subject: |
|
|
В oCommands задаются не только пары "расширение" : "команда", но и пары "расширение" : ":внутренняя_функция", для которых пишется реализация внутренней функции. Как пример, немаленькая функция run_cpp(filePathName). Сейчас это всё находится в одном файле RunMe.js. Выносить эти вещи в отдельный файл, который затем ещё надо как-то обработать? Не уверен.
P.S.
Благодаря этому вопросу заметил, что сейчас (пока) нет возможности передавать аргументы в тот же run_cpp(). Похоже, надо будет показывать окно запроса командной строки непосредственно перед запуском команды на исполнение, а не для строки из oCommands непосредственно.
P.P.S.
Ответ по поводу Паскаля. Реализация мне представляется похожей на используемую в run_cpp() - конкретнее см. переменные cmd1 и cmd2.
В случае Паскаля это будет выглядеть предположительно так:
Code: | var cmd1 = "fpc.exe \"%f\""; // compile
var cmd2 = "cd \"%d\" && \"%n.exe\""; // current dir = file dir && run .exe
var cmd = "cmd /c" + cmd1 + " && " + cmd2;
cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
runCommand(cmd); // run |
Наличие "&&" между cmd1 и cmd2 - т.е. между компиляцией и запуском файла - предполагает, что в случае ошибки компиляции fpc возвратит код ошибки и следующая часть команды (cmd2) не будет вызвана.
Last edited by DV on Thu Nov 29, 2012 12:40 pm; edited 1 time in total |
|
Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 3076 Location: Киев, Русь
|
Posted: Thu Nov 29, 2012 12:39 pm Post subject: |
|
|
Просто хотел как бы поудобнее. Карячить скрипт, по моему, плохая идея. Тогда уж ограничить задачи скрипта компиляцией (у Infocatcher'а есть прекрасный скрипт для запуска обычных прог), и для каждого колбасить отдельные файлы. Можно даже в тех же ini задавать частоиспользуемые списки параметров и выводить их в диалоге либо меню для выбора. А используемый тэг-компитятор-ini-файл задавать в параметрах запуска скрипта. Это было бы удобно. |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Fri Nov 30, 2012 9:51 pm Post subject: |
|
|
FindFiles.js
Bugs fixed:
- detection of binary files,
- selection of text in a file opened by double click. |
|
Back to top |
|
 |
Lenchik
Joined: 10 Jan 2011 Posts: 366
|
Posted: Sat Dec 01, 2012 6:21 pm Post subject: |
|
|
Хотелось бы скрипт, вставляющий дату в формате RFC822 (только с четырёхциферной записью года). Может быть модификацию стандартного InsertDate или unixTime.
Пока обхожусь insertDateTemplateExample с такими настройками (в итоге часовой пояс прописан жестко вручную):
Code: | -"RFC822 подобие" Call("Scripts::Main", 1, "insertDateTemplateExample.js", `/t=<day>,\s<date>\s<monthName>\s<fullYear>\s<hours>:<minutes>:<seconds>\s+0400 /w=Sun,Mon,Tue,Wed,Thu,Fri,Sat /m=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec`, "", 0) |
А может уже есть на просторах форума готовенькое, а я не нашёл? |
|
Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1929 Location: Poland
|
Posted: Sun Dec 02, 2012 5:56 pm Post subject: |
|
|
FindFiles.js
Added: ability to limit the size of files to search. |
|
Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1767
|
|
Back to top |
|
 |
booleg
Joined: 07 Mar 2012 Posts: 20
|
Posted: Tue Dec 04, 2012 9:00 am Post subject: |
|
|
DV wrote: |
P.P.S.
Ответ по поводу Паскаля. Реализация мне представляется похожей на используемую в run_cpp() - конкретнее см. переменные cmd1 и cmd2.
В случае Паскаля это будет выглядеть предположительно так:
Code: | var cmd1 = "fpc.exe \"%f\""; // compile
var cmd2 = "cd \"%d\" && \"%n.exe\""; // current dir = file dir && run .exe
var cmd = "cmd /c" + cmd1 + " && " + cmd2;
cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
runCommand(cmd); // run |
. |
Попробовал.
1) Если паскалевский файл в корне диска, то получаем следующее сообщение - ""cels1e.exe"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
2) Если паскалевском файле есть операторы ввода данных с клавиатуры, то он компилируется и зависает в процессах без вывода чего либо на экран. |
|
Back to top |
|
 |
booleg
Joined: 07 Mar 2012 Posts: 20
|
Posted: Tue Dec 04, 2012 9:01 am Post subject: |
|
|
DV wrote: |
P.P.S.
Ответ по поводу Паскаля. Реализация мне представляется похожей на используемую в run_cpp() - конкретнее см. переменные cmd1 и cmd2.
В случае Паскаля это будет выглядеть предположительно так:
Code: | var cmd1 = "fpc.exe \"%f\""; // compile
var cmd2 = "cd \"%d\" && \"%n.exe\""; // current dir = file dir && run .exe
var cmd = "cmd /c" + cmd1 + " && " + cmd2;
cmd = prepareCommand(cmd, filePathName); // pre-process %f, %n etc.
runCommand(cmd); // run |
. |
Попробовал.
1) Если паскалевский файл в корне диска, то получаем следующее сообщение - ""cels1e.exe"" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
2) Если паскалевском файле есть операторы ввода данных с клавиатуры, то он компилируется и зависает в процессах без вывода чего либо на экран. |
|
Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 1015 Location: Kyiv, Ukraine
|
Posted: Tue Dec 04, 2012 10:02 am Post subject: |
|
|
booleg,
Вызов ":run_pas(\"%f\")" должен использовать параметр %f, чтобы передать полный путь к файлу, а не только имя и расширение.
В качестве cmd2 (внутри function run_pas(filePathName)) можно попробовать
"rundll32.exe shell32,ShellExec_RunDLL \"%d\%n.%e\"". Не бойтесь проявлять фантазию  |
|
Back to top |
|
 |
booleg
Joined: 07 Mar 2012 Posts: 20
|
Posted: Tue Dec 04, 2012 12:09 pm Post subject: |
|
|
DV wrote: | booleg,
В качестве cmd2 (внутри function run_pas(filePathName)) можно попробовать
"rundll32.exe shell32,ShellExec_RunDLL \"%d\%n.%e\"". Не бойтесь проявлять фантазию  |
Так как скрипты никогда не писал, то именно фантазия и интуиция меня и направляет
Такой вариант я пробовал раньше. Компилировал отдельно, а запускал так:
Code: | "pas PAS Pas" :
":run_Pasfile(\"%d\\%n.exe\")" , |
и
Code: | function run_Pasfile(filePathName)
{
var cmd = "rundll32.exe shell32,ShellExec_RunDLL \"" + filePathName + "\"";
runCommand(cmd, "", 0); // do not capture output
} |
На WinServer2003 - работало, а на Win7(32) нет.
Предполагаю, что Win7 "rundll32.exe shell32,ShellExec_RunDLL" не нравиться. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|