Scripts collection

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Code: Select all

// Description(1033): Delete repeated spaces inside the text
// Description(1049): Убирает пустые символы внутри текста
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5577#p5577
// Version: 3.5 (2011.03.22)
// Author: VladSh

if (! AkelPad.Include("selCompleteLine.js")) WScript.Quit();
oCh.runWithRedraw();

function process() {
	oCh.Text = oCh.getSelTextAll();
	oCh.Text = oCh.Text.replace(/\ {2,}/g, ' ');		//Убираем повторяющиеся пробелы
	oCh.Text = oCh.Text.replace(/\t{2,}/g, '\t');		//Убираем повторяющиеся табуляции
}


This script used selCompleteLine.js.
Last edited by VladSh on Wed Jan 14, 2015 6:44 pm, edited 12 times in total.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5598#p5598
// Description(1033): Open by Linked, Selected or Clipboard text: file (supported the opening of scripts from AkalPad directory), folder; url, ets...
// Description(1049): Предназначен для открытия автовыбором:
// 	• ссылок в браузере (из контекстного меню ссылок)
// 	• файлов (чаще всего скриптов) в AkelPad'е (работает при выделении текста либо по содержимому буфера; поддерживается открытие скриптов из ..\Scripts\Include\
// 	• папок (в Windoes Explorer'е), в т.ч. сетевых
// Version: 2.3 (2014.10.19)
// Author: VladSh
// 
// Usage:
// 	в меню ссылок: -"Открыть (автовыбор)" Call("Scripts::Main", 1, "OpenByLSC.js", `"%u"`)
// 	в диалоге скриптов для выделенного текста или того, что в буфере обмена, предлагается комбинация клавиш Alt+O

var slash = "\\";

//1. - проверяем в аргументах (L- Link); 2 - берём выделенный текст (S- Selected); 3 - берём содержимое буфера обмена (C - Clipboard)
var tObject = AkelPad.GetArgLine() || AkelPad.GetSelText() || AkelPad.GetClipboardText();

if (!tObject) WScript.Quit();
var WshShell = new ActiveXObject("WScript.Shell");

//Определяем: URL, Файл или Папка

if (tObject.indexOf("//") != -1) {
	WshShell.Exec('explorer.exe "' + tObject + '"');		//URL
	WScript.Quit();
}

var nPos = tObject.indexOf("AkelFiles");
if (nPos != -1 && nPos <= 4)
	tObject = AkelPad.GetAkelDir() + correctSlashes(tObject);		//кусок (не полный путь) сущности из дирректории AkelPad'а

nPos = tObject.lastIndexOf(".");
if (nPos != -1) {
	var nPosSlash = tObject.lastIndexOf(slash);
	if (nPosSlash < nPos) {
		//Файл
		if (nPosSlash <= 1)		//имя скрипта из окна редактирования (и дирректории) AkelPad'а (со слэшами впереди)
			tObject = tObject.replace(/\\/gm, "");
		
		if (tObject.indexOf(slash) == -1)
			tObject = AkelPad.GetAkelDir(6) /*ADTYPE_INCLUDE*/ + slash + tObject;		//имя скрипта, например просто скопированное в буфер обмена (из ContextMenu-плагина или др.)
		
		if (!openFile(tObject, false)) {
			tObject = tObject.substr(tObject.lastIndexOf(slash) + 1);		//выкусываем чисто имя скрипта
			tObject = AkelPad.GetAkelDir(5) /*ADTYPE_SCRIPTS*/ + slash + tObject;		//сначала искали в папке ..\Scripts\Include\, а теперь смотрим в ..\Scripts\
			openFile(tObject, true);
		}
		WScript.Quit();
	}
}

//Папка
openbyDefault(tObject);


function openbyDefault(tObject) {
	WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + tObject + '"');
}

function openFile(tObject, bErrMsg) {
	tObject = correctSlashes(tObject);
	
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	if (fso.FileExists(tObject) == true) {
		AkelPad.OpenFile(tObject);
		return true;
	}
	else {
		if (bErrMsg) openbyDefault(tObject);
		return false;
	}
}

function correctSlashes(pPath) {
	return pPath.replace(/\\\\/g, slash);
}
Т.к. из такого пути

Code: Select all

D:\Docs\LN\ConnectToRDB\Notes and Domino Connectivity_(redp0115).pdf
ссылку сделать невозможно, то быстренько "наскриптил" :lol:


История изменений:

• 2009.10.31
Добавлено: возможность из текущего скрипта быстро открывать подгружаемые скрипты.

• 2009.11.19
Изменено: скрипт можно запускать также и из контекстного меню ссылок.
Last edited by VladSh on Wed Jan 14, 2015 9:09 pm, edited 15 times in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Active column show/hide.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5727#p5727
// Version: 1.5
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Active column show/hide.
// Description(1049): Включить/выключить активный столбец.
//
// Arguments:
// -Local=true     -Change active column visibilty locally (not saved after program restart). Default is false.
//
// Usage global (item to Toolbar/ContextMenu plugin):
//    SET(128, If("SendMain(1223 /*AKD_GETFRAMEINFO*/, 69 /*FI_CARETOPTIONS*/, 0) & 0x2 /*CO_CARETVERTLINE*/", 0x1, 0x0))
//      "Active column (global)" Call("Scripts::Main", 2, "ActiveColumnSwitch.js")
//    UNSET(128)
//
// Usage local (item to Toolbar/ContextMenu plugin):
//    SET(128, If("SendEdit(3228 /*AEM_GETOPTIONS*/, 0, 0) & 0x400 /*AECO_ACTIVECOLUMN*/", 0x1, 0x0))
//      "Active column (local)" Call("Scripts::Main", 2, "ActiveColumnSwitch.js", `-Local=true`)
//    UNSET(128)

//Arguments
var bLocal=AkelPad.GetArgValue("Local", false);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var dwOptions;

if (hWndEdit)
{
  if (bLocal)
  {
    dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
    if (dwOptions & 0x400 /*AECO_ACTIVECOLUMN*/)
      AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
    else
      AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x400 /*AECO_ACTIVECOLUMN*/);
  }
  else
  {
    dwOptions=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 69 /*FI_CARETOPTIONS*/, 0);
    if (dwOptions & 0x2 /*CO_CARETVERTLINE*/)
      dwOptions&=~0x2 /*CO_CARETVERTLINE*/;
    else
      dwOptions|=0x2 /*CO_CARETVERTLINE*/;
    AkelPad.SetFrameInfo(0, 17 /*FIS_CARETOPTIONS*/, dwOptions);
  }
}
Last edited by Instructor on Thu Jun 04, 2015 11:28 am, edited 9 times in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Select range of lines.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5808#p5808
// Version: 1.1
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Select range of lines.
// Description(1049): Выделить диапазон строк.
//
// Arguments:
// -Range="15-20"  -Select lines from 15 to 20. If not specified dialog is appeared.
//
// Usage:
// Call("Scripts::Main", 1, "SelectRange.js", `-Range="3-11"`)

//Arguments
var pRange=AkelPad.GetArgValue("Range", "");

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var aRange;
var nMinLine;
var nMaxLine;
var nMinLineIndex;
var nMaxLineIndex;
var nSelEnd;

if (hWndEdit)
{
  if (!pRange)
  {
    nSelEnd=AkelPad.GetSelEnd();
    nMinLine=AkelPad.SendMessage(hWndEdit, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, AkelPad.GetSelStart());
    nMaxLine=AkelPad.SendMessage(hWndEdit, 3129 /*AEM_GETLINENUMBER*/, 21 /*AEGI_UNWRAPLINEFROMRICHOFFSET*/, nSelEnd);
    if (AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 18 /*AEGI_WRAPLINEBEGIN*/, nSelEnd) == nSelEnd)
      --nMaxLine;
    pRange=AkelPad.InputBox(hMainWnd, WScript.ScriptName, "LineStart-LineEnd", (nMinLine + 1) + "-" + (nMaxLine + 1));
  }

  if (pRange)
  {
    if (aRange=pRange.split("-"))
    {
      nMinLineIndex=AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 41 /*AEGI_RICHOFFSETFROMUNWRAPLINE*/, parseInt(aRange[0]) - 1);
      nMaxLineIndex=AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 41 /*AEGI_RICHOFFSETFROMUNWRAPLINE*/, aRange.length > 1?parseInt(aRange[1]):parseInt(aRange[0]));
      AkelPad.SetSel(nMinLineIndex, nMaxLineIndex);
    }
  }
}
Last edited by Instructor on Thu Dec 18, 2014 6:16 pm, edited 4 times in total.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5837#p5837
// Description(1033): Extended "Save as ..."
// Description(1049): Расширенное "Сохранить как..."
// Version: 2.24 (2015.10.08)
// Author: VladSh
// 
// Arguments:
//    dir - папка для сохранения, с которой будем открывать диалог сохранения
//    ext - расширение, если мы хотим его задать жёстко для сохраняемых файлов
//    selUse:
//       0 - использовать выделение для определения из него имени файла, по аналогии с тем, как это делает MS Word;
//      [1] - для сохранения выделения в отдельный файл; имя файла в этом случае будет выдаваться текущее
//    srcClose - закрывать исходный файл или нет; [true] - будет закрываться только если файл не был изменён в окне AkelPad'а
// 
// Usage:
//    -"Сохранить как..." Call("Scripts::Main", 1, "SaveAs.js")
//    -"Сохранить в js..." Call("Scripts::Main", 1, "SaveAs.js", `-ext="js"`)

var pAllText = AkelPad.GetTextRange(0, -1);		//берём весь текст

if (! AkelPad.Include("CommonFunctions.js")) WScript.Quit();

var pSelText = AkelPad.GetSelText();		//если есть выделенный текст, то значит из него, а не из первой строки, будем брать наименование будущего файла

var hWndEdit = AkelPad.GetEditWnd();
var pCurrentFile = AkelPad.GetEditFile(hWndEdit);

//если нет выделения, то инициировать сохранение выделения в отдельный файл не имеет смысла
var selUse = (pSelText ? AkelPad.GetArgValue("selUse", 1) : 0);

//начальный текст для возможного имени файла
var pInitialFile = (selUse == 0 ? pSelText : (pCurrentFile || pAllText)) || pCurrentFile /* если выделения не было (т.е. из него определить имя файла не удалось), значит для подстановки в диалог используем текущее имя файла */;

//Определяем расширение будущего файла; значение в аргументах приоритетнее
var fileExt = AkelPad.GetArgValue("ext", "") || getFileExt(pCurrentFile) || getFileExt(pInitialFile);
if (!fileExt) {
	if (AkelPad.Include("CoderFunctions.js"))
		fileExt = GetSyntaxAliasExtension(hWndEdit);
}
if (fileExt == "bbc") fileExt = "";		//bbc важно только для подсветки, а для сохранения то, что указано в настроках проги; если нужно bbc, то его можно выбрать в диалоге

if (pInitialFile && (pInitialFile != pCurrentFile))
	pInitialFile = getFileNameByFirstRow(pInitialFile);		//получение возможного имени файла по его первой строке

var pInitialDir = AkelPad.GetArgValue("dir", "") || getParentClosed(pInitialFile);

pInitialFile = fileDialogDefault(false, pInitialDir, pInitialFile, fileExt);		//выдаём в диалоге - можно поменять
if (pInitialFile) {
	pInitialFile = correctFileNameFull(pInitialFile);
	if (pInitialFile) {
		//Проверка, возможно новое расширение было добавлено к уже существующему
		var dFile = separateFile(pInitialFile);
		var tmpFileName = getFileNameOnly(pInitialFile);
		
		if (dFile.name.length != tmpFileName.length)
			pInitialFile = dFile.path + tmpFileName + "." + dFile.ext;		//то, что было введено в диалоге, приоритетнее!
		
		//если выбрали для сохранения не текущий файл
		if (pInitialFile != pCurrentFile ) {
			//Проверка на существование файла с таким именем
			var newFileFormat;
			fso = new ActiveXObject("Scripting.FileSystemObject");
			if (fso.FileExists(pInitialFile) == true) {
				if (AkelPad.MessageBox(AkelPad.GetMainWnd(), "File '" + pInitialFile + "' already exist! Replace it?!", "AkelPad message...", 48+4) != 6)
					WScript.Quit();
			}
			else {
				//если у текущего файла нет имени и установлено "не сохранять выделение", - сохраняем текущий
				if (!pCurrentFile && !selUse) {
					saveFile(pInitialFile);
					WScript.Quit();
				}
				newFileFormat = getFileFormat(0);
			}
			
			if (AkelPad.GetArgValue("srcClose", true)) {
				if (!AkelPad.GetEditModified(0) && pCurrentFile) {
					//Закрытие текущего файла и его вкладки, т.к. будем сохранять точно не текущий файл
					closeFile();
				}
			}
			
			if (newFileFormat) {
				//файл не существует - создаём
				createFile(newFileFormat, dFile.ext);
			}
			else {
				//файл существует - открываем
				AkelPad.OpenFile(pInitialFile);
				AkelPad.SetSel(0, -1);
			}
			AkelPad.ReplaceSel(selUse == 1 ? pSelText : pAllText);
			AkelPad.SetSel(0, 0);
		}
		
		//сохранение файла
		saveFile(pInitialFile);
	}
}

//Сохранение с обновлением панели Explorer-плагина
function saveFile(pFile) {
	AkelPad.SaveFile(0, pFile);
	var pExplorer = "Explorer::Main";
	if (AkelPad.IsPluginRunning(pExplorer)) {
		AkelPad.Call(pExplorer, 2);
	}
}

//Берём первую строку, как это делает MS Word
function getFileNameByFirstRow(pInitialFile) {
	var pTmpFile = pInitialFile.replace(new RegExp("^[" + " \t\r" + "]+", "gm"), "");
	pTmpFile = pTmpFile.split(/\r/)[0];
	return correctFileName(pTmpFile);
}
This script used CommonFunctions.js and CoderFunctions.js.


Примеры использования:

Code: Select all

Call("Scripts::Main", 1, "SaveAs.js", `-ext="js"`)
если расширение задано в диалоге, то оно будет самым приоритетным при определении расширения сохраняемого файла, т.е. в данном случае js.

Code: Select all

Call("Scripts::Main", 1, "SaveAs.js")
если расширение не задано в аргументах, то будет производиться определение и подстановка в таком порядке:
• по расширению текущего файла;
если файл новый (расширения у него нет):
• по синтаксической теме, применённой к данному файлу;
• из настроек программы;
• если ничего не определено, то подставится расширение "по умолчанию" для файлов, указанное в скрипте (txt).

Расширение можно изменить в диалоге.

Посадил этот скрипт на пиктограмму "Save As..." тулбара, а по Ctrl+S и контекстных меню оставил стандартную команду :wink:
Last edited by VladSh on Thu Oct 08, 2015 2:38 pm, edited 45 times in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Turn off undo while replace dialog is open.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5891#p5891
// Version: 1.1
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Turn off undo while replace dialog is open.
// Description(1049): Отключение буфера отмен пока открыт диалог замены.

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var nUndoLimit;
var lpType;

if (hWndEdit)
{
  if (lpType=AkelPad.MemAlloc(4 /*sizeof(int)*/))
  {
    //Allow other scripts running
    AkelPad.ScriptNoMutex();

    nUndoLimit=AkelPad.SendMessage(hWndEdit, 3084 /*AEM_GETUNDOLIMIT*/, 0, 0);
    AkelPad.SendMessage(hWndEdit, 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
    AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, 0, 0);
    AkelPad.Command(4161 /*IDM_EDIT_REPLACE*/);

    for (;;)
    {
      //Wait for closing replace dialog
      AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, lpType);
      if (AkelPad.MemRead(lpType, 3 /*DT_DWORD*/) == 4 /*MLT_REPLACE*/)
        WScript.Sleep(100);
      else
        break;
    }

    AkelPad.SendMessage(hWndEdit, 3085 /*AEM_SETUNDOLIMIT*/, nUndoLimit, 0);
    AkelPad.MemFree(lpType);
  }
}
Last edited by Instructor on Thu Dec 18, 2014 6:16 pm, edited 4 times in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

First call sets selection start point, second call make selection.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=6064#p6064
// Version: 1.1
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): First call sets selection start point, second call make selection.
// Description(1049): Первый вызов устанавливает начало выделения, второй вызов осуществляет выделение.

var oSet=AkelPad.ScriptSettings();
var nRegSelStart=-1;
var nCurSelStart=AkelPad.GetSelStart();

if (oSet.Begin("", 0x1 /*POB_READ*/))
{
  nRegSelStart=oSet.Read("StartPos", 1 /*PO_DWORD*/);
  oSet.End();
}

if (oSet.Begin("", 0x2 /*POB_SAVE*/))
{
  if (nRegSelStart != -1)
  {
    if (nRegSelStart != nCurSelStart)
    {
      AkelPad.SetSel(nRegSelStart, nCurSelStart);
      oSet.Write("StartPos", 1 /*PO_DWORD*/, -1);
    }
  }
  else oSet.Write("StartPos", 1 /*PO_DWORD*/, nCurSelStart);

  oSet.End();
}
Last edited by Instructor on Thu Dec 18, 2014 5:47 pm, edited 5 times in total.

Offline
Posts: 15
Joined: Sun Oct 11, 2009 10:51 am

Post by oyaebu »

Дошли-таки руки до старой задумки.

Code: Select all

// description = Password Generator
// copypizded from http://javascript.internet.com/passwords/password-generator.html

//var AkelPad=new ActiveXObject("AkelPad.document");
//AkelPad.ReplaceSel('Test');

function getRandomNum(lbound, ubound) {
return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}

function getRandomChar(number, lower, upper, other, extra) {
var numberChars = "0123456789";
var lowerChars = "abcdefghijklmnopqrstuvwxyz";
var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var otherChars = "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
var charSet = extra;
if (number == true)
charSet += numberChars;
if (lower == true)
charSet += lowerChars;
if (upper == true)
charSet += upperChars;
if (other == true)
charSet += otherChars;
return charSet.charAt(getRandomNum(0, charSet.length));
}

function getPassword(length, extraChars, firstNumber, firstLower, firstUpper, firstOther,
latterNumber, latterLower, latterUpper, latterOther) {
	var rc = "";
	if (length > 0)
	rc = rc + getRandomChar(firstNumber, firstLower, firstUpper, firstOther, extraChars);
	for (var idx = 1; idx < length; ++idx) {
	rc = rc + getRandomChar(latterNumber, latterLower, latterUpper, latterOther, extraChars);
	}
	return rc;
}

function getRandomInt(min, max)
{
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

var pLength = getRandomInt(12,19);
var extraChars = '';

var firstNumber = true;
var firstLower = true;
var firstUpper = true;
var firstOther = false;

var latterNumber = true;
var latterLower = true;
var latterUpper = true;
var latterOther = false;

AkelPad.ReplaceSel(getPassword(pLength, extraChars, firstNumber, firstLower,
firstUpper, firstOther, latterNumber, latterLower,
latterUpper, latterOther));


Осталось узнать, как добавить кнопку, вызывающую это дело, на тулбар.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Duplicate selected lines.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=6504#p6504
// Version: 1.2
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Duplicate selected lines.
// Description(1049): Продублировать выделенные строки.

var hWndEdit=AkelPad.GetEditWnd();
var pSelText;
var aLines;
var aResultLines=[];
var nIndex;
var nResultIndex=0;

if (hWndEdit)
{
  if (AkelPad.GetSelStart() == AkelPad.GetSelEnd())
    SelectCaretLine(hWndEdit);

  if (pSelText=AkelPad.GetSelText())
  {
    if (aLines=pSelText.split("\r"))
    {
      for (nIndex=0; nIndex < aLines.length; ++nIndex)
      {
        aResultLines[nResultIndex++]=aLines[nIndex];
        aResultLines[nResultIndex++]=aLines[nIndex];
      }
      pSelText=aResultLines.join("\r");
    }
    AkelPad.ReplaceSel(pSelText, -2);
  }
}

function SelectCaretLine(hWnd)
{
  var nCaretOffset=AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 5 /*AEGI_CARETCHAR*/, 0);
  var nLineStart=AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 18 /*AEGI_WRAPLINEBEGIN*/, nCaretOffset);
  var nLineEnd=AkelPad.SendMessage(hWndEdit, 3138 /*AEM_GETRICHOFFSET*/, 19 /*AEGI_WRAPLINEEND*/, nCaretOffset);

  AkelPad.SetSel(nLineStart, nLineEnd);
}
Last edited by Instructor on Thu Dec 18, 2014 6:18 pm, edited 5 times in total.

Offline
Posts: 5
Joined: Mon Nov 16, 2009 9:27 am

Create a new text file in current editing file directory

Post by levilevi »

My first script, base on some other scripts:D
createfile.js

Code: Select all

/// Create a new text file in current editing file directory 

var AkelPad=new ActiveXObject("AkelPad.document"); 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 

var hMainWnd=AkelPad.GetMainWnd();
var szFile=AkelPad.GetEditFile(0); 
var szDir=GetParent(szFile);
var pName="";


if (hMainWnd)
{
  pName=AkelPad.InputBox(hMainWnd, "Create a New Text", "Give it a name", ".txt");
  if (pName!=".txt" && pName!=0) 
  {
    var pNewFileFullName = szDir + '\\' + pName
    if (!fso.FileExists(pNewFileFullName))
      var NewFile = fso.CreateTextFile(pNewFileFullName)
    AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4422 /*IDM_NONMENU_FILECLOSE*/, 0);
    AkelPad.OpenFile(pNewFileFullName, 0, 0, 0);
    AkelPad.Call("Explorer::Main", 2); //Refresh Explorer plugin's directory
  }
}

//Functions 
function GetParent(file) 
{ 
  var i; 

  for (i=file.length - 1; i >= 0; --i) 
  { 
    if (file.charAt(i) == '\\') 
      return file.substr(0, i); 
  } 
}

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Convert tabulation to spaces.

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=7081#p7081
// Version: 1.5
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Convert tabulation to spaces.
// Description(1049): Конвертировать табуляцию в пробелы.
//
// Arguments:
// -TabStop=4     -Tab stop size in characters. If -1, use program setting (default).
//
// Usage:
// Call("Scripts::Main", 1, "TabsToSpaces.js", `-TabStop=4`)

//Arguments
var nTabStop=AkelPad.GetArgValue("TabStop", -1);

//Variables
var hWndEdit=AkelPad.GetEditWnd();
var oSys=AkelPad.SystemFunction();
var bColumnSel;
var nInitColumn=0;
var nColumn;
var nSpaceCount;
var pSelText;
var pResult;
var pSpaces;
var lpSel;
var a;
var b;

if (hWndEdit)
{
  if (lpSel=AkelPad.MemAlloc(_X64?56:32 /*sizeof(AESELECTION)*/))
  {
    if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, lpSel))
      nInitColumn=AkelPad.SendMessage(hWndEdit, 3147 /*AEM_INDEXTOCOLUMN*/, 0, lpSel /*AESELECTION.crSel.ciMin*/);
    else
      AkelPad.SetSel(0, -1);
    bColumnSel=AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0);
    if (nTabStop == -1)
      nTabStop=AkelPad.SendMessage(hWndEdit, 3239 /*AEM_GETTABSTOP*/, 0, 0);
    AkelPad.MemFree(lpSel);
  }
  else WScript.Quit();

  //Scan selection
  pSelText=AkelPad.GetSelText();
  pResult="";

  for (a=0, b=0, nColumn=nInitColumn; b < pSelText.length; ++b)
  {
    if (pSelText.charAt(b) == '\t')
    {
      nSpaceCount=nTabStop - nColumn % nTabStop;
      nColumn+=nSpaceCount;
      for (pSpaces=""; nSpaceCount; --nSpaceCount)
        pSpaces=pSpaces + " ";
      pResult+=pSelText.substr(a, b - a) + pSpaces;
      a=b + 1;
    }
    else if (pSelText.charAt(b) == '\r')
      nColumn=bColumnSel?nInitColumn:0;
    else
      ++nColumn;
  }
  pResult+=pSelText.substr(a, b - a);
  AkelPad.ReplaceSel(pResult, -2);
}
Last edited by Instructor on Fri Jun 12, 2015 12:14 pm, edited 9 times in total.

Offline
Posts: 119
Joined: Sat Jan 12, 2008 10:16 am
Location: Shantou, China

NumberCount.js by cnnnc

Post by cnnnc »

Code: Select all

/// NumberCount.js (2012-12-15) by cnnnc.
// Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line.
// EscSeq is allowed in "String":
//       \\ - backslash
//       \r - line feed
//       \n - new line
//       \t - tabulation
//       \N - Decimal number sequence
//       \H - Hexadecimal number sequence
//       $1 - original line
//
// If Num is not checked, \N be treated as is.
// If there is more \N, more Step will be done in one line. When "Lazy mode" CheckBox is checked, all \N in one line will be same.
// Float Number is allowed in "First" and "Step/End".
// Negative number is allowed in "First","Step/End" and "WIDTH".
//
// Num can be from "First" to END(According to the lines of Selection) Up/Down by "Step".
// RandomNum is between "First" and "End".
// Num/RandomNum can be formatted in fixed WIDTH, and PaddingChar default is at Begin of Num/RandomNum.
// if WIDTH<0, PaddingChar be Added to the end of Num/RandomNum.
//
// Support the localization language files.
//
// 2 way of run this script:
// 1.) GUI without arguments, arguments saved to ini after executed.
//     This script show a messagebox to tell you how long be spent on your large text when more than 1.4 s.
// 2.) No GUI but with arguments, and never read and write the Arguments from/to ini.
//     Example:
//     -"LineNumber" Call("Scripts::Main", 1, "NumberCount.js", `-Str="\N|$1" -Num=1 -Rand=0 -Lazy=0 -First=1 -Step=1 -Width=4 -Pad=" "`)

try
{
  var hMainWnd=AkelPad.GetMainWnd();
}
catch (oError)
{
  WScript.Quit();
}

var oSys        =AkelPad.SystemFunction();
var pScriptName =WScript.ScriptName;

var sStr  =AkelPad.GetArgValue("Str"  , "$1");
var bNum  =AkelPad.GetArgValue("Num"  ,    0);
var bRand =AkelPad.GetArgValue("Rand" ,    0);
var bLazy =AkelPad.GetArgValue("Lazy" ,    0);
var nFirst=AkelPad.GetArgValue("First",    1);
var nStep =AkelPad.GetArgValue("Step" ,    1);
var nWidth=AkelPad.GetArgValue("Width",    1);
var sPad  =AkelPad.GetArgValue("Pad"  ,  "0");

var bHex=false;

// Without GUI
if (AkelPad.GetArgLine(0))
{
  if (isNaN(nFirst)){nFirst=1;}
  if (isNaN(nStep)){nStep=1;}
  if (isNaN(nWidth)){nWidth=1;}

  if (bRand)
  {
    bNum=true;
  }

  NumberCount();
  WScript.Quit();
}

// With GUI
var hInstanceDLL=AkelPad.GetInstanceDll();
var pClassName  ="AkelPad::Scripts::"+pScriptName+"::"+oSys.Call("kernel32::GetCurrentProcessId");

var hWndDialog;
var lpBuffer;
var nStrings=10;
var lpStrings=[];
var oSet=AkelPad.ScriptSettings();

var nBegSelIn = 0;
var nEndSelIn = 0;
var nMaxLen   = 1024;

if (oSet.Begin(WScript.ScriptBaseName, 0x1 /*POB_READ*/))
{
  //Read settings
  bNum  =oSet.Read("Num"  , 1 /*PO_DWORD*/ );
  bRand =oSet.Read("Rand" , 1 /*PO_DWORD*/ );
  bLazy =oSet.Read("Lazy" , 1 /*PO_DWORD*/ );
  nFirst=oSet.Read("First", 3 /*PO_STRING*/, 1);
  nStep =oSet.Read("Step" , 3 /*PO_STRING*/, 1);
  nWidth=oSet.Read("Width", 1 /*PO_DWORD*/ , 1);
  sPad  =oSet.Read("Pad"  , 3 /*PO_STRING*/);

  //String
  for (i=0; i<nStrings; i+=1)
  {
    lpStrings[i]=oSet.Read("String"+i, 3 /*PO_STRING*/);
    if (typeof lpStrings[i]=="undefined"){break;}
  }

  if (typeof lpStrings[0]!="undefined"){sStr=lpStrings[0];}

  oSet.End();
}

if (typeof lpStrings[0]=="undefined"){lpStrings[0]=sStr;}

var sTxtStr           ="String";
var sTxtNum           ="Number";
var sTxtRand          ="Random";
var sTxtLazy          ="Lazy mode";
var sTxtFirst         ="First";
var sTxtStep          ="Step";
var sTxtEnd           ="End";
var sTxtWidth         ="Width";
var sTxtPad           ="Padding char";
var sTxtSeconds       ="Seconds";
var sTxtOK            ="OK";
var sTxtCancel        ="Cancel";
var sTxtBackSlace     ="backslash";
var sTxtReturn        ="return";
var sTxtLineFeed      ="line feed";
var sTxtTabulation    ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine  ="original line";
var sTxtEmpty         ="Empty";

var fso      =new ActiveXObject("Scripting.FileSystemObject");
var pLangFile=AkelPad.GetAkelDir(5)+ "\\Langs\\" + pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng";
var nError;

if (fso.FileExists(pLangFile))
{
  try
  {
    AkelPad.Include("..\\Langs\\"+pScriptName.substring(0, pScriptName.lastIndexOf("."))+"_"+AkelPad.GetLangId().toString()+".lng");
  }
  catch (nError)
  {
  }
}

var aWnd            =[];
var IDC_CBB_STR     =1000;
var IDC_STATIC_STR  =1001;
var IDC_SYNTEX      =1002;
var IDC_NUM         =1003;
var IDC_RAND        =1004;
var IDC_LAZY        =1005;
var IDC_STATIC_FIRST=1006;
var IDC_EDT_FIRST   =1007;
var IDC_STATIC_STEP =1008;
var IDC_EDT_STEP    =1009;
var IDC_STATIC_WIDTH=1010;
var IDC_EDT_WIDTH   =1011;
var IDC_STATIC_PAD  =1012;
var IDC_EDT_PAD     =1013;
var IDC_OK          =1014;
var IDC_CANCEL      =1015;

var WNDTYPE =0;
var WND     =1;
var WNDEXSTY=2;
var WNDSTY  =3;
var WNDX    =4;
var WNDY    =5;
var WNDW    =6;
var WNDH    =7;
var WNDTXT  =8;
//0x50000000 - WS_VISIBLE|WS_CHILD
//0x50010000 - WS_VISIBLE|WS_CHILD|WS_TABSTOP
//0x50010003 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_AUTOCHECKBOX
//0x50210042 - WS_VISIBLE|WS_CHILD|WS_TABSTOP|WS_VSCROLL|CBS_DROPDOWN|CBS_AUTOHSCROLL
//0x58010000 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_PUSHBUTTON
//0x58010003 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|BS_AUTOCHECKBOX
//0x58010080 - WS_VISIBLE|WS_CHILD|WS_DISABLED|WS_TABSTOP|ES_AUTOHSCROLL
//Windows                WNDTYPE, WND, WNDEXSTY,     WNDSTY,WNDX,WNDY,WNDW,WNDH,           WNDTXT
aWnd[IDC_CBB_STR     ]=["COMBOBOX", 0,        0, 0x50210042,  95,   5, 228, 160,             sStr];
aWnd[IDC_STATIC_STR  ]=["STATIC",   0,        0, 0x50000000,   5,   8,  85,  20,          sTxtStr];
aWnd[IDC_SYNTEX      ]=["BUTTON",   0,        0, 0x50010000, 303,  30,  20,  20,            " > "];
aWnd[IDC_NUM         ]=["BUTTON",   0,        0, 0x50010003,   5,  33,  85,  20,          sTxtNum];
aWnd[IDC_RAND        ]=["BUTTON",   0,        0, 0x58010003,  95,  33,  85,  20,         sTxtRand];
aWnd[IDC_LAZY        ]=["BUTTON",   0,        0, 0x58010003, 185,  33,  85,  20,         sTxtLazy];
aWnd[IDC_STATIC_FIRST]=["STATIC",   0,        0, 0x50000000,   5,  58,  85,  20,        sTxtFirst];
aWnd[IDC_EDT_FIRST   ]=[  "EDIT",   0,    0x200, 0x58010080,  95,  55, 100,  20,           nFirst];
aWnd[IDC_STATIC_STEP ]=["STATIC",   0,        0, 0x50000000,   5,  83,  85,  20,         sTxtStep];
aWnd[IDC_EDT_STEP    ]=[  "EDIT",   0,    0x200, 0x58010080,  95,  80, 100,  20,            nStep];
aWnd[IDC_STATIC_WIDTH]=["STATIC",   0,        0, 0x50000000,   5, 108,  85,  20,        sTxtWidth];
aWnd[IDC_EDT_WIDTH   ]=[  "EDIT",   0,    0x200, 0x58010080,  95, 105, 100,  20,nWidth.toString()];
aWnd[IDC_STATIC_PAD  ]=["STATIC",   0,        0, 0x50000000,   5, 133,  85,  20,          sTxtPad];
aWnd[IDC_EDT_PAD     ]=[  "EDIT",   0,    0x200, 0x58010080,  95, 130,  50,  20,             sPad];
aWnd[IDC_OK          ]=["BUTTON",   0,        0, 0x58010000, 263, 105,  60,  20,           sTxtOK];
aWnd[IDC_CANCEL      ]=["BUTTON",   0,        0, 0x50010000, 263, 130,  60,  20,       sTxtCancel];

if (AkelPad.WindowRegisterClass(pClassName))
{
  lpBuffer=AkelPad.MemAlloc(nMaxLen * _TSIZE);
  if (lpBuffer)
  {
    //Create dialog
    hWndDialog=oSys.Call("user32::CreateWindowEx"+_TCHAR,
      0,               //dwExStyle
      pClassName,      //lpClassName
      0,               //lpWindowName
      0x90CA0000,      //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
      0,               //x
      0,               //y
      333,             //nWidth
      180,             //nHeight
      hMainWnd,        //hWndParent
      0,               //ID
      hInstanceDLL,    //hInstance
      DialogCallback); //Script function callback. To use it class must be registered by WindowRegisterClass.
  
    if (hWndDialog)
    {
      //Allow other scripts running
      AkelPad.ScriptNoMutex();
      //Message loop
      AkelPad.WindowGetMessage();
    }
    AkelPad.MemFree(lpBuffer);
  }

  AkelPad.WindowUnregisterClass(pClassName);
}
else
{
  hWndDialog=oSys.Call("user32::FindWindowEx"+_TCHAR, 0, 0, pClassName, 0);
  if (hWndDialog)
  {
    if (oSys.Call("user32::IsIconic", hWndDialog)){oSys.Call("user32::ShowWindow", hWndDialog, 9 /*SW_RESTORE*/);}
    AkelPad.SendMessage(hWndDialog, 7 /*WM_SETFOCUS*/, 0, 0);
  }
}


function DialogCallback(hWnd, uMsg, wParam)
{
  if (uMsg==1)  //WM_CREATE
  {
    var hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);

    //Dialog caption
    oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, pScriptName);

    //Create window
    for (i=1000; i<aWnd.length; i+=1)
    {
      aWnd[i][WND]=oSys.Call("user32::CreateWindowEx"+_TCHAR,
        aWnd[i][WNDEXSTY], //dwExStyle
        aWnd[i][WNDTYPE],  //lpClassName
        0,                 //lpWindowName
        aWnd[i][WNDSTY],   //dwStyle
        aWnd[i][WNDX],     //x
        aWnd[i][WNDY],     //y
        aWnd[i][WNDW],     //nWidth
        aWnd[i][WNDH],     //nHeight
        hWnd,              //hWndParent
        i,                 //ID
        hInstanceDLL,      //hInstance
        0);                //lpParam
      //Set font and text
      SetWindowFontAndText(aWnd[i][WND], hGuiFont, aWnd[i][WNDTXT]);
    }

    //Fill combobox
    for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
    {
      AkelPad.MemCopy(lpBuffer, lpStrings[i], _TSTR);
      AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x143 /*CB_ADDSTRING*/, 0, lpBuffer);
    }
    AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);

    //Checks
    if (bNum)
    {
      AkelPad.SendMessage(aWnd[IDC_NUM][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
      EnableNumWin(bNum);
    }

    if (bRand)
    {
      AkelPad.SendMessage(aWnd[IDC_RAND][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
      oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], sTxtEnd);
    }

    if (bLazy)
    {
      AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 241 /*BM_SETCHECK*/, 1 /*BST_CHECKED*/, 0);
    }

    //Center dialog
    CenterWindow(hMainWnd, hWnd);
  }
  else if (uMsg==7)  //WM_SETFOCUS
  {
    oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
  }
  else if (uMsg==256)  //WM_KEYDOWN
  {
    if (wParam==27)    //VK_ESCAPE
    {
      //Escape key pushes Cancel button
      oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
    }
    else if (wParam==13)  //VK_RETURN
    {
      if (oSys.Call("user32::IsWindowEnabled", aWnd[IDC_OK][WND]))
      {
        //Return key pushes OK button
        oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 273 /*WM_COMMAND*/, IDC_OK, 0);
      }
    }
  }
  else if (uMsg==273)  //WM_COMMAND
  {
    nLowParam = LoWord(wParam);
    nHiwParam = HiWord(wParam);
    bCloseCB1 = 1;

    if (nLowParam==IDC_NUM       ||
             nLowParam==IDC_CBB_STR   ||
             nLowParam==IDC_EDT_FIRST ||
             nLowParam==IDC_EDT_STEP  ||
             nLowParam==IDC_EDT_WIDTH)
    {
      if (nLowParam==IDC_NUM)
      {
        bNum=AkelPad.SendMessage(aWnd[IDC_NUM][WND], 240 /*BM_GETCHECK*/, 0, 0);
        EnableNumWin(bNum);
      }
      else if (nLowParam == IDC_CBB_STR)
      {
        if (nHiwParam == 3 /*CBN_SETFOCUS*/)
        {
          SetWindowFontAndText(aWnd[IDC_CBB_STR][WND], hGuiFont, sStr);
          AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x0142 /*CB_SETEDITSEL*/, 0, MkLong(nBegSelIn, nEndSelIn));
        }
        else if (nHiwParam == 10 /*CBN_SELENDCANCEL*/)
        {
          nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
        }
        else if (nHiwParam == 5 /*CBN_EDITCHANGE*/)
        {
          nBegSelIn = LoWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          nEndSelIn = HiWord(AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x140 /*CB_GETEDITSEL*/, 0, 0));
          oSys.Call("user32::GetWindowText" + _TCHAR, aWnd[IDC_CBB_STR][WND], lpBuffer, nMaxLen);
          sStr = AkelPad.MemRead(lpBuffer, _TSTR);
        }
        else if (nHiwParam == 1 /*CBN_SELCHANGE*/)
        {
          nNumStrIn = AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x147 /*CB_GETCURSEL*/, 0, 0);
          AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x148 /*CB_GETLBTEXT*/, nNumStrIn, lpBuffer);
          pStrIn = AkelPad.MemRead(lpBuffer, _TSTR);
        }
        else if (nHiwParam == 7 /*CBN_DROPDOWN*/)
        {
          bCloseCB2 = 0;
        }
        else if (nHiwParam == 8 /*CBN_CLOSEUP*/)
        {
          bCloseCB2 = 1;
        }
      }

      if (bNum)
      {
        if (DisableBtnOK(aWnd[IDC_EDT_FIRST][WND])){return;}
        if (DisableBtnOK(aWnd[IDC_EDT_STEP][WND])){return;}
        if (DisableBtnOK(aWnd[IDC_EDT_WIDTH][WND])){return;}
        sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);
        if (sStr.search(/\\N/g) == -1 && sStr.search(/\\H/g) == -1){return;}
      }
      oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? true : false);
    }
    else if (nLowParam==IDC_RAND)
    {
      bRand=AkelPad.SendMessage(aWnd[IDC_RAND][WND], 240 /*BM_GETCHECK*/, 0, 0);
      oSys.Call("user32::SetWindowText"+_TCHAR, aWnd[IDC_STATIC_STEP][WND], (bRand) ? sTxtEnd : sTxtStep);
    }
    else if (nLowParam==IDC_LAZY)
    {
      bLazy=AkelPad.SendMessage(aWnd[IDC_LAZY][WND], 240 /*BM_GETCHECK*/, 0, 0);
    }
    else if (nLowParam==IDC_SYNTEX)
    {
      if (!AkelPad.Include("ShowMenu.js"))
      {
       AkelPad.MessageBox(hWnd, sTxtIncShowMenuJs, pScriptName, 0 /*MB_OK*/);
      }
      else
      {
        //Variables
        var lpItems;
        var nItem;
      
        lpItems=[["$1\t"+sTxtOriginalLine, MF_NORMAL, 101],
                 ["\\N\t"+sTxtNumberSequence, MF_NORMAL, 102],
                 ["\\H\t"+sTxtHexNumSequence, MF_NORMAL, 103],
                 ["", MF_SEPARATOR],
                 ["\\\\\t"+sTxtBackSlace, MF_NORMAL, 104],
                 ["\\r\t"+sTxtReturn, MF_NORMAL, 105],
                 ["\\n\t"+sTxtLineFeed, MF_NORMAL, 106],
                 ["\\t\t"+sTxtTabulation, MF_NORMAL, 107],
                 ["", MF_SEPARATOR],
                 [sTxtEmpty, (oSys.Call("user32::GetWindowTextLength"+_TCHAR, aWnd[IDC_CBB_STR][WND])) ? MF_NORMAL|MF_LAST : MF_NORMAL|MF_GRAYED|MF_LAST, 108]];

        nItem=ShowMenu(lpItems, POS_CURSOR, POS_CURSOR);
        if (nItem == -1)
        {
        }
        else
        {
          nItem=lpItems[nItem][2];
          switch (nItem)
          {
            case 101 : FunToIn("$1");
              break;
            case 102 : FunToIn("\\N");
              break;
            case 103 : FunToIn("\\H");
              break;
            case 104 : FunToIn("\\\\");
              break;
            case 105 : FunToIn("\\r");
              break;
            case 106 : FunToIn("\\n");
              break;
            case 107 : FunToIn("\\t");
              break;
            case 108 :
              sStr = "";
              oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
              break;
          }
        }
      }
    }
    else if (nLowParam==IDC_OK)
    {
      //String
      sStr=GetWindowText(aWnd[IDC_CBB_STR][WND]);

      if (nStrings)
      {
        for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
        {
          if (lpStrings[i]==sStr)
          {
            AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x144 /*CB_DELETESTRING*/, i, 0);
            DeleteFromArray(lpStrings, i, 1);
          }
        }

        InsertInArray(lpStrings, sStr, 0);

        if (lpStrings.length>nStrings){DeleteFromArray(lpStrings, -1, 1);}

        AkelPad.MemCopy(lpBuffer, sStr, _TSTR);
        AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14A /*CB_INSERTSTRING*/, 0, lpBuffer);
        AkelPad.SendMessage(aWnd[IDC_CBB_STR][WND], 0x14E /*CB_SETCURSEL*/, 0, 0);
      }

      if (bNum)
      {
        sPad  =GetWindowText(aWnd[IDC_EDT_PAD][WND]);
        nFirst=GetWindowText(aWnd[IDC_EDT_FIRST][WND]);
        nStep =GetWindowText(aWnd[IDC_EDT_STEP][WND]);

        nFirstCur=GetWindowText(aWnd[IDC_EDT_FIRST][WND],"n");
        nStepCur =GetWindowText(aWnd[IDC_EDT_STEP][WND] ,"n");

        nWidth=parseInt(GetWindowText(aWnd[IDC_EDT_WIDTH][WND],"n"),10);
      }

      var d=new Date();
      var t=d.getTime();

      NumberCount();

      var d=new Date();
      t=(d.getTime()-t)/1000;

      if (Math.round(t)>1){AkelPad.MessageBox(hWndDialog, "    "+t.toFixed(3)+" "+sTxtSeconds, pScriptName, 0 /*MB_OK*/);}
    }
    else if (nLowParam==IDC_CANCEL)
    {
      oSys.Call("user32::PostMessage"+_TCHAR, hWnd, 16 /*WM_CLOSE*/, 0, 0);
    }
  }
  else if (uMsg==16)  //WM_CLOSE
  {
    if (oSet.Begin(WScript.ScriptBaseName, 0x2 /*POB_SAVE*/))
    {
      //Save settings
      oSet.Write("Num"  , 1 /*PO_DWORD*/ ,             bNum);
      oSet.Write("Rand" , 1 /*PO_DWORD*/ ,            bRand);
      oSet.Write("Lazy" , 1 /*PO_DWORD*/ ,            bLazy);
      oSet.Write("First", 3 /*PO_STRING*/,           nFirst);
      oSet.Write("Step" , 3 /*PO_STRING*/,            nStep);
      oSet.Write("Width", 1 /*PO_DWORD*/ ,           nWidth);
      oSet.Write("Pad"  , 3 /*PO_STRING*/,             sPad);

      //Save string history
      for (i=0; i<nStrings && typeof lpStrings[i]!="undefined"; i+=1)
      {
        oSet.Write("String"+i, 3 /*PO_STRING*/, lpStrings[i]);
      }

      oSet.End();
    }

    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);
  }
  else if (uMsg==2)  //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
}

function GetWindowText(hWnd,cType)
{
  oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
  var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);

  if (cType=="n")
  {
    if (pStrExp==""){pStrExp="1";}

    return Number(pStrExp);
  }
  else {return pStrExp;}
}

function Pad(nCurrentNum,m)
{
  var pNumText;
  var nLen;
  var cPadding="";

  if (bHex)
  {
    pNumText=nCurrentNum.toString(16);
  }
  else
  {
    pNumText=nCurrentNum.toFixed(m);
  }

  if (nCurrentNum<0){pNumText="-"+pNumText.substr(1);}

  nLen=Math.abs(nWidth)-pNumText.length+1;

  while ((nLen-=1)>0)
  {
    cPadding+=sPad;
  }

  if (nWidth<0){pNumText += cPadding;}
  else {pNumText=cPadding+pNumText;}

  return pNumText;
}

function EnableNumWin(bNum)
{
  oSys.Call("user32::EnableWindow", aWnd[IDC_RAND][WND]     , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_LAZY][WND]     , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_FIRST][WND], bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_STEP][WND] , bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_WIDTH][WND], bNum);
  oSys.Call("user32::EnableWindow", aWnd[IDC_EDT_PAD][WND]  , bNum);
}

function NumberCount()
{
  //Variables
  var hWndEdit=AkelPad.GetEditWnd();
  var nSelState=0;
  var SELECTALL=0;
  var NORMALSEL=1;
  var COLUMNSEL=2;
  var pSelText;

  //Esc-sequences
  var sEscStr=sStr.replace(/\\\\/g, "\0");
  sEscStr=sEscStr.replace(/\\r\\n|\\r|\\n/g, "\1");
  sEscStr=sEscStr.replace(/\\t/g, "\t");
  sEscStr=sEscStr.replace(/\0/g, "\\");

  if (bNum && sEscStr.indexOf("\\H") != -1)
  {
    sEscStr=sEscStr.replace(/\\H/g, "\0");
    bHex=true;
  }

  if (bNum){sEscStr=sEscStr.replace(/\\N/g, "\0");}

  if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, true);}

  SetRedraw(hWndEdit, false);

  if (AkelPad.SendMessage(hWndEdit, 3125 /*AEM_GETSEL*/, 0, 0))
  {
    if (AkelPad.SendMessage(hWndEdit, 3127 /*AEM_GETCOLUMNSEL*/, 0, 0))
    {
      nSelState=COLUMNSEL;
      pSelText =AkelPad.GetSelText(2);
    }
    else
    {
      nSelState    =NORMALSEL;
      var nSelStart=AkelPad.GetSelStart();
      var nSelEnd  =AkelPad.GetSelEnd();

      SelCompleteLine(hWndEdit, nSelStart, nSelEnd);

      nSelStart=AkelPad.GetSelStart();
      pSelText =AkelPad.GetSelText(2);

      var pLastStr =pSelText.charAt(pSelText.length-1);

      if (pLastStr=="\n")
      {
        pSelText=pSelText.substr(0, pSelText.length-1);
        CollectGarbage();
      }
    }
  }
  else
  {
    pSelText =AkelPad.GetTextRange(0, -1, 2);
  }

  var oPattern=new RegExp("(^.*$)", "mg");
  pSelText=pSelText.replace(oPattern, sEscStr);
  CollectGarbage();

  if (bNum && sEscStr.indexOf("\0")!=-1)
  {
    pSelText=pSelText.split("\0");
    CollectGarbage();
    var m=0;

    if (nFirstCur==undefined) var nFirstCur=Number(nFirst);
    if (nStepCur==undefined) var nStepCur=Number(nStep);
    if (nFirstCur!=parseInt(nFirstCur,10) || nStepCur!=parseInt(nStepCur,10))
    {
      var r1,r2;
      try{r1=nFirstCur.toString().split(".")[1].length;}catch(e){r1=0;}
      try{r2=nStepCur.toString().split(".")[1].length;}catch(e){r2=0;}
      m=Math.max(r1,r2);
    }

    var nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nFirstCur;

    var pNumText;

    if (!bHex && (nWidth==1 || nWidth==0 || nWidth ==-1))
    {
      for (i=0; i<pSelText.length-1; i+=1)
      {
        pNumText=nCurrentNum.toFixed(m);

        pSelText[i]=pSelText[i]+pNumText;
        if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
        {
          nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
        }
      }
    }
    else
    {
      for (i=0; i<pSelText.length-1; i+=1)
      {
        pNumText=Pad(nCurrentNum,m);

        pSelText[i]=pSelText[i]+pNumText;
        if (!bLazy || bLazy && (pSelText[i+1].indexOf("\n")!=-1))
        {
          nCurrentNum=(bRand) ? nFirstCur+(nStepCur-nFirstCur)*Math.random() : nCurrentNum+nStepCur;
        }
      }
    }
    pSelText=pSelText.join("");
    CollectGarbage();
  }
  pSelText=pSelText.replace(/\1/g, "\n");
  CollectGarbage();

  if (nSelState==COLUMNSEL)
  {
    dwOptions=AkelPad.SendMessage(hWndEdit, 3227 /*AEM_GETOPTIONS*/, 0, 0);
    if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
    AkelPad.ReplaceSel(pSelText);
    if (!(dwOptions & 0x40 /*AECO_PASTESELECTCOLUMN*/)){AkelPad.SendMessage(hWndEdit, 3228 /*AEM_SETOPTIONS*/, 4 /*AECOOP_XOR*/, 0x40 /*AECO_PASTESELECTCOLUMN*/);}
  }
  else if (nSelState==NORMALSEL)
  {
    if (pLastStr=="\n")
    {
      pSelText=pSelText+"\n";
      CollectGarbage();
    }
    AkelPad.ReplaceSel(pSelText);
    nSelEnd=AkelPad.GetSelEnd();
    AkelPad.SetSel(nSelStart,nSelEnd);
  }
  else if (nSelState==SELECTALL)
  {
    AkelPad.SetSel(0, -1);
    AkelPad.ReplaceSel(pSelText);
  }

  if (AkelPad.IsAkelEdit()){AkelPad.SendMessage(hWndEdit, 3185 /*AEM_LOCKSCROLL*/, 3 /*SB_BOTH*/, false);}

  SetRedraw(hWndEdit, true);

  pSelText=null;
  CollectGarbage();
}

function DisableBtnOK(hWnd)
{
  oSys.Call("user32::GetWindowText"+_TCHAR, hWnd, lpBuffer, nMaxLen);
  var pStrExp=AkelPad.MemRead(lpBuffer, _TSTR);

  if (pStrExp==""){pStrExp="1";}

  if (isNaN(Number(pStrExp)))
  {
    oSys.Call("user32::EnableWindow", aWnd[IDC_OK][WND], false);
    oSys.Call("user32::SetFocus", hWnd);
    return true;
  }
}

function InsertInArray(lpArray, lpItem, nPos)
{
  //For MS JScript backward compatibility
  var i;

  if (nPos<0){nPos=lpArray.length+nPos+1;}
  if (nPos<0){nPos=0;}
  if (nPos>lpArray.length){nPos=lpArray.length;}

  for (i=lpArray.length; i >= 0; i-=1)
  {
    if (i==nPos)
    {
      lpArray[i]=lpItem;
      break;
    }
    lpArray[i]=lpArray[i-1];
  }
}

function DeleteFromArray(lpArray, nPos, nCount)
{
  //For MS JScript backward compatibility
  var i;

  if (nPos<0){nPos=lpArray.length+nPos;}
  if (nPos<0 || nPos >= lpArray.length){return;}
  if (nPos+nCount >= lpArray.length){nCount=lpArray.length-nPos;}

  for (i=nPos; i+nCount<lpArray.length; i+=1)
  {
    lpArray[i]=lpArray[i+nCount];
  }
  lpArray.length-=nCount;
}

function SetWindowFontAndText(hWnd, hFont, pText)
{
  if (hFont){AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, 1);}

  AkelPad.MemCopy(lpBuffer, pText.toString().substr(0, 255).replace(/\r$/, ""), _TSTR);
  oSys.Call("user32::SetWindowText"+_TCHAR, hWnd, lpBuffer);
}

function SetRedraw(hWnd, bRedraw)
{
  AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
  if (bRedraw){oSys.Call("user32::InvalidateRect", hWnd, 0, true);}
}

function RectToArray(lpRect, rcRect)
{
  rcRect.left  =AkelPad.MemRead(lpRect   , 3 /*DT_DWORD*/);
  rcRect.top   =AkelPad.MemRead(lpRect+4 , 3 /*DT_DWORD*/);
  rcRect.right =AkelPad.MemRead(lpRect+8 , 3 /*DT_DWORD*/);
  rcRect.bottom=AkelPad.MemRead(lpRect+12, 3 /*DT_DWORD*/);
  return rcRect;
}

function CenterWindow(hWndParent, hWnd)
{
  var lpRect;
  var rcWndParent=[];
  var rcWnd=[];
  var X;
  var Y;

  lpRect=AkelPad.MemAlloc(16);
  if (lpRect)  //sizeof(RECT)
  {
    if (!hWndParent){hWndParent=oSys.Call("user32::GetDesktopWindow");}

    oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
    RectToArray(lpRect, rcWndParent);

    oSys.Call("user32::GetWindowRect", hWnd, lpRect);
    RectToArray(lpRect, rcWnd);

    //Center window
    X=rcWndParent.left+((rcWndParent.right-rcWndParent.left)/2-(rcWnd.right-rcWnd.left)/2);
    Y=rcWndParent.top +((rcWndParent.bottom-rcWndParent.top)/2-(rcWnd.bottom-rcWnd.top)/2);

    oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE*/);

    AkelPad.MemFree(lpRect);
  }
}

function SelCompleteLine(hWnd, nMinSel, nMaxSel)
{
  if (nMinSel<nMaxSel)
  {
    var nMinLine      =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/,        0, nMinSel);
    var nMaxLine      =AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/,        0, nMaxSel);
    var nMinLineIndex =AkelPad.SendMessage(hWnd, 187       /*EM_LINEINDEX*/, nMinLine,       0);
    var nMaxLineIndex =AkelPad.SendMessage(hWnd, 187       /*EM_LINEINDEX*/, nMaxLine,       0);
    var nMaxLineLength=AkelPad.SendMessage(hWnd, 193      /*EM_LINELENGTH*/,  nMaxSel,       0);
    if (nMaxLineIndex==nMaxSel){nMaxLine-=1;}
    else if (nMaxLineLength){nMaxSel=nMaxLineIndex+nMaxLineLength+1;}
    nMinSel=nMinLineIndex;
    AkelPad.SetSel(nMinSel, nMaxSel);
    return nMaxLine-nMinLine+1;
  }
  return 0;
}

function FunToIn(pTxt)
{
  if (pTxt.indexOf("(...)") > -1)
  {
    pTxt   = pTxt.replace("...", sStr.substring(nBegSelIn, nEndSelIn));
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    if (nBegSelIn == nEndSelIn)
    {
      nBegSelIn = nBegSelIn + pTxt.length - 1;
      nEndSelIn = nBegSelIn;
    }
    else
    {
      nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
      nEndSelIn = nEndSelIn + pTxt.indexOf("(") + 1;
    }
  }
  else if (pTxt.indexOf("(") > -1)
  {
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    nBegSelIn = nBegSelIn + pTxt.indexOf("(") + 1;
    nEndSelIn = nBegSelIn;
  }
  else
  {
    sStr = sStr.substr(0, nBegSelIn) + pTxt + sStr.substr(nEndSelIn);
    nBegSelIn = nBegSelIn + pTxt.length;
    nEndSelIn = nBegSelIn;
  }

  oSys.Call("user32::SetFocus", aWnd[IDC_CBB_STR][WND]);
}

function LoWord(nParam)
{
  return (nParam & 0xffff);
}

function HiWord(nParam)
{
  return ((nParam >> 16) & 0xffff);
}

function MkLong(nLoWord, nHiWord)
{
  return (nHiWord << 16) | (nLoWord & 0xffff);
}
- Insert text or/and a sequence of Num/RandomNum to Begin or/and End of every line. May be need ShowMenu.js
This is my first release JS. Base on some other scripts. :)

Code: Select all

sTxtStr               ="String";
sTxtNum               ="Number";
sTxtRand              ="Random";
sTxtLazy              ="Lazy mode";
sTxtFirst             ="First";
sTxtStep              ="Step";
sTxtEnd               ="End";
sTxtWidth             ="Width";
sTxtPad               ="Padding char";
sTxtSeconds           ="Seconds";
sTxtOK                ="OK";
sTxtCancel            ="Cancel";
var sTxtBackSlace     ="backslash";
var sTxtReturn        ="return";
var sTxtLineFeed      ="line feed";
var sTxtTabulation    ="tabulation";
var sTxtNumberSequence="number sequence";
var sTxtHexNumSequence="Hex number sequence";
var sTxtOriginalLine  ="original line";
var sTxtEmpty         ="Empty";
Last edited by cnnnc on Mon Dec 17, 2012 1:06 am, edited 8 times in total.

Offline
Posts: 4
Joined: Mon Apr 19, 2010 3:03 am

Jion lines together

Post by bluestone »

Code: Select all

var AkelPad=new ActiveXObject("AkelPad.document");
var WshShell=new ActiveXObject("WScript.shell");

var IDC_INPUT_PREPEND          =1001
var IDC_INPUT_APPEND           =1002
var IDC_INPUT_SEPARATOR        =1003
var IDC_OK                     =1004
var IDC_CANCEL                 =1005
var IDC_STATIC                 =-1

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pScriptName=WScript.ScriptName;
var hInstanceDLL=AkelPad.GetInstanceDll();
var bAkelEdit=AkelPad.IsAkelEdit();

var hWndDialog;
var hWndStatic3;
var hWndSeparator;
var hWndStatic1;
var hWndPrepend;
var hWndStatic2;
var hWndAppend;
var hWndOK;
var hWndCancel;
var hGuiFont;
var lpBuffer;
var pStrPrepend = "";
var pStrAppend = "";
var pStrSeparator = "";
var nStrSeparatorLen;
var _TCHAR;
var _TSTR;
var _TSIZE;

if (hMainWnd)
{
  if (ScriptEngineMajorVersion() <= 5 && ScriptEngineMinorVersion() < 5)
  {
    AkelPad.MessageBox(hMainWnd, "JScript version is less than 5.5.", pScriptName, 48 /*MB_ICONEXCLAMATION*/);
    WScript.Quit();
  }

  if (AkelPad.IsOldWindows())
  {
    _TCHAR="A";
    _TSTR=0 /*DT_ANSI*/;
    _TSIZE=1 /*sizeof(char)*/;
  }
  else
  {
    _TCHAR="W";
    _TSTR=1 /*DT_UNICODE*/;
    _TSIZE=2 /*sizeof(wchar_t)*/;
  }

  if (AkelPad.WindowRegisterClass(pScriptName))
  {
    if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
    {
      //Create dialog
      AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
      hWndDialog=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                           0,               //dwExStyle
                           lpBuffer,        //lpClassName
                           0,               //lpWindowName
                           0x90CA0000,
                           0,               //x
                           0,               //y
                           360,             //nWidth
                           110,             //nHeight
                           hMainWnd,        //hWndParent
                           0,               //ID
                           hInstanceDLL,    //hInstance
                           DialogCallback);
      if (hWndDialog)
      {
        //Disable main window, to make dialog modal
        oSys.Call("user32::EnableWindow", hMainWnd, false);
        //Message loop
        AkelPad.WindowGetMessage();
      }
      AkelPad.MemFree(lpBuffer);
    }
    AkelPad.WindowUnregisterClass(pScriptName);
  }
}

function DialogCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 1)  //WM_CREATE
  {
    try
    {
      pStrPrepend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend");   
      pStrAppend=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append");  

pStrSeparator=WshShell.RegRead("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator");   
    }
    catch (nError)
    {
    }

    hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);

    //Dialog caption
    AkelPad.MemCopy(lpBuffer, pScriptName, _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpBuffer);


    ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic1=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         10,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic1, hGuiFont, "Prepend:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndPrepend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         60,           //x
                         10,           //y
                         45,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_PREPEND,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndPrepend, hGuiFont, pStrPrepend);

     ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic2=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         110,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic2, hGuiFont, "Append:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndAppend=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         152,           //x
                         10,           //y
                         45,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_APPEND,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndAppend, hGuiFont, pStrAppend);

    ////Static window

    //Create window
    AkelPad.MemCopy(lpBuffer, "STATIC", _TSTR);
    hWndStatic3=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50000000,   //WS_VISIBLE|WS_CHILD
                         203,           //x
                         10,           //y
                         60,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_STATIC,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndStatic3, hGuiFont, "Separator:");


    ////Edit window

    //Create window
    AkelPad.MemCopy(lpBuffer, "EDIT", _TSTR);
    hWndSeparator=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0x200,        //WS_EX_CLIENTEDGE
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010080,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP|ES_AUTOHSCROLL
                         265,           //x
                         10,           //y
                         80,          //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_INPUT_SEPARATOR,    //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndSeparator, hGuiFont, pStrSeparator);

    

    ////OK button window

    //Create window
    AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
    hWndOK=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                     0,            //dwExStyle
                     lpBuffer,     //lpClassName
                     0,            //lpWindowName
                     0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
                     179,          //x
                     50,          //y
                     75,           //nWidth
                     23,           //nHeight
                     hWnd,         //hWndParent
                     IDC_OK,       //ID
                     hInstanceDLL, //hInstance
                     0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndOK, hGuiFont, "OK");


    ////Cancel button window

    //Create window
    AkelPad.MemCopy(lpBuffer, "BUTTON", _TSTR);
    hWndCancel=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,            //dwExStyle
                         lpBuffer,     //lpClassName
                         0,            //lpWindowName
                         0x50010000,   //WS_VISIBLE|WS_CHILD|WS_TABSTOP
                         260,          //x
                         50,          //y
                         75,           //nWidth
                         23,           //nHeight
                         hWnd,         //hWndParent
                         IDC_CANCEL,   //ID
                         hInstanceDLL, //hInstance
                         0);           //lpParam
    //Set font and text
    SetWindowFontAndText(hWndCancel, hGuiFont, "Cancel");

    //Center dialog
    CenterWindow(hMainWnd, hWnd);
  }
  else if (uMsg == 7)  //WM_SETFOCUS
  {
    oSys.Call("user32::SetFocus", hWndSeparator);
  }
  else if (uMsg == 256)  //WM_KEYDOWN
  {
    if (wParam == 27)  //VK_ESCAPE
    {
      //Escape key pushes Cancel button
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_CANCEL, 0);
    }
    else if (wParam == 13)  //VK_RETURN
    {
      //Return key pushes OK button
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, IDC_OK, 0);
    }
  }
  else if (uMsg == 273)  //WM_COMMAND
  {
    if ((wParam & 0xffff) == IDC_INPUT_SEPARATOR)
    {
      nStrSeparatorLen=oSys.Call("user32::GetWindowTextLength" + _TCHAR, hWndSeparator);

      if (nStrSeparatorLen)
      {
        oSys.Call("user32::EnableWindow", hWndOK, true);
      }
      else
      {
        oSys.Call("user32::EnableWindow", hWndOK, false);
      }
    }
    else if ((wParam & 0xffff) == IDC_OK)
    {
      oSys.Call("user32::GetWindowText" + _TCHAR, hWndSeparator, lpBuffer, 256);
      pStrSeparator=AkelPad.MemRead(lpBuffer, _TSTR);
	  oSys.Call("user32::GetWindowText" + _TCHAR, hWndAppend, lpBuffer, 256);
      pStrAppend=AkelPad.MemRead(lpBuffer, _TSTR);
      oSys.Call("user32::GetWindowText" + _TCHAR, hWndPrepend, lpBuffer, 256);
      pStrPrepend=AkelPad.MemRead(lpBuffer, _TSTR);
      oSys.Call("user32::EnableWindow", hWndOK, false);

      LinesJoin();
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
    }
    else if ((wParam & 0xffff) == IDC_CANCEL)
    {
      oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
    }
  }
  else if (uMsg == 16)  //WM_CLOSE
  {
    //Enable main window
    oSys.Call("user32::EnableWindow", hMainWnd, true);

    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Prepend", pStrPrepend, "REG_SZ");
    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Append", pStrAppend, "REG_SZ");
    WshShell.RegWrite("HKCU\\Software\\Akelsoft\\AkelPad\\Plugs\\Scripts\\LinesJoin\\Separator", pStrSeparator
, "REG_SZ");
    //Destroy dialog
    oSys.Call("user32::DestroyWindow", hWnd);
  }
  else if (uMsg == 2)  //WM_DESTROY
  {
    //Exit message loop
    oSys.Call("user32::PostQuitMessage", 0);
  }
  return 0;
}

function LinesJoin() {
  var hWndEdit=AkelPad.GetEditWnd();
  var pSelText;
  var pArray;
  var pResult;
  var nSelStart;
  var nSelEnd;

    nSelStart=AkelPad.GetSelStart();
    nSelEnd=AkelPad.GetSelEnd();
    if (nSelStart == nSelEnd)
      AkelPad.SetSel(0, -1);
    else
      SelCompliteLine(hWndEdit, nSelStart, nSelEnd);
    nSelStart=AkelPad.GetSelStart();
    nSelEnd=AkelPad.GetSelEnd();
    pSelText=AkelPad.GetSelText(2 /*\n*/);
    if (!bAkelEdit)
      pSelText=pSelText.replace(/\r/g, "\n");
    pResult="";
	pArray = pSelText.split("\n");
	i = pArray.length-1;
	if(pArray[i].length > 0) {
		i = i + 1;
	}
    if (pStrPrepend.length > 0)
    {
      for (var j=0; j<i;j++) {
		pArray[j] = pStrPrepend + pArray[j]; 
	  }
    }
    if (pStrAppend.length > 0)
    {
      for (var j=0; j<i;j++) {
		pArray[j] = pArray[j] + pStrAppend; 
	  }
    }
    pResult = pArray.join(pStrSeparator);
    AkelPad.ReplaceSel(pResult);
    AkelPad.SetSel(nSelStart, nSelStart);
    AkelPad.SetSel(nSelStart, nSelStart + pResult.length);
}

//************************************************//
//Common Functions
//************************************************//

function SetWindowFontAndText(hWnd, hFont, pText)
{
  var lpWindowText;

  AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, true);

  if (lpWindowText=AkelPad.MemAlloc(256 * _TSIZE))
  {
    AkelPad.MemCopy(lpWindowText, pText.substr(0, 255), _TSTR);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, lpWindowText);

    AkelPad.MemFree(lpWindowText);
  }
}

function RectToArray(lpRect, rcRect)
{
  rcRect.left=AkelPad.MemRead(lpRect, 3 /*DT_DWORD*/);
  rcRect.top=AkelPad.MemRead(lpRect + 4, 3 /*DT_DWORD*/);
  rcRect.right=AkelPad.MemRead(lpRect + 8, 3 /*DT_DWORD*/);
  rcRect.bottom=AkelPad.MemRead(lpRect + 12, 3 /*DT_DWORD*/);
  return rcRect;
}

function CenterWindow(hWndParent, hWnd)
{
  var lpRect;
  var rcWndParent=[];
  var rcWnd=[];
  var X;
  var Y;

  if (lpRect=AkelPad.MemAlloc(16))  //sizeof(RECT)
  {
    if (!hWndParent)
      hWndParent=oSys.Call("user32::GetDesktopWindow");

    oSys.Call("user32::GetWindowRect", hWndParent, lpRect);
    RectToArray(lpRect, rcWndParent);

    oSys.Call("user32::GetWindowRect", hWnd, lpRect);
    RectToArray(lpRect, rcWnd);

    //Center window
    X=rcWndParent.left + ((rcWndParent.right - rcWndParent.left) / 2 - (rcWnd.right - rcWnd.left) / 2);
    Y=rcWndParent.top + ((rcWndParent.bottom - rcWndParent.top) / 2 - (rcWnd.bottom - rcWnd.top) / 2);

    oSys.Call("user32::SetWindowPos", hWnd, 0, X, Y, 0, 0, 0x15 /*SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE*/);

    AkelPad.MemFree(lpRect);
  }
}

function SelCompliteLine(hWnd, nMinSel, nMaxSel)
{
  var nMinLine;
  var nMaxLine;
  var nMinLineIndex;
  var nMaxLineIndex;
  var nMaxLineLength;

  if (nMinSel < nMaxSel)
  {
    nMinLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMinSel);
    nMaxLine=AkelPad.SendMessage(hWnd, 1078 /*EM_EXLINEFROMCHAR*/, 0, nMaxSel);
    nMinLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMinLine, 0);
    nMaxLineIndex=AkelPad.SendMessage(hWnd, 187 /*EM_LINEINDEX*/, nMaxLine, 0);
    nMaxLineLength=AkelPad.SendMessage(hWnd, 193 /*EM_LINELENGTH*/, nMaxSel, 0);

    if (nMaxLineIndex == nMaxSel) --nMaxLine;
    else if (nMaxLineLength) nMaxSel=nMaxLineIndex + nMaxLineLength + 1;
    nMinSel=nMinLineIndex;

    AkelPad.SetSel(nMinSel, nMaxSel);
    return nMaxLine - nMinLine + 1;
  }
  return 0;
}

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

I modified SplitSwitch.js, the script written by Instructor.
Now, menu options can be given in any order.

Code: Select all

/// Split window switch for AkelPad 4.4.4
//
// How to use:
// Add menu to ContextMenu plugin:
//
//  "Split window"
//  {
//    -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
//    -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
//    -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
//    SEPARATOR
//    -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
// or in a different order:
//
//  {
//    -"Two vertical panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
//    -"Two horizontal panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
//    -"Four panes" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
//    SEPARATOR
//    -"Remove split" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
/// Переключение между режимами разделения окна.
//
// Как использовать:
// Добавляем меню в ContextMenu плагин:
//
//  "Разделить окно"
//  {
//    -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "1" "4"`)
//    -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "2" "4"`)
//    -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "3" "4"`)
//    SEPARATOR
//    -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }
//
// или в другом порядке:
//
//  {
//    -"Две вертикальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4213" "1" "4"`)
//    -"Две горизонтальные части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4214" "2" "4"`)
//    -"Четыре части" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4212" "3" "4"`)
//    SEPARATOR
//    -"Убрать разделение" Call("Scripts::Main", 1, "SplitSwitch.js", `"%m" "%i" "4215" "4" "4"`)
//  }


//Arguments
var nMenuHandle=0;
var nItemID=0;
var nAction=0;
var nOpt=0;
var nLastOpt=0;
if (WScript.Arguments.length >= 5)
{
  nMenuHandle=parseInt(WScript.Arguments(0));
  nItemID=parseInt(WScript.Arguments(1));
  nAction=parseInt(WScript.Arguments(2));
  nOpt=parseInt(WScript.Arguments(3));
  nLastOpt=parseInt(WScript.Arguments(4));
}

var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit=AkelPad.GetEditWnd();
var oFunction=AkelPad.SystemFunction();
var nFirstIdInGroup;
var nLastIdInGroup;

if (hMainWnd)
{
  if (nMenuHandle && nItemID && nAction && nOpt && nLastOpt)
  {
    nFirstIdInGroup=nItemID - nOpt + 1;
    nLastIdInGroup=nItemID - nOpt + nLastOpt;
    if (nAction == 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
      nItemID=-1;

    //Turn off
    if (AkelPad.SendMessage(hWndEdit, 3447 /*AEM_GETMASTER*/, 0, 0))
      AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4212 /*IDM_VIEW_SPLIT_WINDOW_ALL*/, 0);

    //Turn on
    if (nAction != 4215 /*IDM_VIEW_SPLIT_WINDOW_OFF*/)
      AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, nAction, 0);

    //Set radio button
    oFunction.AddParameter(nMenuHandle);
    oFunction.AddParameter(nFirstIdInGroup);
    oFunction.AddParameter(nLastIdInGroup);
    oFunction.AddParameter(nItemID);
    oFunction.AddParameter(0x0 /*MF_BYCOMMAND*/);
    oFunction.Call("user32::CheckMenuRadioItem");
  }
} 


PS: Since version 4.7.0 the function performed by the script is built into AkelPad.
Last edited by KDJ on Sun Dec 04, 2011 9:25 pm, edited 3 times in total.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

онлайн-перевод выделенного текста с помощью Google

Post by VladSh »

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=7303#p7303
// Description(1033): Internet request for formed url by the arguments or from selected text and open it in the default browser
// Description(1049): Интернет-запрос по сформированному в аргументах URL или выделенному тексту и открытие его в браузере по умолчанию
// Version: 2.2 (2015.04.01)
// Author: VladSh
// 
// Argument - URL;
// 	\s - место вставки выделенного текста в окне редактирования
// 
// Usage:
// 	 -"Перевести: Auto -> Ru (Google)" Call("Scripts::Main", 1, "InternetRequest.js", `"http://translate.google.com/#auto|ru|\s"`)
// 	 -"Открыть выделенный URL в браузере по умолчанию" Call("Scripts::Main", 1, "InternetRequest.js", `"\s"`) - для выделенного текста

if (WScript.Arguments.length == 1) {
	var pSelText = AkelPad.GetSelText();
	if (pSelText) {
		var pLink = WScript.Arguments(0).replace("\\s", pSelText);
		var WshShell = new ActiveXObject("WScript.Shell");
		if (pLink.search('http:|https:|www.|ftp:|notes:') == -1)
			pLink = 'http:\\' + pLink;
		WshShell.Run('\"' + pLink + '\"');
	}
}
Подробнее, использование (из контекстного меню окна редактирования) см. контекстные меню.
Last edited by VladSh on Fri Jun 19, 2015 8:55 pm, edited 7 times in total.
Post Reply