| View previous topic :: View next topic |
| Author |
Message |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Sun Jan 13, 2013 7:11 pm Post subject: |
|
|
FindReplaceEx.js
Added arguments:
-FR - set "Find/Replace" initial parameters:
-GT - set "Go to" initial parameter:
Changed argument name -DefBut to -RDB. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2509 Location: Киев, Русь
|
Posted: Mon Jan 14, 2013 10:11 am Post subject: |
|
|
| KDJ wrote: | | Changed argument name -DefBut to -RDB. | RDB - Relational DataBase
DefBtn, in my opinion, better. |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Mon Jan 14, 2013 8:13 pm Post subject: |
|
|
VladSh
In this case:
-RDB = "Replace": Default Button.
And I don't want to have to change that. |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Jan 16, 2013 4:24 pm Post subject: |
|
|
Вопрос, косвенно относящийся к скриптам и/или плагину Log...
Если есть внешняя программа, которая в результате своей работы выводит в консоль какое-то имя файла [например, через printf("%s", fileName)], то как в AkelPad потом открыть файл, соответствующий этому имени?
Если делать дубово, то как-то так:
1. выполняем "program.exe >out.txt";
2. читаем первую строчку файла out.txt и открываем в AkelPad файл, имя которого указано в этой строке.
Но можно ли обойтись без промежуточного файла out.txt? |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Jan 16, 2013 4:55 pm Post subject: |
|
|
| DV wrote: | | Если есть внешняя программа, которая в результате своей работы выводит в консоль какое-то имя файла... |
Кажеццо, я уже понял... Можно воспользоваться следующей промежуточной программкой (набросок | Code: |
#include <stdio.h>
#include <stdlib.h>
#define MAX_CMDARGLEN 4096
/******** >>>> tStringPtr functions >>>> ********/
typedef struct sStringPtr {
char* begin;
char* end;
} tStringPtr;
void tStringPtr_Init(tStringPtr* p, char* s)
{
p->begin = s;
p->end = s;
}
void tStringPtr_AppendN(tStringPtr* p, const char* s, int n)
{
if (n > 0)
{
strcpy(p->end, s);
p->end += n;
}
}
void tStringPtr_Append(tStringPtr* p, const char* s)
{
int n = s ? strlen(s) : 0;
tStringPtr_AppendN(p, s, n);
}
int tStringPtr_GetLength(const tStringPtr* p)
{
return (int) (p->end - p->begin);
}
int tStringPtr_IsEmpty(const tStringPtr* p)
{
return ((p->begin == p->end) ? 1 : 0);
}
/******** <<<< tStringPtr functions >>>> ********/
void executeByPassingStdinAsArg(int argc, char* argv[], int quoted);
void executeByPassingArgToStdOut(int argc, char* argv[]);
void printHelp();
int main(int argc, char* argv[])
{
if (argc > 2)
{
switch (argv[1][0])
{
case '1':
executeByPassingStdinAsArg(argc, argv, 0);
break;
case '2':
executeByPassingStdinAsArg(argc, argv, 1);
break;
case '3':
executeByPassingArgToStdOut(argc, argv);
break;
}
}
else
{
printHelp();
}
return 0;
}
int hasSpecialCharacters(const char* param)
{
while (*param)
{
switch (*param)
{
case ' ':
return 1;
}
++param;
}
return 0;
}
void addParam(tStringPtr* p, const char* param)
{
if (!tStringPtr_IsEmpty(p))
{
tStringPtr_AppendN(p, " ", 1);
}
if (hasSpecialCharacters(param))
{
tStringPtr_AppendN(p, "\"", 1);
tStringPtr_Append(p, param);
tStringPtr_AppendN(p, "\"", 1);
}
else
{
tStringPtr_Append(p, param);
}
}
void executeByPassingStdinAsArg(int argc, char* argv[], int quoted)
{
int i;
tStringPtr cmd_ptr;
char cmdArg[MAX_CMDARGLEN];
char cmdToExecute[2*MAX_CMDARGLEN];
gets(cmdArg);
tStringPtr_Init(&cmd_ptr, cmdToExecute);
for (i = 2; i < argc; i++)
{
addParam(&cmd_ptr, argv[i]);
}
if (quoted)
{
addParam(&cmd_ptr, cmdArg);
}
else
{
tStringPtr_AppendN(&cmd_ptr, " ", 1);
tStringPtr_Append(&cmd_ptr, cmdArg);
}
fwrite(cmd_ptr.begin, 1, tStringPtr_GetLength(&cmd_ptr), stdout);
system(cmd_ptr.begin);
}
void executeByPassingArgToStdOut(int argc, char* argv[])
{
int i;
tStringPtr cmd_ptr;
char cmdToExecute[2*MAX_CMDARGLEN];
tStringPtr_Init(&cmd_ptr, cmdToExecute);
for (i = 2; i < argc; i++)
{
addParam(&cmd_ptr, argv[i]);
}
fwrite(cmd_ptr.begin, 1, tStringPtr_GetLength(&cmd_ptr), stdout);
}
void printHelp()
{
const char* s = "Usage:\n" \
"redir.exe [mode] [command]\n" \
"[mode]: 1 - execute \'command contents_of_stdin\'\n" \
" 2 - execute \'command \"contents_of_stdin\"\'\n" \
" 3 - print \'command\' to stdout\n";
fwrite(s, 1, strlen(s), stdout);
}
|
):
| Code: | //redir.c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(int argc, char* argv[])
{
if (argc > 1)
{
char arg[4096];
char cmd[8192];
gets(arg);
strcpy(cmd, argv[1]);
strcat(cmd, " \"");
strcat(cmd, arg);
strcat(cmd, "\"");
printf("%s\n", cmd);
system(cmd);
}
return 0;
}
|
И использовать так:
cmd /c program.exe | redir.exe akelpad.exe
Last edited by DV on Fri Jan 18, 2013 3:25 pm; edited 1 time in total |
|
| Back to top |
|
 |
FeyFre
Joined: 07 Aug 2007 Posts: 1888 Location: Vinnitsa, Ukraine
|
Posted: Wed Jan 16, 2013 5:07 pm Post subject: |
|
|
DV, можно было бы обойтись и батничком и циклом for. (Один из вариантов for позволяет распарсить вывод произвольной программы ну и сделать всё что угодно)
(а монжно и без батничка. комманду for скормить cmd.exe в качестве параметра)
Да, в Unix/Linux это было бы сделано так:
program |xargs notepad
и никто не мешает заюзать xargs из порта GnuWin32 |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Wed Jan 16, 2013 8:12 pm Post subject: |
|
|
Infocatcher
measuresConverter.js
If you use the keyboard shortcut to change the type of measure (eg. Alt+M = Mass), the left panel with radiobuttons of types is not refreshed. |
|
| Back to top |
|
 |
DV
Joined: 16 Nov 2006 Posts: 723 Location: Kyiv, Ukraine
|
Posted: Wed Jan 16, 2013 8:42 pm Post subject: |
|
|
| FeyFre wrote: | | можно было бы обойтись и батничком и циклом for. |
Тханкс!!!
Действительно, блин, просто. Примеры: | Code: | cmd /c for /F %i in ('echo 1.txt') do akelpad %i
cmd /c for /F %i in ('program.exe') do akelpad %i |
У команды FOR ещё есть бомбовые модификаторы skip, delims и tokens для пропуска указанного кол-ва строк, указания разделителей и работы с подстроками. Улёт. (Подробнее: for /?) |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2509 Location: Киев, Русь
|
Posted: Thu Jan 17, 2013 11:11 am Post subject: |
|
|
DV
Можно по даблклику по строке в панели Log-плагина переходить в номеру строки и позиции в строке (пример в SearchReplace.js), м.б. можно таким же образом открывать и файл, если по нему дважды клацнуть? Ну или как-то сформировать гиперссылки на именах файлов? |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Thu Jan 17, 2013 4:39 pm Post subject: |
|
|
| KDJ wrote: | measuresConverter.js
If you use the keyboard shortcut to change the type of measure (eg. Alt+M = Mass), the left panel with radiobuttons of types is not refreshed. |
Should be better now. |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1067 Location: Poland
|
Posted: Thu Jan 17, 2013 6:20 pm Post subject: |
|
|
Infocatcher
Now is OK. Only need to change the version number. |
|
| Back to top |
|
 |
kadvlad
Joined: 16 Mar 2008 Posts: 8
|
Posted: Thu Jan 17, 2013 10:13 pm Post subject: |
|
|
Здравствуйте.
Есть задача: с помощью скрипта SearchReplace.js автоматически заменять символы QQQ на ZZZ, с параметрами "учитывать регистр" и "заменять на функции", команда по умолчанию "заменить все".
Пробовал создать SearchReplace.ini
| Code: | [Options]
RegExp=0
Sensitive=1
Multiline=0
EscSequences=0
ReplaceFunction=1
Direction=3
DialogWidth=678
DialogHeight=308
Template0=111=what:QQQ with:ZZZ |
рядом с *.js, но изменений не видно.
В ручном режиме замена работает правильно.
Также в самом SearchReplace.js есть пример вставки функции
| Code: | // Example for "Replace with function" flag:
// What: \d+
// With: parseInt($0) + 1; |
, но непонятно, как его применить в моём случае.
Как правильно реализовать вызов такой команды (возможно, через контекстное меню или по хоткею)?
Спасибо.
AkelPad 4.1.0
Scripts 4.4.0.0
ContextMenu 5.2.0.0 |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Fri Jan 18, 2013 8:32 am Post subject: |
|
|
| KDJ wrote: | | Now is OK. Only need to change the version number. |
Of course.
measuresConverter.js
Fixed redraw of types, if type was changed from keyboard (eg. Alt+M = Mass) |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2509 Location: Киев, Русь
|
Posted: Fri Jan 18, 2013 6:28 pm Post subject: |
|
|
kadvlad
Мне не удаётся убедить этих людей писать всё не в одном скрипте, а отделять собственно код выполнения (отдельный скрипт с функциями с параметрами в Include, который бы все использовали и благодарили бы) от UI (тоже отдельный скрипт).
Давно напрашивается идея хранить часто используемые параметры замен в отдельных файлах и из них налету генерировать меню, наподобие как работают скрипты ConsoleRun.js и ConsoleExec.js.
Если из SearchReplace.js выделить общий скрипт для всех в Include, то я обязуюсь подобным образом скрестить его с ShowMenuEx.js. |
|
| 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
|