AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Помогите написать скрипт
Goto page Previous  1, 2, 3 ... 12, 13, 14, 15, 16  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian)
View previous topic :: View next topic  
Author Message
Drugmix



Joined: 08 Apr 2013
Posts: 444

PostPosted: Sun Jan 12, 2014 4:36 pm    Post subject: Reply with quote

Lenchik
спасибо, так намного быстрей могу правила проверять.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 27 Jul 2010
Posts: 272

PostPosted: Mon Jan 13, 2014 12:13 pm    Post subject: Reply with quote

Drugmix
Я на время экспериментов кэш временно отключаю...
Back to top
View user's profile Send private message
Egorkaru



Joined: 22 Mar 2013
Posts: 73
Location: Белово, Кемеровская область, Россия

PostPosted: Sat Jan 25, 2014 4:21 am    Post subject: Reply with quote

Andrey_A_A wrote:
ermakoov, Давай попробуем заново, хотя правильный ответ уже был, изначально цель всего (если я правильно понял) - это
Quote:
я хочу. повесить это тире на на какую-то клавишу и вводить его одним нажатием

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

дополнительный бонус - маленькая менюшка для вставки других специфических символов:
Code:
   "Вставка Символов" 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)
Back to top
View user's profile Send private message Send e-mail
Cuprum



Joined: 28 Sep 2011
Posts: 215

PostPosted: Fri Feb 07, 2014 8:15 am    Post subject: Reply with quote

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

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

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

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


Last edited by Cuprum on Fri Feb 07, 2014 11:18 am; edited 1 time in total
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2054
Location: Vinnitsa, Ukraine

PostPosted: Fri Feb 07, 2014 9:06 am    Post subject: Reply with quote

Cuprum, когда я(либо кто-то другой) случайно выкатит такой пример, я самолично реализую десятка зо два собственных хотелок(ну и заодно пару чужих).
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Cuprum



Joined: 28 Sep 2011
Posts: 215

PostPosted: Fri Feb 07, 2014 11:16 am    Post subject: Reply with quote

FeyFre
Не очень понял. Такое нельзя сделать?
Back to top
View user's profile Send private message
FeyFre



Joined: 07 Aug 2007
Posts: 2054
Location: Vinnitsa, Ukraine

PostPosted: Fri Feb 07, 2014 4:14 pm    Post subject: Reply with quote

Инструктор ответил в оригинальной теме как это сделать грубо. Но как это сделать правильно(это возможно, да!), не смотря на то что у меня есть потребность, у меня совсем нету времени написать скрипт-болванку на основании которого можно будет реализовать много хотелок, прикрутить много фич. Я с удовольствием воспользуюсь готовой болванкой, но самому её делать некогда.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Cuprum



Joined: 28 Sep 2011
Posts: 215

PostPosted: Sat Feb 08, 2014 11:25 am    Post subject: Reply with quote

FeyFre
Теперь понятно. Появился стимул научиться писать скрипты под Акел Wink
Back to top
View user's profile Send private message
Lenchik



Joined: 10 Jan 2011
Posts: 274

PostPosted: Mon Mar 10, 2014 9:32 am    Post subject: Reply with quote

Нужен скрипт, делающий следующее:
Открытый файл сохраняет минимум в двух задаваемых в его настройках местах. В одной папке — полную копию открытого файла (кодировка, имя, расширение), во второй папке — сконвертированный средствами акельпада файла в другую кодировку (конкретно 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\» (тоже задается в настройках, как и дополнение к имени/расширению).

Возможно, чтобы такой скрипт написать нужно воспользоваться http://akelpad.sourceforge.net/forum/viewtopic.php?p=4678#4678





Я сначала думал cmd-файл создать, но, если относительно первой половины работы скрипта, можно скопировать файл штатными средствами , то вот на счёт второго мне не совсем понятно. Есть параметры командной строки /OpenFile /Recode /SaveFile /quit, мне следует открывать, а потом сохранять с другим именем и кодировкой или же как-то Recode использовать? И как в Exec команду передать полный путь открытого файла?
Back to top
View user's profile Send private message Visit poster's website
Skif_off



Joined: 20 Oct 2013
Posts: 368

PostPosted: Mon Mar 10, 2014 11:48 am    Post subject: Reply with quote

Lenchik
Перекодировать в UTF-8 можно с помощью Iconv, батник у меня не получился (цикл for - не мое).
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5399

PostPosted: Mon Mar 10, 2014 2:00 pm    Post subject: Reply with quote

Lenchik

LenchikGitHub.js
Code:

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;
}
Back to top
View user's profile Send private message Send e-mail
Lenchik



Joined: 10 Jan 2011
Posts: 274

PostPosted: Mon Mar 10, 2014 2:58 pm    Post subject: Reply with quote

Instructor
Спасибо! Smile Работает!
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Mon Mar 10, 2014 7:27 pm    Post subject: Reply with quote

Instructor wrote:
Code:
function IsFileExist(pFile)
{
  if (oSys.Call("kernel32::GetFileAttributes" + _TCHAR, pFile) == -1)
    return false;
  return true;
}
Хм,
Code:
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);

Quote:
FileSystemObject.FileExists(): 125
kernel32::GetFileAttributes(): 211

Видимо, можно как-то еще быстрее проверить.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5399

PostPosted: Tue Mar 11, 2014 1:01 pm    Post subject: Reply with quote

Infocatcher
Это потому, что внутри "FileSystemObject.FileExists()" содержится компилированный вызов API функции, а "kernel32::GetFileAttributes" каждый раз сначала получает дескриптор библиотеки, затем ищет точку входа и только потом вызывает.
Back to top
View user's profile Send private message Send e-mail
Cuprum



Joined: 28 Sep 2011
Posts: 215

PostPosted: Thu Jun 26, 2014 6:45 pm    Post subject: Reply with quote

Как в скрипте можно получить текущую строку (ту, на которой находится курсор)?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Discussion (Russian) All times are GMT
Goto page Previous  1, 2, 3 ... 12, 13, 14, 15, 16  Next
Page 13 of 16

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group