AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (2)
Goto page Previous  1, 2, 3 ... 59, 60, 61 ... 94, 95, 96  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
KDJ



Joined: 06 Mar 2010
Posts: 1326
Location: Poland

PostPosted: Sat Nov 24, 2012 9:14 pm    Post subject: Reply with quote

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
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1326
Location: Poland

PostPosted: Sun Nov 25, 2012 6:18 pm    Post subject: Reply with quote

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:
Code:
a
b
c
d


If ByteOffset is 8, what is the value of RichOffset?
Back to top
View user's profile Send private message
KDJ



Joined: 06 Mar 2010
Posts: 1326
Location: Poland

PostPosted: Mon Nov 26, 2012 7:58 pm    Post subject: Reply with quote

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
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 831
Location: Kyiv, Ukraine

PostPosted: Mon Nov 26, 2012 8:22 pm    Post subject: Reply with quote

Обновил RunMe.js.
Что нового:
- расширения файлов сравниваются регистро-независимо;
- добавлен Python и Free Pascal (предполагается, что при установке они зарегистрировались в системе - иначе в файле RunMe.js нужно указать к ним полный путь);
- добавлен внешний вызов Call("Scripts::Main", 1, "RunMe.js", "1"), позволяющий изменить строку запуска - например, добавить какие-то параметры. Изменённая строка запуска сохраняется для последующего использования.
Вот такие вот пироги с котятами Smile
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2602
Location: Киев, Русь

PostPosted: Thu Nov 29, 2012 12:06 pm    Post subject: Reply with quote

DV
Вопрос по Вашему скрипту.
Лучше бы сделать задание параметров в обычном ini-файле:
Code:
ext=parameters
а уже внутри скрипта считывать их в oCommands, чтобы пользователи не переколбашивали скрипт или не делали себе копий...
А так параметры ini-файла по опыту пользователей постепенно бы добавлялись (можно вести его там же, рядом со скриптом, чтобы каждый мог выбрать те строки, что ему подходят).
Back to top
View user's profile Send private message Visit poster's website
DV



Joined: 16 Nov 2006
Posts: 831
Location: Kyiv, Ukraine

PostPosted: Thu Nov 29, 2012 12:22 pm    Post subject: Reply with quote

В 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
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2602
Location: Киев, Русь

PostPosted: Thu Nov 29, 2012 12:39 pm    Post subject: Reply with quote

Просто хотел как бы поудобнее. Карячить скрипт, по моему, плохая идея. Тогда уж ограничить задачи скрипта компиляцией (у Infocatcher'а есть прекрасный скрипт для запуска обычных прог), и для каждого колбасить отдельные файлы. Можно даже в тех же ini задавать частоиспользуемые списки параметров и выводить их в диалоге либо меню для выбора. А используемый тэг-компитятор-ini-файл задавать в параметрах запуска скрипта. Это было бы удобно.
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1326
Location: Poland

PostPosted: Fri Nov 30, 2012 9:51 pm    Post subject: Reply with quote

FindFiles.js
Bugs fixed:
- detection of binary files,
- selection of text in a file opened by double click.
Back to top
View user's profile Send private message
Lenchik



Joined: 10 Jan 2011
Posts: 230

PostPosted: Sat Dec 01, 2012 6:21 pm    Post subject: Reply with quote

Хотелось бы скрипт, вставляющий дату в формате 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
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1326
Location: Poland

PostPosted: Sun Dec 02, 2012 5:56 pm    Post subject: Reply with quote

FindFiles.js
Added: ability to limit the size of files to search.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1600

PostPosted: Mon Dec 03, 2012 7:12 am    Post subject: Reply with quote

Lenchik wrote:
Хотелось бы скрипт, вставляющий дату в формате RFC822 (только с четырёхциферной записью года).

Как-то так:
insertDateTemplateExample.js
Add <timezone> placeholder

И заодно:
unixTime.js
Correctly show timezones with minutes
Back to top
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Tue Dec 04, 2012 9:00 am    Post subject: Reply with quote

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
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Tue Dec 04, 2012 9:01 am    Post subject: Reply with quote

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
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 831
Location: Kyiv, Ukraine

PostPosted: Tue Dec 04, 2012 10:02 am    Post subject: Reply with quote

booleg,
Вызов ":run_pas(\"%f\")" должен использовать параметр %f, чтобы передать полный путь к файлу, а не только имя и расширение.
В качестве cmd2 (внутри function run_pas(filePathName)) можно попробовать
"rundll32.exe shell32,ShellExec_RunDLL \"%d\%n.%e\"". Не бойтесь проявлять фантазию Smile
Back to top
View user's profile Send private message
booleg



Joined: 07 Mar 2012
Posts: 20

PostPosted: Tue Dec 04, 2012 12:09 pm    Post subject: Reply with quote

DV wrote:
booleg,
В качестве cmd2 (внутри function run_pas(filePathName)) можно попробовать
"rundll32.exe shell32,ShellExec_RunDLL \"%d\%n.%e\"". Не бойтесь проявлять фантазию Smile


Так как скрипты никогда не писал, то именно фантазия и интуиция меня и направляет Smile
Такой вариант я пробовал раньше. Компилировал отдельно, а запускал так:
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
View user's profile Send private message
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 59, 60, 61 ... 94, 95, 96  Next
Page 60 of 96

 
Jump to:  
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


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group