Page 1 of 1

кто может написать плагин для работы с проектом?

Posted: Mon Jun 27, 2016 5:05 pm
by rono
приветствую. хочу спросить, может ли кто-то написать плагин.
мне для работы нужен текстовый редактор, который может работать с древовидной структурой проекта, но не создавая собственный формат документа, который объединяет все в один файл, а скорее как менеджер текстовых файлов. То есть, чтобы проект просто объединял между собой лежащие в структуре папок отдельные текстовые документы, которые можно было бы открыть любым другим внешним редактором.

ищу подобную программу или человека, который мог бы ее написать уже несколько лет, но все кого я спрашивал, отказываются и советуют поискать получше. В результате, нашел недавно программу zim wiki. Она создает файл проекта, без слияния остальных файлов. Казалось бы, то что нужно, но она громоздкая и подглючивает. Продолжаю поиски, на днях протестировал программу Akelpad, но такой функции не обнаружил. Хоть и увидел плагин для работы с сессиями, но это не то. Решил воспользоваться форумом. не представляю, насколько это сложно, но если кто-то заинтересовался или может посоветовать такую программу, было бы здорово.

Posted: Sun Jul 03, 2016 10:04 pm
by Instructor

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?t=2107
// Version: 1.0
// Author: Shengalts Aleksander aka Instructor
//
//
// Description(1033): Merge contents of all specified documents in one file.
// Description(1049): Соединить содержимое всех указанных документов в один файл.
//
// Arguments:
// -Save=false  -Read files (default).
// -Save=true   -Save files.
//
// Usage:
// "Read files" Call("Scripts::Main", 1, "MergeProject.js", `-Save=false`)
// "Save files" Call("Scripts::Main", 1, "MergeProject.js", `-Save=true`)
//
// Document format:
// ||||c:\Folder\MyFile1.txt
// Some text 1
// ||||c:\Folder\MyFile2.txt
// Some text 2...

//Arguments
var bSave=AkelPad.GetArgValue("Save", false);

//Variables
var oSys=AkelPad.SystemFunction();
var pFileText;
var pSelFile;
var pSelText;
var nInitSelStart;
var nInitSelEnd;
var nSelEnd;
var nOffset;

if (bSave)
{
  nInitSelStart=AkelPad.GetSelStart();
  nInitSelEnd=AkelPad.GetSelEnd();
}
nOffset=AkelPad.TextFind(0, "(?<=^\\|\\|\\|\\|).*?", 0x2C0001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXPNONEWLINEDOT|FRF_REGEXP*/);
if (nOffset > -1)
{
  do
  {
    pSelFile=AkelPad.GetSelText();
    if (!bSave)
      pFileText=AkelPad.ReadFile(pSelFile);
    if (!IsFileExist(pSelFile))
    {
      WScript.Echo("Not found: " + pSelFile);
      break;
    }
    //Skip new line
    nSelEnd=AkelPad.GetSelEnd();
    AkelPad.SetSel(nSelEnd + 1, nSelEnd + 1);
    nOffset=AkelPad.TextFind(0, ".*?(?=^\\|\\|\\|\\||\\Z)", 0x80001 /*FRF_DOWN|FRF_REGEXP*/);
    if (!bSave)
      AkelPad.ReplaceSel(pFileText);
    else
    {
      pSelText=AkelPad.GetSelText(3/*\r\n*/);
      AkelPad.WriteFile(pSelFile, pSelText, -1, 65001, true);
    }
    if (nOffset > -1)
      nOffset=AkelPad.TextFind(0, "(?<=^\\|\\|\\|\\|).*?", 0xC0001 /*FRF_DOWN|FRF_REGEXPNONEWLINEDOT|FRF_REGEXP*/);
  }
  while (nOffset > -1)
}
if (bSave)
{
  AkelPad.SetSel(nInitSelStart, nInitSelEnd);
}

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


Инструкция:
1. Создаёте текстовый файл проекта, содержащего файлы, с которыми вы собираетесь работать, в формате:

Code: Select all

||||c:\Folder\MyFile1.txt

||||c:\Folder\MyFile2.txt
2. Считываете содержимое файлов проекта:

Code: Select all

Call("Scripts::Main", 1, "MergeProject.js", `-Save=false`)
3. Меняете содержимое.
4. Сохраняете изменения:

Code: Select all

Call("Scripts::Main", 1, "MergeProject.js", `-Save=true`)
Для работы скрипта используйте текущую разрабатываемую версию AkelPad'а.

Posted: Mon Jul 04, 2016 10:21 am
by rono
О, благодарю, Александр)
Только чувствую себя как Буратино) пока не понимаю, как его запустить в программе. Файл создал и поместил в (AkelPad-4.9.7-bin-rus\AkelFiles\Plugs\Scripts)

PS
рекомендованную "текущую версию" тоже скачал, но понятнее не стало)

Posted: Mon Jul 04, 2016 11:44 am
by FeyFre
rono
Плагинами ToolBar, ContextMenu или HotKeys отобразить пунктами меню/кнопками указанные Call-команды(для HotKeys привязать к горячей клавише)

Posted: Mon Jul 04, 2016 2:30 pm
by Kley
rono
Посмотрите картинку и пост выше.
Может Sessions Plugin все-таки то, что нужно?

Posted: Mon Jul 04, 2016 8:13 pm
by rono
00

Posted: Mon Jul 04, 2016 8:30 pm
by rono
Kley
благодарю, пытаюсь разобраться.
насколько я понимаю, Sessions plugin создает только файл, который объединяет другие файлы, но не создает папку, а сами файлы остаются лежать там, откуда их открыли. То есть, структура создается только внутри самой оболочки. В общем и целом, это не проблема. И плагин, действительно, почти то, что нужно.
А про запуск скрипта вообще не понял. Открывал ToolBar, ContextMenu и HotKeys, но не понимаю, что делать с окном, которое всплывает. А при запуске скрипта вообще ничего не происходит. Извините, вероятно туплю. Или может просто не имею опыта работы с подобными программами. И как тут, в форуме прикрепить принтскрин, тоже чего-то не понимаю... Не писал никогда на форумах.

Posted: Mon Jul 04, 2016 9:30 pm
by rono
Instructor
я прошу прощения, вы не могли бы подробнее описать, как запустить скрипт. я не сталкивался с подобным, поэтому не понял, что нужно сделать.

Posted: Tue Jul 05, 2016 7:08 am
by Instructor

Posted: Thu Jul 07, 2016 1:21 am
by rono
Instructor
В той степени, в которой я понял, я все это уже это проделывал. При запуске скрипта не происходит вообще ничего.

Posted: Thu Jul 07, 2016 9:08 am
by Kley
rono
скрипт MergeProject.js кладете в ПапкаAkelPad\AkelFiles\Plugs\Scripts;
добавляем в меню две строки:

Code: Select all

"Read files (MergeProject)" Call("Scripts::Main", 1, "MergeProject.js", `-Save=false`)
"Save files (MergeProject)" Call("Scripts::Main", 1, "MergeProject.js", `-Save=true`)
в любой ПАПКЕ создаем два файла Readme1.txt, Readme2.txt (с каким-нибудь текстом);
рядом с этими файлами создаем еще один: Project.txt. Открываем его в AkelPad;
печатаете текст:

Code: Select all

||||путь\к вашей\ПАПКЕ\Readme1.txt

||||путь\к вашей\ПАПКЕ\Readme2.txt

можно сохранить, для дальнейшего использования;
жмем пункт меню: "Read files".
Между строк "||||..." появляется текст файлов Readme1.txt, Readme2.txt.
ЕГО можно править, и сохранить: пункт меню "Save files" (MergeProject).
Файл Project.txt можно закрыть не сохраняя.