ContextMenu plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV wrote:А где описание всех его функций и параметров?
Всё начиналось отсюда.
О командах можно почитать в AkelDLL.h и вызывать с помощью Command(номер).
Кроме ст. команд можно вызывать скрипты (перечень скриптов) и плагины.
Гляньте тему сначала, на первой странице я выкладывал свои контекстные менюхи, по ним почти всё понятно.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

ОГРОМНАЯ ПРОСЬБА

Post by VladSh »

Всвязи с появлением нового функционала (плагина ContextMenu) с тем, что многие одинаковые действия приходится делать по 2 раза (пример: OpenFileDirectory.js и OpenFileDirectoryArg.js) прошу в ActiveX AkelPad'а добавить:
1. Возможность определять где я сейчас нахожусь, т.е. на вкладке или в окне редактирования или в менюшке последних файлов. Тогда можно было бы делать общие скриптовые файлы, а внутри select case, где в зависимости от места, - свой скрипт получения имени файла с которым дальше работать.
2. :idea: У Akel'а есть метод GetEditFile, который возвращает имя редактируемого файла, было бы просто здорово если бы был метод (GetSelectFile), который возвращал бы имя файла, с которым нужно работать с учётом того, что в п.1! Тогда бы в скриптах не нужно было бы постоянно ставить одни и те же обработчики! Т.е. было бы гораздо легче!!! :)
Last edited by VladSh on Wed Jul 18, 2007 6:38 pm, edited 1 time in total.

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

Post by Instructor »

Если речь о ContextMenu, то:

ShowFileArg.js:
var WshShell=new ActiveXObject("WScript.Shell");

var szFile=WScript.Arguments(0);

WScript.Echo(szFile);
Пункт меню (любого меню):

Code: Select all

"ShowFileArg" Exec(`WScript "%a\AkelFiles\Plugs\Scripts\ShowFileArg.js" "%f"`)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Да, это понятно, этот кусок был в OpenFileDirectoryArg.js

Post by VladSh »

Я имел ввиду, что как нам пришлось для разных меню писать разные скрипты OpenFileDirectory.js и OpenFileDirectoryArg.js, так то же самое приходится делать каждый раз - количество файлов растёт, становится труднее их поддерживать.
Хочется писать один файл скрипта, чтобы его использовать в разных менюхах. Поэтому и хотелось такую функцейку, которая бы возвращала - если я в меню вкладок или окна редактирования - GetEditFile, а если я в меню последних файлов, то имя файла, на котором вызвал контекстное меню.

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

Post by Instructor »

Я имел ввиду, что как нам пришлось для разных меню писать разные скрипты OpenFileDirectory.js и OpenFileDirectoryArg.js...
Для ContextMenu достаточно только OpenFileDirectoryArg.js. Имя файла содержится в %f переменной.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

ДЕЙСТВИТЕЛЬНО РАБОТАЕТ!!!!!!!!

Post by VladSh »

А зачем в OpenFileDirectoryArg.js нужен цикл по аргументам?
Last edited by VladSh on Fri Jul 27, 2007 1:44 pm, edited 1 time in total.

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

Post by Instructor »

VladSh wrote:А зечем в OpenFileDirectoryArg.js нужен цикл по аргументам?
Для полноты. Количество файлов передаваемых через аргументы может быть более одного.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

ещё вопрос

Post by VladSh »

Ясно, т.е. "на будущее", т.к. в контекстном меню вряд ли сейчас можно выделить несколько позиций сразу :)
Я вообще думал, что это перебор аргументов, т.е. %f - это 1-й аргумент, ну и т.д... вот что значит незнание.

Гляньте пожалуйста одним глазком, а то мы здесь ТА-А-АКОЕ сочиняем, может можно как-то проще?

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

Post by Instructor »

Гляньте пожалуйста одним глазком..
Глядел уже (не думал, что есть сиюминутное решение, но wisgest предложил оригинальный путь).

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

ИДЕЯ

Post by VladSh »

Instructor
Я пожалуй поддержу эту идею, но в немного изменённом виде:
wisgest wrote:Было бы удобно иметь возможность, не переопределять меню объекта целиком, а дополнять имеющееся, добавив в синтаксис описания ключевое слово "DEFAULT" (или другое).
Чтобы можно было сделать, например для окна редактирования так:

Code: Select all

DEFAULT
SEPARATOR
"Lines" {
  ...
}
:idea: Можно было бы где-то в ContextMenu-плагине сделать хранилище "кусков" своих менюх с опред. названиями, а потом вызывать их по названиям, по аналогии как вызывается SEPARATOR.

Пример: если глянуть мои менюхи:

Code: Select all

"CopyToClipboard" 
{ 
  "FileName" Exec(`WScript "%a\AkelFiles\Plugs\Scripts\CopyToCBFileName.js" "%f"`) 
  "FileNameFull" Exec(`WScript "%a\AkelFiles\Plugs\Scripts\CopyEditFile.js" "%f"`) 
  "DateTurn" Exec(`WScript "%a\AkelFiles\Plugs\Scripts\CopyToCBDateTurn.js"`) 
}
, то видно, что одно и то же используется в разных меню, и как раз здесь было бы очень удобно вызвать этот "кусок" по имени из общего "хранилища"!

Offline
Posts: 63
Joined: Sun Jun 24, 2007 4:03 pm
Contact:

Post by wisgest »

Команда для открытия папки с уже отмеченным в ней файлом %f:

Code: Select all

Exec("explorer /select,%f")
Источник: http://support.microsoft.com/kb/152457

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Классный плагин! Только вот немного бы доработать интерфейс:
1) При открытии окна со списком скриптов ставить фокус на первый элемент листбокса
2) При повторном открытии окна запоминать последний вызванный скрипт и выделять его
3) Нажатие Enter в то время как фокус у листбокса подразумевает запуск скрипта, а не закрытие окна... вообще, полезность двух кнопок для закрытия именно этого окна представляется мне сомнительной.

Как наглядный пример:
если плагину назначен хоткей, то сейчас для вызова первого в списке скрипта надо нажать:
Хоткей - Вниз - Таб - Энтер
а вот как хотелось бы:
Хоткей - Энтер :)

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

Code: Select all

...
UndoCmd Command(4151)
...
или

Code: Select all

...
4151 Command(4151)
...
Либо же просто привязать все стандартные команды к стандартным меткам, т.е.

Code: Select all

...
Command(4151)
...
.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

+1

Post by VladSh »

Fr0sT
Похоже, что кнопки "ОК" и "Отмена" выполняют одно и то же действие - "Закрыть" (окно скриптов). Или я чего недопонял.

Действительно было бы удобно вместо 2-х сделать 1 кнопку "Закрыть", подсвечивать последний запущеный скрипт + фокус по умолчанию устанавливать на кнопку "Запустить".
+1!


UPDATED по меню и т.п.

По контекстным меню, да и по меню вообще я как-то предлагал использовать принцип построения/настройки из AutoCAD.
Как-то давненько пришлось заниматься локализацией его файлов меню (притом тоже бесплатно :)), здесь выкладывал готовые менюхи для ACAD'а (51kb). В архиве можно посмотреть как организованы элементы интерфейса: все меню (в т.ч. контекстные), пиктограмы тулбаров, горячие клавиши (раздел "ACCELERATORS") и т.д. и т.п. - по моему этот вариант был бы очень удобен для обычных пользователей (не программистов). Ещё в ACAD'е есть спец. редактор меню для визуального формирования/редактирования перечисленных элементов интерфейса. Итого я не встречал системы, в которой настройка интерфейса была бы удобнее и прозрачнее.

Вопрос только один - как тогда поддерживать всю гибкость, которую нам даёт ContextMenu-плагин? Т.е. вызовы с параметрами/без параметров; вызовы с помощью Call, Exec или Command?
В ACAD'е это решается внутренним простеньким макро-языком.

В общем тема адаптации настройки интерфейса для обычных пользователей совместно с локализацией на самом деле очень интересна...

Fr0sT, Ваша идея тоже клас!
Но главное оставить возможность нескольких этих вариантов, т.к. я столкнулся с тем, что, к примеру, для меню последних файлов то же действие нужно называть немного иначе...

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Re: +1

Post by Fr0sT »

VladSh wrote: Вопрос только один - как тогда поддерживать всю гибкость, которую нам даёт ContextMenu-плагин? Т.е. вызовы с параметрами/без параметров; вызовы с помощью Call, Exec или Command?
Ну, визуальная правка меню - это уже следующий этап, думаю, сейчас надо решить с названиями.

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

Post by Instructor »

Fr0sT
3) Нажатие Enter в то время как фокус у листбокса подразумевает запуск скрипта, а не закрытие окна... вообще, полезность двух кнопок для закрытия именно этого окна представляется мне сомнительной.
В последней версии уже было исправлено (будет доступна после релиза 3.3.5).
P.S. эти замечание лучше было написать в теме про Scripts плагин.

VladSh
Похоже, что кнопки "ОК" и "Отмена" выполняют одно и то же действие - "Закрыть" (окно скриптов). Или я чего недопонял.
"ОК" - сохранить и закрыть, "Отмена" - выйти без сохранения.
Last edited by Instructor on Wed Jul 25, 2007 9:53 am, edited 1 time in total.
Post Reply