Page 13 of 24

Posted: Sun Jan 12, 2014 4:36 pm
by Drugmix
Lenchik
спасибо, так намного быстрей могу правила проверять.

Posted: Mon Jan 13, 2014 12:13 pm
by Serge Yolkin
Drugmix
Я на время экспериментов кэш временно отключаю...

Posted: Sat Jan 25, 2014 4:21 am
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)

Posted: Fri Feb 07, 2014 8:15 am
by Cuprum
К вопросу об этом пожелании

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

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

Может кто показать на примере, как такое сделать?

Posted: Fri Feb 07, 2014 9:06 am
by FeyFre
Cuprum, когда я(либо кто-то другой) случайно выкатит такой пример, я самолично реализую десятка зо два собственных хотелок(ну и заодно пару чужих).

Posted: Fri Feb 07, 2014 11:16 am
by Cuprum
FeyFre
Не очень понял. Такое нельзя сделать?

Posted: Fri Feb 07, 2014 4:14 pm
by FeyFre
Инструктор ответил в оригинальной теме как это сделать грубо. Но как это сделать правильно(это возможно, да!), не смотря на то что у меня есть потребность, у меня совсем нету времени написать скрипт-болванку на основании которого можно будет реализовать много хотелок, прикрутить много фич. Я с удовольствием воспользуюсь готовой болванкой, но самому её делать некогда.

Posted: Sat Feb 08, 2014 11:25 am
by Cuprum
FeyFre
Теперь понятно. Появился стимул научиться писать скрипты под Акел ;)

Posted: Mon Mar 10, 2014 9:32 am
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 команду передать полный путь открытого файла?

Posted: Mon Mar 10, 2014 11:48 am
by Skif_off
Lenchik
Перекодировать в UTF-8 можно с помощью Iconv, батник у меня не получился (цикл for - не мое).

Posted: Mon Mar 10, 2014 2:00 pm
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;
}

Posted: Mon Mar 10, 2014 2:58 pm
by Lenchik
Instructor
Спасибо! :) Работает!

Posted: Mon Mar 10, 2014 7:27 pm
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
Видимо, можно как-то еще быстрее проверить.

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

Posted: Thu Jun 26, 2014 6:45 pm
by Cuprum
Как в скрипте можно получить текущую строку (ту, на которой находится курсор)?