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 

Можно ли использовать различные события в AP как триггеры?

 
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: 446

PostPosted: Fri Mar 14, 2014 2:19 pm    Post subject: Можно ли использовать различные события в AP как триггеры? Reply with quote

Есть скрипт для акелпада, который исправляет багофичу акелпада, по причине которой он удаляет историю undo при переоткрытии файла.
Т.е. чтобы сохранить историю переоткрытия надо на вопрос акелпада "файл был изменён. переоткрыть?" отвечать "нет" и потом вручную вызывать скрипт.

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

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



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

PostPosted: Fri Mar 14, 2014 3:06 pm    Post subject: Reply with quote

Drugmix
1. Любой скрипт можно поставить на автозагрузку АР и сделать его резидентным.
2. Любой скрипт имеет доступ к WINAPI, а значит может делать всё что угодно* в пределах ACL и доступных привилегий потока скрипта(от "удалить профиль вконтактике" до "взломать пентагон").
3. У АР достаточно открытая архитектура что-бы можно было вмешаться в большинство внутренних механизмов.

4. И да, желаемого Вами можно добиться наличными сейчас средствами
(могу по пунктам даже расписать где и на что поставить перехват и что при этом сделать)
, и даже не требует особых знаний программирования.

------
* одно ограничение всё-же есть: многопоточность организовать не получится, что в общем случае не так уж и важно и при желании можно обойти.
Back to top
View user's profile Send private message AIM Address Yahoo Messenger MSN Messenger
Drugmix



Joined: 08 Apr 2013
Posts: 446

PostPosted: Fri Mar 14, 2014 3:43 pm    Post subject: Reply with quote

FeyFre
1. про автозагрузку-то понятно, вопрос был про триггер: как автозагруженный скрипт узнает, когда ему надо сработать?
2. вопрос был ровно обратный: как с помощью WINAPI и всяких PostMessage/SendMessage отослать сообщение из сторонней программы в акелпад "запустить скрипт такой-то".
3. акелпад на С написан, я С не знаю.
4. если можно - то подскажите, пожалуйста.
В таком случае конкретизирую проблему:

В акелпаде есть проблема с потерей undo истории при переоткрытии файла. Судя по сообщениям Instructor'а - это сделано намеренно, и, видимо, исправляться не будет.
Когда акелпад замечает, что открытый в нём файл был изменён из вне - он спрашивает переоткрыть ли его. Если согласиться - он его переоткроет, а история undo и старое состояние файла - будут потеряны. Если отказаться, то пользователь не сможет посмотреть на внесённые извне изменения.
Но есть скрипт для акелпада, который можно вручную вызвать и он переоткроет файл сохранив undo историю.
Т.е. чтобы решить проблему потери undo истории надо сначала ответить отказом на вопрос акелпада "файл был изменён, переоткрыть? да/нет", а потом вручную вызвать скрипт.

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

Блокировать встроенную реакцию на положительный ответ и эмулировать отказ - я могу и ahk-скриптом. Но я не знаю как этим же скриптом заставить акелпад сделать вызов undoableReopen.js
Back to top
View user's profile Send private message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5422

PostPosted: Fri Mar 14, 2014 3:57 pm    Post subject: Reply with quote

Drugmix
http://akelpad.sourceforge.net/forum/viewtopic.php?p=24258#24258
Back to top
View user's profile Send private message Send e-mail
FeyFre



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

PostPosted: Fri Mar 14, 2014 4:46 pm    Post subject: Reply with quote

1. Автозагружаемый скрипт стартует вместе с АР. Выполнит полезное действие тогда, когда разработчик пожелает(по триггеру как вы выразились), а может быть и сразу начнет его делать(например пинговать гугл бессконечно). Смотрите пример History.js (я достаточно давно написал этот скрипт как реализация чьей-то хотелки):
1. скрипт устаналивают в автозагрузку;
2. скрипт остается резидентом;
3. скрипт даже имеет гуй - панельку сбоку, которую можно скрыть;
4. скрипт дополнительно реагирует на горячие клавиши;
5. основная задача скрипта - помнить историю закрытых документов, и он "триггерится" по событию "документ закрыт".

Скрипт был написано давненько, и был приурочен к релизу плагина Scripts который дал возможность скриптам создавать док-панели. С тех пор появилось много вкусностей которые помогают скриптам резидентам, но тем не менее этот будет работать без проблем и в современном окружении.

2. Ответ от этого не меняется. АР не умеет слушать чужие пинки. Но с помощью WINAPI из скрипта вы можете научить АР это делать. И не только на PostMessage/SendMessage, а практически что угодно. Строго говоря ответ "Как пожелаете. Всё в ваших руках". Very Happy

3. Это не важно. А что знаете? Delphi? AkelDLL.pas доступен с незапамятных времен. go? clarion? lua? - да, тут вам будет тяжеловато привыкать.

4. Начните с отлова сообщения-вопроса. А дальше двумя путями: либо перехватываете всю процедуру вопроса, и вместо этого сами переоткрываете файл, либо трасируете к оригинатору, и предотвращаете повод задавания вопроса: разница в времени модификации файла на диске и в памяти.
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 -> Discussion (Russian) All times are GMT
Page 1 of 1

 
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