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 ... 65, 66, 67 ... 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
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Sun Jan 13, 2013 2:23 am    Post subject: Reply with quote

measuresConverter.js
Changes:
Correct handling of update errors
Fix typo in Russian translation
Add symbols for some units
Add English symbols to Russian translation
Fix Russian symbol for electronvolt
Improve startup performance: never use synchronous updater in GUI version
Start async update only for currencies and don't call force update on "regular" conversion
Show "Update…" message when update starts
Store one pending update
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1393
Location: Poland

PostPosted: Sun Jan 13, 2013 7:11 pm    Post subject: Reply with quote

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



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

PostPosted: Mon Jan 14, 2013 10:11 am    Post subject: Reply with quote

KDJ wrote:
Changed argument name -DefBut to -RDB.
RDB - Relational DataBase Smile
DefBtn, in my opinion, better.
Back to top
View user's profile Send private message Visit poster's website
KDJ



Joined: 06 Mar 2010
Posts: 1393
Location: Poland

PostPosted: Mon Jan 14, 2013 8:13 pm    Post subject: Reply with quote

VladSh
In this case:
-RDB = "Replace": Default Button.
And I don't want to have to change that.
Back to top
View user's profile Send private message
DV



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

PostPosted: Wed Jan 16, 2013 4:24 pm    Post subject: Reply with quote

Вопрос, косвенно относящийся к скриптам и/или плагину Log...
Если есть внешняя программа, которая в результате своей работы выводит в консоль какое-то имя файла [например, через printf("%s", fileName)], то как в AkelPad потом открыть файл, соответствующий этому имени?
Если делать дубово, то как-то так:
1. выполняем "program.exe >out.txt";
2. читаем первую строчку файла out.txt и открываем в AkelPad файл, имя которого указано в этой строке.
Но можно ли обойтись без промежуточного файла out.txt?
Back to top
View user's profile Send private message
DV



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

PostPosted: Wed Jan 16, 2013 4:55 pm    Post subject: Reply with quote

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



Joined: 07 Aug 2007
Posts: 2054
Location: Vinnitsa, Ukraine

PostPosted: Wed Jan 16, 2013 5:07 pm    Post subject: Reply with quote

DV, можно было бы обойтись и батничком и циклом for. (Один из вариантов for позволяет распарсить вывод произвольной программы ну и сделать всё что угодно)
(а монжно и без батничка. комманду for скормить cmd.exe в качестве параметра)
Да, в Unix/Linux это было бы сделано так:
program |xargs notepad
и никто не мешает заюзать xargs из порта GnuWin32
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
KDJ



Joined: 06 Mar 2010
Posts: 1393
Location: Poland

PostPosted: Wed Jan 16, 2013 8:12 pm    Post subject: Reply with quote

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



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

PostPosted: Wed Jan 16, 2013 8:42 pm    Post subject: Reply with quote

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



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

PostPosted: Thu Jan 17, 2013 11:11 am    Post subject: Reply with quote

DV
Можно по даблклику по строке в панели Log-плагина переходить в номеру строки и позиции в строке (пример в SearchReplace.js), м.б. можно таким же образом открывать и файл, если по нему дважды клацнуть? Ну или как-то сформировать гиперссылки на именах файлов?
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Thu Jan 17, 2013 4:39 pm    Post subject: Reply with quote

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



Joined: 06 Mar 2010
Posts: 1393
Location: Poland

PostPosted: Thu Jan 17, 2013 6:20 pm    Post subject: Reply with quote

Infocatcher
Now is OK. Only need to change the version number.
Back to top
View user's profile Send private message
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Thu Jan 17, 2013 10:13 pm    Post subject: Reply with quote

Здравствуйте.

Есть задача: с помощью скрипта 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
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Fri Jan 18, 2013 8:32 am    Post subject: Reply with quote

KDJ wrote:
Now is OK. Only need to change the version number.

Of course. Smile

measuresConverter.js
Fixed redraw of types, if type was changed from keyboard (eg. Alt+M = Mass)
Back to top
View user's profile Send private message Visit poster's website
VladSh



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

PostPosted: Fri Jan 18, 2013 6:28 pm    Post subject: Reply with quote

kadvlad
Мне не удаётся убедить этих людей писать всё не в одном скрипте, а отделять собственно код выполнения (отдельный скрипт с функциями с параметрами в Include, который бы все использовали и благодарили бы) от UI (тоже отдельный скрипт).
Давно напрашивается идея хранить часто используемые параметры замен в отдельных файлах и из них налету генерировать меню, наподобие как работают скрипты ConsoleRun.js и ConsoleExec.js.
Если из SearchReplace.js выделить общий скрипт для всех в Include, то я обязуюсь подобным образом скрестить его с ShowMenuEx.js.
Back to top
View user's profile Send private message Visit poster's website
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 ... 65, 66, 67 ... 94, 95, 96  Next
Page 66 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