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 

Scripts discussion (3)
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 23, 24, 25  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Sun Jul 06, 2014 1:57 pm    Post subject: Reply with quote

Сохранить выделение в файл

AkelPad v4.8.4 x86
SaveAs.js v2.17
CommonFunctions.js v2.11
Call("Scripts::Main", 1, "SaveAs.js")

получаю ошибки:
Quote:
Не удается прочитать файл "D:\AkelFiles\piugs\Scripts\SaveAs.js"
или
Quote:
Скрипт: D:\AkelFiles\plugs\Scripts\Include\CommonFunctions.js
Строка: 106
Символ: 10
Ошибка: "undefined"- есть null или не является объектом
Код: 800A138F
Источник: Ошибка выполнения Microsoft JScript

вот эта строка:
Code:
arrFTypeInfo = arrExts[result.filterIndex].split(";");

или новый файл сохраняется полностью как оригинальный (выделение при этом запоминается).

где проблема?
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 344

PostPosted: Sun Jul 06, 2014 6:23 pm    Post subject: Reply with quote

kadvlad wrote:
Сохранить выделение в файл
...
или новый файл сохраняется полностью как оригинальный (выделение при этом запоминается).

где проблема?

Про ошибки выполнения JScript ничего не скажу, но вот, судя по описанию, скрипт и не должен "сохранять выделение в файл". Выделение используется только чтобы получить предполагаемое имя файла (из первой строки выделения). Т.е. то, что при удачном запуске сохраняется все содержимое вкладки, а не только выделение никак не ошибка и, соответственно, не проблема.
Back to top
View user's profile Send private message
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Mon Jul 07, 2014 4:10 pm    Post subject: Reply with quote

opk44 wrote:
никак не ошибка и, соответственно, не проблема.

opk44
спасибо.

Собственно ошибка меня не беспокоит (ввиду невостребованности этого функционала).
Нашёл в комментарии к CommonFunctions.js:
Code:
AkelPad.Command(4101 /*IDM_FILE_NEW*/); //создание (закладки) для сохранения выделения отдельным файлом
и решил, что в принципе это возможно сделать с помощью SaveAs.js.

Ведь существует функция
Code:
AkelPad.GetSelText();

а значит, должна быть возможность сохранять только выделенный фрагмент
(напр., добавить в окно "Сохранить как.." чекбокс "только выделенный фрагмент")

/?
Back to top
View user's profile Send private message
opk44



Joined: 16 Jan 2010
Posts: 344

PostPosted: Mon Jul 07, 2014 9:36 pm    Post subject: Reply with quote

kadvlad wrote:
Ведь существует функция ... а значит, должна быть возможность сохранять только выделенный фрагмент...
/?
Не уверен (что должна быть). Rolling Eyes
Здесь вообще очень непростое отношение к словам "должен", "должна"...
Возможно для SDI-режима это и актуально, но сам я работаю в MDI-режиме, и потому не вижу проблемы в том, чтобы создать новую вкладку, вставить в неё выделенный фрагмент и, тем самым, свести задачу сохранения "фрагмента" к стандартной.
Но у автора скрипта вполне может быть иное мнение.
Back to top
View user's profile Send private message
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Mon Jul 07, 2014 10:08 pm    Post subject: Reply with quote

Я тоже предпочитаю MDI, но при множестве файлов красивее делать это не руками, а головой ))

Здесь ведь простая последовательность команд?
Приблизительно что-то вроде такого:
Code:
AkelPad.GetSelText();
AkelPad.Command(4101); или Function CreateNewTab()
AkelPad.Command(4106);
// а вот дальше при необходиомсти можно воспользоваться и функционалом SaveAs.js

Подождём мнения других специалистов..

..или попробуем через плагин Macros..
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5398

PostPosted: Tue Jul 08, 2014 7:06 am    Post subject: Reply with quote

kadvlad
Для сохранения выделения достаточно использовать флаг SD_SELECTION метода SaveFile:
Code:
AkelPad.SaveFile(0, "C:\\1.txt", -1, -1, 0x3 /*SD_UPDATE|SD_SELECTION*/);

или как новую вкладку:
Code:
if (AkelPad.SaveFile(0, "C:\\1.txt", -1, -1, 0x2 /*SD_SELECTION*/) == 0 /*ESD_SUCCESS*/)
  AkelPad.OpenFile("C:\\1.txt");


Last edited by Instructor on Tue Jul 08, 2014 3:28 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Tue Jul 08, 2014 7:31 am    Post subject: Reply with quote

Instructor,

а есть ли возможность сделать так, чтобы просто при выделении фрагмента и вызове команды "Сохранить как.." в окне последней появлялся чекбокс "только выделенный фрагмент", без автоматизации подстановки пути/имени/расширения и без автосохранения? Ну, или опционально выводить диалог для сохранения фрагмента?
Т.е. чтоб был универсальный выбор: сохранять весь файл либо только фрагмент.

К сожалению, сам я не справлюсь с такой задачей.
Спасибо.
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5398

PostPosted: Tue Jul 08, 2014 3:33 pm    Post subject: Reply with quote

kadvlad
Добавить галочку в стандартный диалог Windows - это гораздо больше работы, чем может показаться.

Проще добавить пункт в меню или панель инструментов для вызова следующего скрипта:

SaveSelectionAs.js

Code:
//// Save selection.

//Options
var pFilter="Text files (*.txt)\x00*.txt\x00All Files (*.*)\x00*.*\x00\x00";
var nFilterIndex=2;

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var pInitialFile=AkelPad.GetEditFile(0);
var pFile;

if (pFile=FileDialog(false, hMainWnd, pInitialFile, pFilter, nFilterIndex))
{
  if (AkelPad.SaveFile(0, pFile, -1, -1, 0x2 /*SD_SELECTION*/) == 0 /*ESD_SUCCESS*/)
    AkelPad.OpenFile(pFile);
}


//Functions
function FileDialog(bOpenTrueSaveFalse, hWnd, pInitialFile, pFilter, nFilterIndex)
{
  var nFlags=0x880804; //OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_EXPLORER|OFN_ENABLESIZING
  var pDefaultExt="txt";
  var lpStructure;
  var lpFilterBuffer;
  var lpFileBuffer;
  var lpExtBuffer;
  var oSys;
  var pResultFile="";
  var nCallResult;

  if (lpFilterBuffer=AkelPad.MemAlloc(256 * _TSIZE))
  {
    AkelPad.MemCopy(lpFilterBuffer, pFilter.substr(0, 255), _TSTR);

    if (lpFileBuffer=AkelPad.MemAlloc(256 * _TSIZE))
    {
      AkelPad.MemCopy(lpFileBuffer, pInitialFile.substr(0, 255), _TSTR);

      if (lpExtBuffer=AkelPad.MemAlloc(256 * _TSIZE))
      {
        AkelPad.MemCopy(lpExtBuffer, pDefaultExt.substr(0, 255), _TSTR);

        if (lpStructure=AkelPad.MemAlloc(_X64?136:76))  //sizeof(OPENFILENAMEA) or sizeof(OPENFILENAMEW)
        {
          //Fill structure
          AkelPad.MemCopy(lpStructure, _X64?136:76, 3 /*DT_DWORD*/);                     //lStructSize
          AkelPad.MemCopy(lpStructure + (_X64?8:4), hWnd, 2 /*DT_QWORD*/);               //hwndOwner
          AkelPad.MemCopy(lpStructure + (_X64?24:12), lpFilterBuffer, 2 /*DT_QWORD*/);   //lpstrFilter
          AkelPad.MemCopy(lpStructure + (_X64?44:24), nFilterIndex, 3 /*DT_DWORD*/);     //nFilterIndex
          AkelPad.MemCopy(lpStructure + (_X64?48:28), lpFileBuffer, 2 /*DT_QWORD*/);     //lpstrFile
          AkelPad.MemCopy(lpStructure + (_X64?56:32), 256, 3 /*DT_DWORD*/);              //nMaxFile
          AkelPad.MemCopy(lpStructure + (_X64?96:52), nFlags, 3 /*DT_DWORD*/);           //Flags
          AkelPad.MemCopy(lpStructure + (_X64?104:60), lpExtBuffer, 2 /*DT_QWORD*/);     //lpstrDefExt

          if (oSys=AkelPad.SystemFunction())
          {
            //Call dialog
            if (bOpenTrueSaveFalse == true)
              nCallResult=oSys.Call("comdlg32::GetOpenFileName" + _TCHAR, lpStructure);
            else
              nCallResult=oSys.Call("comdlg32::GetSaveFileName" + _TCHAR, lpStructure);

            //Result file
            if (nCallResult) pResultFile=AkelPad.MemRead(lpFileBuffer, _TSTR);
          }
          AkelPad.MemFree(lpStructure);
        }
        AkelPad.MemFree(lpExtBuffer);
      }
      AkelPad.MemFree(lpFileBuffer);
    }
    AkelPad.MemFree(lpFilterBuffer);
  }
  return pResultFile;
}
Back to top
View user's profile Send private message Send e-mail
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Tue Jul 08, 2014 5:07 pm    Post subject: Reply with quote

Instructor
большое Вам спасибо.

Надеюсь, этот скрипт окажется полезен многим.
Честно говоря, я немного смущён, что задача оказалась сложнее, чем мне думалось.
Тем приятнее видеть, что программа обладает такими богатыми возможностями.
Wink
Back to top
View user's profile Send private message
Skif_off



Joined: 20 Oct 2013
Posts: 366

PostPosted: Tue Jul 08, 2014 8:20 pm    Post subject: Reply with quote

Infocatcher
Подскажите, пожалуйста, как можно заставить jsBeautifier.js не обрезать строки? После 255го символа сносит на новую строку, в параметрах ничего похожего. Это ограничение HTML?
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Wed Jul 09, 2014 4:03 am    Post subject: Reply with quote

Skif_off wrote:
Подскажите, пожалуйста, как можно заставить jsBeautifier.js не обрезать строки? После 255го символа сносит на новую строку, в параметрах ничего похожего. Это ограничение HTML?
-wrapLineLength=0
Только есть тонкость: это задаст "wrap_line_length" для оригинального кода и для HTML выставится ограничение в 32786 символов.
Но, в принципе, -wrapLineLength=1000000 тоже должен работать.
Back to top
View user's profile Send private message Visit poster's website
Skif_off



Joined: 20 Oct 2013
Posts: 366

PostPosted: Wed Jul 09, 2014 7:32 am    Post subject: Reply with quote

Infocatcher
Как сделать правильнее? Smile Не могу ничего внятного нагуглить, откуда эти числа? Скрипт, так понимаю, не делает различия между PHP, HTML или XML, для XML нагуглил максимальный размер переменной - 2 гига.
Не будет ли разумным оставить как есть (делалось определенно более опытными, чем я Smile) и просто добавить еще один пункт меню для FB2 с -wrapLineLength=1000000? С другой стороны в сохраненных страницах не раз видел что весь код в одну строку, HTMLTidy так не делает (для XML).
Back to top
View user's profile Send private message
kadvlad



Joined: 16 Mar 2008
Posts: 26

PostPosted: Wed Jul 09, 2014 10:50 am    Post subject: Reply with quote

Instructor
TabSwitch.js

постепенно просматриваю скрипты, приглянулся этот.
настроил: CTRL-TAB = вперёд / CTRL-SHIFT-TAB = назад
появляется список табов, но для переключения на выбранный таб нужно жать ENTER.

1) возможно ли автоматически переключаться на выбранный таб при отпускании клавиши CTRL?
2) возможно ли настроить переключение мышью, по аналогии с веб-браузерами: ПКМ+скролл вверх/вниз?
3) возможно ли настроить фиксированный размер шрифта в списке табов, без привязки к текущему размеру в осн.окне?
4) возможно ли настроить формирование списка табов по аналогии с Окно>Вкладки>Правая-Левая, а не в порядке их открытия?

Спасибо.
Back to top
View user's profile Send private message
Infocatcher



Joined: 06 Aug 2007
Posts: 1629

PostPosted: Wed Jul 09, 2014 5:06 pm    Post subject: Reply with quote

Skif_off wrote:
Как сделать правильнее? Smile Не могу ничего внятного нагуглить, откуда эти числа? Скрипт, так понимаю, не делает различия между PHP, HTML или XML, для XML нагуглил максимальный размер переменной - 2 гига.
Не будет ли разумным оставить как есть (делалось определенно более опытными, чем я Smile) и просто добавить еще один пункт меню для FB2 с -wrapLineLength=1000000? С другой стороны в сохраненных страницах не раз видел что весь код в одну строку, HTMLTidy так не делает (для XML).

Числа исключительно из исходного кода... вроде бы как.
Сейчас там вот такое:
/js/lib/beautify.js#L272
Code:
opt.wrap_line_length = (options.wrap_line_length === undefined) ? 0 : parseInt(options.wrap_line_length, 10);

0 => без ограничений

/js/lib/beautify-html.js#L107
Code:
wrap_line_length =  parseInt(options.wrap_line_length, 10) === 0 ? 32786 : parseInt(options.wrap_line_length || 250, 10);

0 => ограничение в 32786

Изменено было вот тут:
https://github.com/beautify-web/js-beautify/commit/71d251582f48881df72c97ad949e43cb39feb8d0#diff-e697c50f16270c0b96dcdf2c3cbd79d7L78
(и без пояснений)
А предыдущий вариант вообще мой: https://github.com/beautify-web/js-beautify/pull/110 Smile

С программной точки зрения никаких проблем быть не должно, там только проверки вида
/js/lib/beautify-html.js#L201-L203
Code:
                        if (this.line_char_count >= this.wrap_line_length) { //insert a line when the wrap_line_length is reached
                            this.print_newline(false, content);
                            this.print_indentation(content);
                        }


И потом это же только для удобства – разбивать или нет длинную оригинальную строку на фрагменты разумной длины.

По поводу различий. Видов обработки сейчас только три: JavaScript, HTML и CSS внутри HTML. Все прочие XML-образные штуки идут бонусом из-за схожести структуры.
Back to top
View user's profile Send private message Visit poster's website
Skif_off



Joined: 20 Oct 2013
Posts: 366

PostPosted: Wed Jul 09, 2014 5:30 pm    Post subject: Reply with quote

Infocatcher
Подумал, что есть ограничения языков, теперь все понятно, спасибо, думаю, добавлю еще один пункт меню Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 23, 24, 25  Next
Page 9 of 25

 
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