Прикольная двусмысленность получилась!
Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 3243
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 22
- Joined: Fri Aug 10, 2007 2:58 pm
- Location: Москва
VladSh
Возвращаясь к несрабатыванию с первого раза скрипта UndoAllNoScroll, я заметил, что если убрать (закомментировать) одну строчку из скрипта, все начинает работать отлично с первого раза:
Кстати, скрипт UndoAll тоже не всегда срабатывает с первого раза. Понял это не сразу
Я там тоже убрал ту же строку, что и здесь и все стало работать. Можно это как то прокомментировать? Спасибо.
Возвращаясь к несрабатыванию с первого раза скрипта UndoAllNoScroll, я заметил, что если убрать (закомментировать) одну строчку из скрипта, все начинает работать отлично с первого раза:
Code: Select all
/// Undo all changes without scroll (4.x.x only)
var AkelPad = new ActiveXObject("AkelPad.document");
var hMainWnd = AkelPad.GetMainWnd();
var hEditWnd = AkelPad.GetEditWnd();
var bAkelEdit = AkelPad.IsAkelEdit();
var oFunction = AkelPad.SystemFunction();
if (hMainWnd
&& bAkelEdit
&& AkelPad.SendMessage(hEditWnd, 3075 /*AEM_CANUNDO*/, 0, 0)
/// && AkelPad.SendMessage(hEditWnd, 3086 /*AEM_GETMODIFY*/, 0, 0)
)
{
var lpPoint = AkelPad.MemAlloc(8 /*sizeof(POINT)*/);
if (lpPoint)
{
toggleRedraw(hEditWnd, false);
AkelPad.SendMessage(hEditWnd, 1245 /*EM_GETSCROLLPOS*/, 0, lpPoint);
while (AkelPad.SendMessage(hEditWnd, 3075 /*AEM_CANUNDO*/, 0, 0))
{
AkelPad.SendMessage(hEditWnd, 3077 /*AEM_UNDO*/, 0, 0)
}
AkelPad.SendMessage(hEditWnd, 1246 /*EM_SETSCROLLPOS*/, 0, lpPoint);
toggleRedraw(hEditWnd, true);
AkelPad.MemFree(lpPoint);
}
}
function toggleRedraw(hWnd, bRedraw)
{
AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
if (!bRedraw)
return;
oFunction.AddParameter(hWnd);
oFunction.AddParameter(0);
oFunction.AddParameter(true);
oFunction.Call("user32::InvalidateRect");
}
-
Offline
- Posts: 35
- Joined: Mon Jun 15, 2009 3:46 pm
-
Offline
- Posts: 1879
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
А вот напишите движок регулярных выражений, чтобы можно было обойтись без wscript.exe и системных библиотек.ccaid wrote:Мне тоже интересно, почему, в частности, поиск регэкспами не был интегрирован в программу, а вынесен в скрипты. Не то чтобы это напрягало, просто непонятно.
Скажем, в Notepad++ реализация регулярных выражений своя, и она уступает тому, что дает wscript.exe.
-
Offline
- Posts: 35
- Joined: Mon Jun 15, 2009 3:46 pm
А из программы нельзя воспользоваться регэкспами wscript? Я просто не в теме. А их преимущество я уже ощутил - \uXXXX.Infocatcher wrote: А вот напишите движок регулярных выражений, чтобы можно было обойтись без wscript.exe и системных библиотек.
Скажем, в Notepad++ реализация регулярных выражений своя, и она уступает тому, что дает wscript.exe.
-
Offline
- Posts: 3243
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
sergeich, видимо AkelPad неверно работает команда AEM_GETMODIFY, которая определяет, были ли изменения или нет для конкретного файла. Потому и не срабатывает иногда, что AkelPad "думает", что изменений не было.
Спасибо Вам огромное, что дошли до причины! У себя тоже на всякий случай закоменчу эту строку.

Спасибо Вам огромное, что дошли до причины! У себя тоже на всякий случай закоменчу эту строку.
Никто не говорит обходиться без них, просто код спрятать в прогу и всё. Или скомпиленый код не сможет работать с wscript.exe?Infocatcher wrote:А вот напишите движок регулярных выражений, чтобы можно было обойтись без wscript.exe и системных библиотек.
Last edited by VladSh on Wed Jun 23, 2010 2:56 pm, edited 1 time in total.
-
Offline
- Posts: 1879
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 124
- Joined: Tue Jun 03, 2008 10:32 pm
Infocatcher, подскажите пожалуйста.
Если в SearchReplace.js при замене на функцию сама функция содержит замену с использованием регулярных выражений, то не работают обратные ссылки внутреннего регулярного выражения.
Пример:
Файл содержит строки
При замене
на
вместо желаемого
получается
Как добиться желаемого результата?
Если в SearchReplace.js при замене на функцию сама функция содержит замену с использованием регулярных выражений, то не работают обратные ссылки внутреннего регулярного выражения.
Пример:
Файл содержит строки
Code: Select all
!x1 = 1, 2 at y1 = 10, 20; x2 = 3 at y2 = 30; x3 = 5, 6 at y3 = 50, 60; x4 = 7, 8 at y4 = 70, 80Code: Select all
^![^\r]+$Code: Select all
var str = $0; return str.replace(/\d+, \d+(?=;|$)/g, "$0 accordingly");Code: Select all
!x1 = 1, 2 at y1 = 10, 20 accordingly; x2 = 3 at y2 = 30; x3 = 5, 6 at y3 = 50, 60 accordingly; x4 = 7, 8 at y4 = 70, 80 accordinglyCode: Select all
!x1 = 1, 2 at y1 = $0 accordingly; x2 = 3 at y2 = 30; x3 = 5, 6 at y3 = $0 accordingly; x4 = 7, 8 at y4 = $0 accordingly-
Offline
- Posts: 1879
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Обратные ссылки работают только если заменять на строку, а в случае с функцией они передаются в виде аргументов.Xephon wrote:Если в SearchReplace.js при замене на функцию сама функция содержит замену с использованием регулярных выражений, то не работают обратные ссылки внутреннего регулярного выражения.
Так что для
Code: Select all
var str = $0; return str.replace(/\d+, \d+(?=;|$)/g, "$0 accordingly");При этом при замене на строку есть только $& (вся строка) и $1, $2, ...
Примерно вот так:
Что: ^![^\r]+$
Чем: return $0.replace(/(\d+, \d+)(;|$)/g, "$1 accordingly$2");
Ну, или так:
Чем: return $0.replace(/(\d+, \d+)(?=;|$)/g, "$1 accordingly");
(Если я правильно уловил суть преобразований.
-
Offline
- Posts: 1879
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Раз уж вспомнили про $&, еще есть $` (строка до найденного) и $' (после найденного).Xephon wrote:Про $& раньше не знал.
Кстати, пожалуй, полезно будет добавить в SearchReplace.js:
Code: Select all
pReplaceWithEsc='var args={}, l = arguments.length;'
+ 'for (var i=0; i < l; ++i)\n'
+ ' args["$" + i]=arguments[i];\n'
+ 'args.offset=arguments[l - 2];\n'
+ 'args.s=arguments[l - 1];\n'
+ 'with (args)\n'
+ '{\n'
+ pReplaceWithEsc
+ '\n}';
pReplaceWithEsc=new Function(pReplaceWithEsc);-
Offline
- Posts: 3243
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
Ан-нет! Всё равно баг есть!!!VladSh wrote:sergeich, видимо AkelPad неверно работает команд AEM_GETMODIFY, которая определяет, были ли изменения или нет для конкретного файла. Потому и не срабатывает иногда, что AkelPad "думает", что изменений не было.
Спасибо Вам огромное, что вы дошли до причины! У себя тоже на всякий случай закоменчу эту строку.
Что делаю: вставляю в только что созданное чистое окно текст, его обрабатываю скриптами (простое обрамление тегами), потом выделяю всё и вырезать, т.е. окно остаётся пустым, но что были изменения прога запоминает - звёздочка на вкладке отображается. Так вот делаю всё также несколько (4-5) раз, потом при пустом окне запускаю скрипт чтобы отменить всё, кое что отменяется (это видно по "дёрганию" проги), так вот в окне редактирования иногда(!) остаётся какой-то кусок, редактировавшийся в этом окне, вкладка со звёздочкой...
Instructor, Вы не в курсе, почему это может быть?
Last edited by VladSh on Mon Sep 14, 2009 9:27 am, edited 1 time in total.