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 

Log plugin
Goto page Previous  1, 2, 3, 4, 5, 6 ... 9, 10, 11  Next
 
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5423

PostPosted: Thu Mar 15, 2012 2:57 pm    Post subject: Reply with quote

DV wrote:
Но это же страшно сложно! Shocked
Для кого сложно даю пример:

AddOutputWindowText.js
Code:
AddOutputWindowText("My text");

function AddOutputWindowText(pText)
{
  var hMainWnd=AkelPad.GetMainWnd();
  var lpWnd;
  var hWnd=0;

  if (lpWnd=AkelPad.MemAlloc(_X64?8:4 /*sizeof(HWND)*/))
  {
    AkelPad.Call("Log::Output", 2, lpWnd);
    if (hWnd=AkelPad.MemRead(lpWnd, 2 /*DT_QWORD*/))
    {
      AkelPad.SendMessage(hWnd, 0xB1 /*EM_SETSEL*/, -1, -1);
      AkelPad.SendMessage(hMainWnd, 1193 /*AKD_REPLACESELW*/, hWnd, AkelPad.MemStrPtr(pText));
    }
    AkelPad.MemFree(lpWnd);
  }
  return hWnd;
}
Back to top
View user's profile Send private message Send e-mail
DV



Joined: 16 Nov 2006
Posts: 852
Location: Kyiv, Ukraine

PostPosted: Thu Mar 15, 2012 3:25 pm    Post subject: Reply with quote

Instructor wrote:
AddOutputWindowText.js

Ну да,
Code:
if (IsTrue(true)) WScript.Echo("true");

function IsTrue(b)
{
  return (((b ? true : false).toString().length == 4) ? true : false);
}

Зачем же делать проще? Smile
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Thu Mar 15, 2012 5:09 pm    Post subject: Reply with quote

Я нипонял, а разве AkelPad.Include() кто-то отменял?

А вот насчет примера с "IsTrue" - уточните ка стандарт, и озвучьте ТЗ. Что именно должен сделать IsTrue ?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
DV



Joined: 16 Nov 2006
Posts: 852
Location: Kyiv, Ukraine

PostPosted: Thu Mar 15, 2012 6:51 pm    Post subject: Reply with quote

FeyFre wrote:
Я нипонял, а разве AkelPad.Include() кто-то отменял?

Нет. Но давайте посмотрим на это дело так: почему какой-то скрипт должен по сути иметь дело со "внутренностями" плагина Log? Зачем скрипту об этом знать? Как же насчёт инкапсуляции? Разве вывод заданной строки - это не прямая и логичная функция для Log::Output?
А что будет, к примеру, в случае, если окно Output ещё не показано? Как скрипт обработает это - и что он вообще должен ожидать в качестве хендла окна Output в данном случае? (При реализации внутри плагина, плагин сам может создать/открыть окно Output.)
А если параллельно с желанием вывести какую-то строку в окне Output уже будет работать какой-то процесс, активно выводящий строку за строкой? Как скрипт синхронизирует вывод своей строки со строками работающего процесса? (При реализации внутри плагина, можно, к примеру, использовать критическую секцию.)

FeyFre wrote:
А вот насчет примера с "IsTrue" - уточните ка стандарт, и озвучьте ТЗ. Что именно должен сделать IsTrue ?

А есть варианты? Smile В данном случае я просто хотел продемонстрировать избыточность и ненужность кода, которого можно избежать.

Я, конечно, понимаю, что чем разводить тут все эти идеологические сопли, лучше бы предложить действенный патч - но приведенные выше вопросы выходят за рамки простого патча. Тут нужно иметь дело со всем плагином в целом.
Back to top
View user's profile Send private message
VladSh



Joined: 29 Nov 2006
Posts: 2615
Location: Киев, Русь

PostPosted: Thu Mar 15, 2012 8:11 pm    Post subject: Reply with quote

DV
100%!
Не вижу ни одной причины, чтобы этого не сделать.
Хотя есть одна причина - все, кто захочет, без лишних телодвижений смогут писать в консоль лога...

Предполагаю, что в дальнейшем плаг разрастётся либо на независимые окна либо, что лучше, в нём будут вкладки. Так вот при записи в консоль функция должна вернуть hWnd вкладки, в которую он пишет. Ну и чтобы впоследствии, по желанию, можно было связать вкладку документа, в которой выполняется скрипт, пишущий в консоль, с вкладкой консоли.

Ну и всё-таки старая идея о том, что сделать бы один плаг для работы с консолью (с вкладками), а все остальные плаги, типа Log, Clipboard и т.п. его бы пользовали.
Back to top
View user's profile Send private message Visit poster's website
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Fri Mar 16, 2012 6:17 am    Post subject: Reply with quote

Мне кажется, всем стало было бы лучше, если бы Инструктор прямо озвучил свое мнение по данной проблеме:
1) Категорически против - все печалятся и юзают предложенные скриптовые функции
2) Уговорили, сделаю - все радуются и с нетерпением ждут обновлений
3) Так ли сильно нужно? Голосуем - все собирают голоса в поддержку фичи
4) Лениво делать, но если кто-то напишет патч, встрою - выбирается знающий товарищ, который, поплевав на руки, берётся сам реализовать фичу.

На мой взгляд, куда продуктивней, чем разводить канитель на десяти страницах
Back to top
View user's profile Send private message
DV



Joined: 16 Nov 2006
Posts: 852
Location: Kyiv, Ukraine

PostPosted: Fri Mar 16, 2012 9:00 am    Post subject: Reply with quote

Fr0sT,
согласен.

Но всё же хотелось бы донести до всех заинтересованных ещё одну мысль.
Итак, я, как скриптописатель, хочу вывести свою строку в Log::Output. Это как бы высокоуровненвая задача: вывести строку. Точка. Зачем мне, с точки зрения скриптописателя, знать, что у Log::Output есть какой-то хендл окна, который нужно вначале узнать, а затем ещё посылать ему какие-то магические (с точки зрения скриптописателя) сообщения?
Пойдём чуть далее. Рассмотрим запуск команды в Log::Output из скрипта. То, что плагин для этого создаёт какой-то вспомогательный поток, то, что для выполнения команды создаётся какой-то процесс - это только личное дело плагина Log, а скрипт такие подробности вообще не должны волновать. С точки зрения скрипта, ему не то что не нужно знать таких деталей, он их не должен знать. Это касается исключительно внутренней реализации плагина Log. (Хотелось бы, чтобы вы хорошо обдумали вышенаписанное, прежде чем начнёте плеваться Wink)
Вот к чему я веду. Сейчас AkelPad.Call("Log::Output", 3) возвращает скрипту несколько переменных, касающихся внутренней реализации плагина. Давайте обсудим, это ли нужно скрипту. Давайте предположим, что мы немного изменили документацию плагина Log примерно так:

Log-Rus.txt (клацните мышкой, чтобы развернуть)
Code:
Call("Log::Output", 1, "PROGRAM", ...)
Параметры:
    1
      Запустить приложение и захватить вывод.
    "PROGRAM"
      Запускаемый файл.
    ...

Примечание: этот метод не запускает приложение немедленно, поскольку выполняет некоторые действия для подготовки запуска. Для того, чтобы узнать о состоянии плагина, используйте метод "Log::Output", 3.

...

Call("Log::Output", 3, *STATE, *PLUGINTHREAD, *PROCESSHANDLE, *PROCESSID)
  Параметры:
  Параметры:
    3
      Получить информацию о текущем запущенном приложении. Использовать с помощью Scripts плагина.
    *STATE
      Указатель на переменную, содержащую состояние плагина:
        1 - получил команду/подготавливаюсь к выполнению команды
             (примечание для программистов: поток PLUGINTHREAD уже создан, процесс PROCESSHANDLE ещё не создан)
        2 - команда выполняется
             (примечание для программистов: процесс PROCESSHANDLE уже выполняется в потоке PLUGINTHREAD)
        0 - ничего не делаю (команда либо уже выполнена, либо нет команды)
             (примечание для программистов: нет ни PLUGINTHREAD, ни PROCESSHANDLE)
    ...


На мой взгляд, вызов Call("Log::Output", 3, *STATE) покрыл бы нужды 90% скриптов. Потому что, фактически, дополнительные детали по *PLUGINTHREAD, *PROCESSHANDLE, *PROCESSID нужны только для очень продвинутых вещей.
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Fri Mar 16, 2012 9:53 am    Post subject: Reply with quote

Quote:
Зачем мне, с точки зрения скриптописателя, знать, что у Log::Output есть какой-то хендл окна, который нужно вначале узнать, а затем ещё посылать ему какие-то магические (с точки зрения скриптописателя) сообщения?
[Контр]Потому что у нас в скриптовом интерфейсе такая объектная модель: модель низкоуровневых объектов, в том числе WINAPI. Эта модель не обязывает её участнокв предоставлять красивые врапперы. Есть враппер - хорошо, нету враппера - тоже не плохо, быть никто не будет.[/Контр]
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Fri Mar 16, 2012 11:22 am    Post subject: Reply with quote

+1024 to DV.
FeyFre
эта "объектная модель" у нас не по надобности, а от безысходности. Потому как оборачивать весь Винапи - редкостный маразм. А функционал требуется, одними куцыми методами WSH не обойдешься. Но, знаешь ли, если так рассуждать, то можно покоцать и все методы объекта AkelPad, оставить один SendMessage, и колупайтесь с ним.
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Fri Mar 16, 2012 1:05 pm    Post subject: Reply with quote

Fr0sT, а что мешает new ActiveXObject() или CreateObject()?
И да, я что-то не слышу что-бы народ особо возмущался что реализация JavaScript в обозревателях ограниченна практически нулевым габором прикладных функций. Люде дописывают функции себе сами, а пишут их сами.
Quote:
эта "объектная модель" у нас не по надобности, а от безысходности.
что-то не видно что этой "безысходностью" кто-то особо не доволен. Раз молчат значит довольны. Тему об альтернативном скриптовом плагине, а значит и реализации всех хотелок, кто-то развивает?
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
VladSh



Joined: 29 Nov 2006
Posts: 2615
Location: Киев, Русь

PostPosted: Fri Mar 16, 2012 1:39 pm    Post subject: Reply with quote

Fr0sT wrote:
эта "объектная модель" у нас не по надобности, а от безысходности.
+2048)

FeyFre wrote:
что-то не видно что этой "безысходностью" кто-то особо не доволен. Раз молчат значит довольны. Тему об альтернативном скриптовом плагине, а значит и реализации всех хотелок, кто-то развивает?
1+2, 3; это что нашлось не сильно напрягаясь.
Back to top
View user's profile Send private message Visit poster's website
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Fri Mar 16, 2012 1:59 pm    Post subject: Reply with quote

FeyFre
Quote:
а что мешает new ActiveXObject() или CreateObject()?

Этот объект должен быть зарегистрирован.
Quote:
И да, я что-то не слышу что-бы народ особо возмущался что реализация JavaScript в обозревателях ограниченна практически нулевым габором прикладных функций. Люде дописывают функции себе сами, а пишут их сами.

В браузерах есть DOM, который покрывает большинство веб-специфичных потребностей. Ну а чего нету - дописывается в родном JS стиле, без попыток скрестить ежа с ужом (это я про WinAPI через JS).
Нет, я ни в коем случае не против существующей реализации, и всячески приветствую огромную проделанную работу и тот факт, что функциональность практически не уступает native языкам, просто надо сознавать, что эти ковыряния со смещениями в структурах и вызовами api функций задирают порог вхождения в скриптописание до безоблачных высот.
Quote:
что-то не видно что этой "безысходностью" кто-то особо не доволен. Раз молчат значит довольны. Тему об альтернативном скриптовом плагине, а значит и реализации всех хотелок, кто-то развивает?

Не молчат, но теребить Инструктора, который и так тащит практически все плагины, неудобно. Тем более что в принципе-то всё работает.
А кто ее будет развивать? Сишников вас трое на весь форум. А на других языках есть опасность, что размер плага будет на целых 50 Кб больше, что, конечно же, катастрофически приблизит мировой коллапс Laughing

Кстати, интересный факт. Ни одного довода против Log::Output высказано не было.
А довод за (помимо очевидного сравнения одного элементарного вызова функции и многострочной шаманской абракадабры) - это инкапсуляция. Если вдруг внутренняя реализация окна изменится, не нужно будет переделывать тонну скриптов, поскольку интерфейс останется прежним.
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Fri Mar 16, 2012 2:36 pm    Post subject: Reply with quote

Quote:
Не молчат, но теребить Инструктора, который и так тащит практически все плагины, неудобно
А кто требует требовать от Инструктора? А когда последняя запись? Почти пол года назад. Что тему в личках обсуждают, а я не в курсе?
Quote:
А на других языках есть опасность, что размер плага будет на целых 50 Кб больше, что, конечно же, катастрофически приблизит мировой коллапс
А можно перечислить "другие языки" при которых размер будет всего на 50Кб больше? А то мне как-то в голову не приходит ни один.
И не в языке проблема, а в идиотизме рантайма. Борлад С рантайм тоже не маленький.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Fr0sT



Joined: 24 Jul 2007
Posts: 876

PostPosted: Sat Mar 17, 2012 1:39 pm    Post subject: Reply with quote

Quote:
А можно перечислить "другие языки" при которых размер будет всего на 50Кб больше?

Да любой. Что Борланд, что VC, да хоть дотнет, если отмести фреймворк как системную библиотеку, будет очень минималистичен.
Back to top
View user's profile Send private message
FeyFre



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

PostPosted: Sat Mar 17, 2012 3:17 pm    Post subject: Reply with quote

Fr0sT, да не фреймворк, а рантайм(runtime) - инструментарий языка а не среды. То что в стандарте языка прописано.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3, 4, 5, 6 ... 9, 10, 11  Next
Page 5 of 11

 
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