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

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

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

Post by Drugmix »

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

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

И если это невозможно то тогда другой вопрос:
есть открытый акелпад, есть скрипт для акелпада который надо вызвать и есть сторонняя программа через которую надо инициировать этот вызов. Можно ли как-то это сделать не прибегая к навешиванию внутри акелпада хоткея на вызов скрипта и дальнейшей эмуляцией отправки этого хоткея сторонней программой в акелпад?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

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

------
* одно ограничение всё-же есть: многопоточность организовать не получится, что в общем случае не так уж и важно и при желании можно обойти.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

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

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

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

Блокировать встроенную реакцию на положительный ответ и эмулировать отказ - я могу и ahk-скриптом. Но я не знаю как этим же скриптом заставить акелпад сделать вызов undoableReopen.js

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »


Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

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

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

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

4. Начните с отлова сообщения-вопроса. А дальше двумя путями: либо перехватываете всю процедуру вопроса, и вместо этого сами переоткрываете файл, либо трасируете к оригинатору, и предотвращаете повод задавания вопроса: разница в времени модификации файла на диске и в памяти.
Post Reply