Scripts discussion (4)

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

jsBeautifier.js v. 0.3.1 - 2022-08-02

[*] Updated sources from https://beautifier.io/.
[x] Fixed all known WSH-related bugs caused by JScript limitations.
[*] Now used -keepIndentation argument instead of -keepCSSIndentation (and also restored behavior of 0.2.9 and older versions).
Last edited by Infocatcher on Wed Aug 03, 2022 7:04 pm, edited 1 time in total.

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

measuresConverter.js v. 0.2.10 - 2022-08-03

[x] Fixed fxexchangerate.com and exchange-rates.org usage.
[x] Fixed Bitcoin (BTC), switch from bitcoincharts.com to currency.world.
[+] Added currencies white list, see -currencies argument, Ctrl+Shift+F hotkey.
[+] Added Ethereum (ETH) from currency.world.
[x] Fixed Belarusian Ruble: BYR -> BYN.
[x] Fixed Venezuelan Bolivar: VEF -> VES.
[+] Added self-update ability for built-in default currencies list (-updateSelf argument, use at your own risk).
[*] Improved window title: also show updates.
[x] Fixed hotkeys in x64 AkelPad, thanks to AlexeyB.

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Infocatcher
Добавьте, пожалуйста, если возможно, в measuresConverter.js ключ для работы при полностью отключенном интернете (полный offline). Чтобы не беспокоило это сообщение:
Image

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

yozhic wrote:Добавьте, пожалуйста, если возможно, в measuresConverter.js ключ для работы при полностью отключенном интернете (полный offline).
Вот так должно помочь:
-updateOnStartup=false
-offlineExpire=Infinity

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Infocatcher
Спасибо, помогло. Первый у меня уже был, а до бесконечности во втором сам бы точно не дотумкал ))

Offline
Posts: 165
Joined: Fri Aug 15, 2008 8:58 am

Post by Diamen »

Do it have a script replacemente for Autosave and Sessions plugins?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

toggleComments.js v. 0.4.4.1 - 2022-10-01

[*] Increased excludes performance: used faster way to repeat string.
[*] Improve performance of *.js preprocessing.
[*] Additional options was moved from toggleComments-options.js to toggleComments-options.jsm (to not show in scripts list).
[+] Added support for AWK, Lua and PowerShell, thanks to DV (#13).

Offline
Posts: 5
Joined: Tue Jan 10, 2017 1:48 am

Предложения по goToLongestLine.js

Post by langlois »

Infocatcher

Предложения по goToLongestLine.js

1) Явно не помешала бы кнопка "C начала" (как в диалоге поиска) и соответствующий аргумент, типа "-reverse= ". Тогда можно было бы создать на тулбаре кнопку для тихого (и без гаданий "Вниз" или "Вверх") перехода к искомой строке.

2) Информацию о том, что "Ограничение по времени: 0мс" является снятием ограничения по времени (попробуй, догадайся!), нужно бы разместить в окне диалога, типа "0 - без ограничения".
Да и предупреждения "Вы уверены, что хотите отключить ограничение по времени?" и "Ограничение по времени слишком велико (##:## мин)
Все равно продолжить?" должны быть опционально отключаемыми (задалбливают!), типа "Больше не спрашивать".
И вообще (как для меня), ограничение по времени - это лишнее: если уж человек задался целью - подождет, а надоест ждать - отменит сам. (Например, я ипользую скрипт для файлов по 150-200тыс. строк, где ищу строки с более 1млн. символов. И при настройке "0мс" время работы скрипта вполне приемлемо). Назначение скрипта (как для меня) - именно отыскать самую длинную строку, а не отыскать строку, которая окажется самой длинной на момент искусственного прерывания поиска. Что толку в результате "Самая длинная строка, найденная за 400мс поиска"?

3) Нелишней была бы полоса "Прогресс поиска" в окне диалога.

(Пользуюсь скриптом второй день. Исключительно полезен!)

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

langlois
Тестовая: https://github.com/Infocatcher/AkelPad_ ... estLine.js -> goToLongestLine.js v. 0.4.0pre - 2022-11-13

Изменения: https://github.com/Infocatcher/AkelPad_ ... estLine.js

1) Добавил «С начала» в виде галочки. Разница между Вниз и Вверх будет только на больших файлах и только с лимитом времени.

2) С 0 мс переделал в виде галочки, включающей ограничение, но это только внешнее, в виде аргумента надо передавать 0 или число миллисекунд. По предупреждениям добавил, чтобы запоминалось предыдущее подтвержденное значение, если не менять настройки – спрашивать повторно не будет.

3) С прогрессом сложно, окошки подвисают, надо или как-то посылать сообщения для перерисовки, но у меня не получилось, или переделывать логику, чтобы можно было продолжить с какого-то ранее начатого состояния.

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Пожалуйста, не мог бы кто-нибудь подправить (если это вообще возможно) скрипт MultiClipboard.js, чтобы он работал с Unicode (имею в виду символы языка, отличающегося от латиницы и языка локали)?
В системной настройке "Language for non-Unicode programs" у меня выставлено Russian. А клавиатурных раскладок несколько, помимо английской и русской есть и другие. Так вот после применения Multiclipboard.js символы других раскладок сохраняются в вопросительных знаках. Если включить новую системную настройку "Beta: Use Unicode UTF-8 for worldwide language support", то Multiclipboard.js начинает работать корректно, но зато во множестве других программ проявляются проблемы. Налицо: скрипт использует системную ф-цию, зависящую от локали. Но может возможно немного подправить алгоритм?

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

yozhic wrote:Пожалуйста, не мог бы кто-нибудь подправить (если это вообще возможно) скрипт MultiClipboard.js, чтобы он работал с Unicode (имею в виду символы языка, отличающегося от латиницы и языка локали)?
Возможно, это особенность работы AkelPad.GetClipboardText()/AkelPad.SetClipboardText() и подправлять надо реализацию работы с буфером в плагине Scripts.

Там даже некие следы насчет Unicode прослеживаются:

Code: Select all

HRESULT STDMETHODCALLTYPE Document_GetClipboardText(IDocument *this, BOOL bAnsi, BSTR *wpText)
{
  HRESULT hr=NOERROR;
  HGLOBAL hData;
  LPVOID pData;

  *wpText=NULL;

  if (OpenClipboard(NULL))
  {
    if (!bAnsi && (hData=GetClipboardData(CF_UNICODETEXT)))
    {
      if (pData=GlobalLock(hData))
      {
        if (!(*wpText=SysAllocString((wchar_t *)pData)))
          hr=E_OUTOFMEMORY;
        GlobalUnlock(hData);
      }
    }
    else if (hData=GetClipboardData(CF_TEXT))
    {
      if (pData=GlobalLock(hData))
      {
        wchar_t *wszBuffer;
        int nUnicodeLen;

        nUnicodeLen=MultiByteToWideChar(CP_ACP, 0, (char *)pData, -1, NULL, 0);

        if (wszBuffer=(wchar_t *)GlobalAlloc(GPTR, nUnicodeLen * sizeof(wchar_t)))
        {
          MultiByteToWideChar(CP_ACP, 0, (char *)pData, -1, wszBuffer, nUnicodeLen);
          if (!(*wpText=SysAllocString(wszBuffer)))
            hr=E_OUTOFMEMORY;
          GlobalFree((HGLOBAL)wszBuffer);
        }
        else hr=E_OUTOFMEMORY;

        GlobalUnlock(hData);
      }
    }
    CloseClipboard();
  }
  return hr;
}


Но для начала можно попробовать заменить в скрипте

Code: Select all

var pClipboardText=AkelPad.GetClipboardText();
на

Code: Select all

var pClipboardText=AkelPad.GetClipboardText(true);

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Infocatcher wrote:попробовать заменить в скрипте
Спасибо большое! Помогло, но только не true, а false — прямое указание на использование Unicode. Хотя это должно было по умолчанию срабатывать, но почему-то не срабатывало.

Offline
Posts: 17
Joined: Wed Feb 16, 2022 2:25 pm

Post by AlexeyB »

Infocatcher
Скрипт toggleComments.js в PHP-файлах ищет регионы <?php .. ?> и <? .. ?>, внутри которых используются комментарии в стиле C. Вне этих регионов используются HTML-комментарии. Но синтаксис PHP позволяет не закрывать последний тег. И в этом случае скрипт работает неправильно, комментируя PHP-код как HTML.

Code: Select all

<?
    echo 'Hello comment.';  // Эта строка закомментируется неправильно

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

AlexeyB wrote:Но синтаксис PHP позволяет не закрывать последний тег. И в этом случае скрипт работает неправильно, комментируя PHP-код как HTML.
Добавил новый флаг canOmitEnd, если не найдется "?>", то за окончание региона будет взят конец документа:
https://github.com/Infocatcher/AkelPad_ ... 86dae448f2

Не переключится на PHP в случае
<?
echo 'Hello comment.'; // Эта строка закомментируется неправильно
<?
Но тут, я думаю, и не должно работать, два открытия подряд.

Offline
Posts: 4
Joined: Sat Dec 21, 2019 1:32 am

Быстрое копирование пароля и т.п.

Post by Krtec »

Есть скрипт для быстрого копирования слова на котором установлена каретка: WordCopy.js, а есть ли подобный, в котором могут быть прописаны собственные разделители для определения начала и конца слова? Нужно для копирования слов, содержащих символы, которые в программе указаны разделителями.

_____Добавлено_____

Пытался сделать методом поиска с регулярными выражениями таким образом:

Code: Select all

AkelPad.TextFind(0, "\s", 0x180000 /*FRF_UP|FRF_REGEXP*/);	// Найти разделитель слева-вверх
AkelPad.TextFind(0, "\S+?", 0x80001 /*FRF_DOWN|FRF_REGEXP*/);	// Найти блок до разделителя вправо-вниз
AkelPad.Command(4154)	// Скопировать
Но оказалось что "\s" и "\S" не воспринимаются символами рег. выражений — находит буквы "s". Попробовал использоывть в качестве разделителя "[ \f\n\r\t]" — уже лучше, стали находится пробелы и табуляции, но переводы строк пропускаются.
А вот через внешний вызов метода всё прекрасно работает:

Code: Select all

Call("Scripts::Main", 7, `AkelPad.TextFind(0, "\A|\s", 0x180000 /*FRF_UP|FRF_REGEXP*/)`)
+

Code: Select all

Call("Scripts::Main", 7, `AkelPad.TextFind(0, "\S+?", 0x80001 /*FRF_DOWN|FRF_REGEXP*/)`)
В чём секрет?

_____Добавлено_____

А ларчик просто открывался — с двумя обратными слэшами заработало.

Code: Select all

AkelPad.TextFind(0, "\\A|\\s", 0x180000 /*FRF_UP|FRF_REGEXP*/);	// Найти разделитель слева-вверх
AkelPad.TextFind(0, "\\S+?", 0x80001 /*FRF_DOWN|FRF_REGEXP*/);	// Найти блок до разделителя вправо-вниз
AkelPad.Command(4154)	// Скопировать
Выделяет и копирует область (где установлена каретка) между любыми пробельными символами.
Post Reply