Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Lenchik
спасибо, так намного быстрей могу правила проверять.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Drugmix
Я на время экспериментов кэш временно отключаю...

Offline
Posts: 46
Joined: Fri Mar 22, 2013 5:05 am
Location: Белово, Кемеровская область, Россия

Post by Egorkaru »

Andrey_A_A wrote:ermakoov, Давай попробуем заново, хотя правильный ответ уже был, изначально цель всего (если я правильно понял) - это
я хочу. повесить это тире на на какую-то клавишу и вводить его одним нажатием
1. Нажми Alt+P - это вызов окна всех плагинов, найди там плагин Hotkeys::Main
2. поставь галочку
3. чуть ниже окна есть кнопочка "Вызвать" - нажми - появится окно настройки горячих клавиш
4.Там, где команда напиши Insert("—") , там где имя напиши "большое тире", нажми мышкой в окошечко , где написано "горячая клавиша" - нажми нужное сочетание клавиш на клавиатуре
5. Нажми "Добавить" --> "Закрыть"
Всё, можешь вызывать...

дополнительный бонус - маленькая менюшка для вставки других специфических символов:

Code: Select all

   "Вставка Символов" Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
    {
     "—  большое тире" Insert("—") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "–  среднее тире" Insert("–") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "±   плюс минус" Insert("±") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "«   левая кавычка" Insert("«") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "»   правая кавычка" Insert("»") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "“   левая кавычка" Insert("“") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "”   правая кавычка" Insert("”") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
     "…  троеточие" Insert("…") Icon("%a\AkelFiles\Plugs\ToolBar.dll",27)
    }
В настоящее время бытует миф, что если в ОС Windows по умолчанию стоит китайская, японская или корейская кодировка, то вставить тире методом Insert("—") увы! не получится, поэтому для вставки тире рекомендуется использовать метод Insert ("\[2014]", 1)

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

К вопросу об этом пожелании

Я знаю, тут нужен скрипт :D. Посмотрел внутрь других скриптов, для меня это темный лес, если честно.

Напишу по-русски. Если это html или php файл, то после печати = проверить, находится ли он внутри строки <...> (точнее, тега, те после печати "<название тега[пробел]"; видимо нужна регулярка). Если да, то после = добавить кавычки и внутрь их поставить каретку.

Может кто показать на примере, как такое сделать?
Last edited by Cuprum on Fri Feb 07, 2014 11:18 am, edited 1 time in total.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Cuprum, когда я(либо кто-то другой) случайно выкатит такой пример, я самолично реализую десятка зо два собственных хотелок(ну и заодно пару чужих).

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

FeyFre
Не очень понял. Такое нельзя сделать?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Инструктор ответил в оригинальной теме как это сделать грубо. Но как это сделать правильно(это возможно, да!), не смотря на то что у меня есть потребность, у меня совсем нету времени написать скрипт-болванку на основании которого можно будет реализовать много хотелок, прикрутить много фич. Я с удовольствием воспользуюсь готовой болванкой, но самому её делать некогда.

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

FeyFre
Теперь понятно. Появился стимул научиться писать скрипты под Акел ;)

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Нужен скрипт, делающий следующее:
Открытый файл сохраняет минимум в двух задаваемых в его настройках местах. В одной папке — полную копию открытого файла (кодировка, имя, расширение), во второй папке — сконвертированный средствами акельпада файла в другую кодировку (конкретно UTF-8 c BOM) с изменением имени и/или расширения. В скрипте должно быть настраиваемым поведение при наличии файлов с такими же именами в папке (вопрос или затирание без вопроса). Скрипт должен иметь возможность подвешивания на кнопку, а также возможность применения ко всем открытым в акеле файлам. Также должно быть настраиваемым поведение, если открытый файл имеет несохраненные изменения (предложить сохранить перед продолжением работы скрипта. работать далее только с уже сохраненными изменениеми, работать далее с несохраненными изменениями (не изменяя состояние открытого файла)). Настройки скрипта лучше подгружать из отдельного файла настроек.

Пример применения.
Есть открытый файл avs.coder.
По вызову скрипта копия файла сохраняется в папку «C:\Users\Leonid\Documents\GitHub\Akelpad-syntax-highlighting\» (задается в настройках скрипта). Другая копия файла, сконвертированная в UTF-8 кодировку (c BOM), с именем файла «avs.utf8.coder» сохраняется в папку «C:\Users\Leonid\Documents\GitHub\Akelpad-syntax-highlighting\source_for_developers\» (тоже задается в настройках, как и дополнение к имени/расширению).

Возможно, чтобы такой скрипт написать нужно воспользоваться viewtopic.php?p=4678#p4678





Я сначала думал cmd-файл создать, но, если относительно первой половины работы скрипта, можно скопировать файл штатными средствами , то вот на счёт второго мне не совсем понятно. Есть параметры командной строки /OpenFile /Recode /SaveFile /quit, мне следует открывать, а потом сохранять с другим именем и кодировкой или же как-то Recode использовать? И как в Exec команду передать полный путь открытого файла?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Lenchik
Перекодировать в UTF-8 можно с помощью Iconv, батник у меня не получился (цикл for - не мое).

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

Post by Instructor »

Lenchik

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var pDir1="C:\\Users\\Leonid\\Documents\\GitHub\\Akelpad-syntax-highlighting\\";
var pDir2="C:\\Users\\Leonid\\Documents\\GitHub\\Akelpad-syntax-highlighting\\source_for_developers\\";
var pFileName;
var pBaseName;
var pFileExt;
var pNewFile;

pFileName=GetFileName(AkelPad.GetEditFile(0));
pBaseName=GetBaseName(pFileName);
pFileExt=GetFileExt(pFileName);

pNewFile=pDir1 + pFileName;
if (!IsFileExist(pNewFile) || AkelPad.MessageBox(hMainWnd, "Overwrite?\n\n" + pNewFile, WScript.ScriptName, 0x24 /*MB_ICONQUESTION|MB_YESNO*/) == 6 /*IDYES*/)
  AkelPad.SaveFile(0, pNewFile, -1, -1, 0);

pNewFile=pDir2 + pBaseName + ".utf8." + pFileExt;
if (!IsFileExist(pNewFile) || AkelPad.MessageBox(hMainWnd, "Overwrite?\n\n" + pNewFile, WScript.ScriptName, 0x24 /*MB_ICONQUESTION|MB_YESNO*/) == 6 /*IDYES*/)
  AkelPad.SaveFile(0, pNewFile, 65001, 1, 0);

function GetFileName(pFile)
{
  var nOffset=pFile.lastIndexOf("\\");

  if (nOffset != -1)
    pFile=pFile.substr(nOffset + 1);
  return pFile;
}

function GetBaseName(pFile)
{
  var nOffset;

  nOffset=pFile.lastIndexOf("\\");
  if (nOffset != -1)
    pFile=pFile.substr(nOffset + 1);
  nOffset=pFile.lastIndexOf(".");
  if (nOffset != -1)
    pFile=pFile.substr(0, nOffset);
  return pFile;
}

function GetFileExt(pFile)
{
  var nOffset=pFile.lastIndexOf(".");
  var pExt="";

  if (nOffset != -1)
    pExt=pFile.substr(nOffset + 1);
  return pExt;
}

function IsFileExist(pFile)
{
  if (oSys.Call("kernel32::GetFileAttributes" + _TCHAR, pFile) == -1)
    return false;
  return true;
}

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Instructor
Спасибо! :) Работает!

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

Post by Infocatcher »

Instructor wrote:

Code: Select all

function IsFileExist(pFile)
{
  if (oSys.Call("kernel32::GetFileAttributes" + _TCHAR, pFile) == -1)
    return false;
  return true;
}
Хм,

Code: Select all

var fso = new ActiveXObject("Scripting.FileSystemObject");
var oSys = AkelPad.SystemFunction();
var curFile = AkelPad.GetEditFile(0);

var c = 10e3;

var i = c + 1, t = new Date().getTime();
while(--i)
	fso.FileExists(curFile);
var dtFSO = new Date().getTime() - t;

var i = c + 1, t = new Date().getTime();
while(--i)
	oSys.Call("kernel32::GetFileAttributes" + _TCHAR, curFile) != -1;
var dtSys = new Date().getTime() - t;

WScript.Echo("FileSystemObject.FileExists(): " + dtFSO + "\nkernel32::GetFileAttributes(): " + dtSys);
FileSystemObject.FileExists(): 125
kernel32::GetFileAttributes(): 211
Видимо, можно как-то еще быстрее проверить.

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

Post by Instructor »

Infocatcher
Это потому, что внутри "FileSystemObject.FileExists()" содержится компилированный вызов API функции, а "kernel32::GetFileAttributes" каждый раз сначала получает дескриптор библиотеки, затем ищет точку входа и только потом вызывает.

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Как в скрипте можно получить текущую строку (ту, на которой находится курсор)?
Post Reply