Скрипт смены точки привязки

  • Автор темы Автор темы Vadim_PDF
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
В общем "накодил" (если быть точнее собрал по сусекам да допилил) для своего удобства такой скриптец.
Повесил его на горячую клавишу Ctrl + Alt + Shift + End. При исполнении вызывается (ненужное) palette - окошко, после чего цифровая клавиатура выполняет роль смены точки привязки в Indesign. Люблю просто shortcut-ы, и лень мышкой тянуться в панельку для смены. + Такая комбинация IMHO очень наглядна 1 - нижний левый угол, 9 - верхний правый.

Код:

Код:
#targetengine "doSomethingWithMultiselect"var w = new Window("palette");
var butStart = w.add("button",undefined,"Anchore 123456789");
var started = false; 
w.addEventListener ("keydown", function (kd) {pressed (kd)});

function pressed (k) {
//1
if (k.keyIdentifier == "U+0031") {
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_LEFT_ANCHOR
    w.close();
    exit
    }
//2    
if (k.keyIdentifier == "U+0032") {
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_CENTER_ANCHOR
    w.close();
    exit
    }
//3
if (k.keyIdentifier == "U+0033") {
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR
    w.close();
    exit
    }
//4
if (k.keyIdentifier == "U+0034") {
    app.activeWindow.transformReferencePoint = AnchorPoint.LEFT_CENTER_ANCHOR
    w.close();
    exit
    }
//5
if (k.keyIdentifier == "U+0035") {
    app.activeWindow.transformReferencePoint = AnchorPoint.CENTER_ANCHOR
    w.close();
    exit
    }
//6
if (k.keyIdentifier == "U+0036") {
    app.activeWindow.transformReferencePoint = AnchorPoint.RIGHT_CENTER_ANCHOR
    w.close();
    exit
    }
//7
if (k.keyIdentifier == "U+0037") {
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR
    w.close();
    exit
    }
//8
if (k.keyIdentifier == "U+0038") {
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_CENTER_ANCHOR
    w.close();
    exit
    }
//9
if (k.keyIdentifier == "U+0039") {
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR
    w.close();
    exit
    }
}
w.show();
Но есть вопрос - как-то не кошерно, вызывается ненужное окно на которое вешается listener. - можно listener в Индизайне повесить на .. что-то не GUI-ное.
Но в тоже время, что бы после вызова скрипта я мог нажать на numLock цифру 5 и она не вставилась в текст (если я нахожусь в режиме редактирования текста), ну в смысле, не передалась в Индизайн, а просто вызвала функцию скрипта. Куда вообще можно добавить addEventListener ? Как-то туго у меня поиск по reference идет... Все что я нахожу по слушателям к гую относиться..

Вопрос вторичный - в этом скрипте пытался сделать через switch - не получилось, ругался на втором "выборе" что-то типа incorect ; - хотя вроде все было верно... Есть какие-то нюансы обработки Javascript в данном случае?
 
Ответ: Скрипт смены точки привязки

Вопрос вторичный - в этом скрипте пытался сделать через switch - не получилось, ругался на втором "выборе" что-то типа incorect ; - хотя вроде все было верно... Есть какие-то нюансы обработки Javascript в данном случае?
В смысле - на синтаксис ругается или как? Пример кода можно?
 
Ответ: Скрипт смены точки привязки

В общем, надо так:
Код:
#targetengine "doSomethingWithMultiselect"
var w = new Window("palette");
var butStart = w.add("button",undefined,"Anchore 123456789");
var started = false; 
w.addEventListener ("keydown", function (kd) {pressed (kd)});

function pressed (k) {
//1
switch (k.keyIdentifier)
{
case "U+0031":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_LEFT_ANCHOR
    w.close();
    exit
    }
//2    
case "U+0032":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_CENTER_ANCHOR
    w.close();
    exit
    }
//3
case  "U+0033":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR
    w.close();
    exit
    }
//4
case "U+0034":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.LEFT_CENTER_ANCHOR
    w.close();
    exit
    }
//5
case "U+0035":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.CENTER_ANCHOR
    w.close();
    exit
    }
//6
case "U+0036":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.RIGHT_CENTER_ANCHOR
    w.close();
    exit
    }
//7
case "U+0037":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR
    w.close();
    exit
    }
//8
case "U+0038":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_CENTER_ANCHOR
    w.close();
    exit
    }
//9
case "U+0039":
{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR
    w.close();
    exit
    }
}
}
w.show();
У меня работает.
 
Ответ: Скрипт смены точки привязки

Напрямую к документу событие "keydown" привязать не получится. Только к окну скрипта. И чтобы воспользоваться его функционалом, всё равно придётся тянуться мышью — только теперь чтобы активировать это окно. Кнопки заработают только при активном окне. Т.е., "дотянуться мышью — щёлкнуть — нажать кнопку на клаве". К штатному алгоритму добавляется одно действие. Вот мой вариант — без ненужной там кнопки (окно теперь занимает гораздо меньше места) и без закрытия окна после каждого выполнения:
Код:
#targetengine "ShCutChangeAnchorPoint"
var w = new Window("palette");
w.addEventListener ("keydown", function (kd) {pressed (kd)});
function pressed (k) {
//1
switch (k.keyIdentifier){
case "U+0031":{
	app.activeDocument.layoutWindows[0].transformReferencePoint = AnchorPoint.BOTTOM_LEFT_ANCHOR;
	break;}
//2    
case "U+0032":{
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_CENTER_ANCHOR;
	break;}
//3
case  "U+0033":{
    app.activeWindow.transformReferencePoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR;
	break;}
//4
case "U+0034":{
    app.activeWindow.transformReferencePoint = AnchorPoint.LEFT_CENTER_ANCHOR;
	break;}
//5
case "U+0035":{
    app.activeWindow.transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
	break;}
//6
case "U+0036":{
    app.activeWindow.transformReferencePoint = AnchorPoint.RIGHT_CENTER_ANCHOR;
	break;}
//7
case "U+0037":{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR;
	break;}
//8
case "U+0038":{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_CENTER_ANCHOR;
	break;}
//9
case "U+0039":{
    app.activeWindow.transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR;
	break;}
}//switch
}//function
w.show();
 
Ответ: Скрипт смены точки привязки

Простите что влезаю, но у меня работают только кнопки "2" и "6".. что делаю не так?

(МакОс 10.7 — ID 5.5 и 6)
 
Ответ: Скрипт смены точки привязки

работают только кнопки "2" и "6".. что делаю не так?
Вероятно на Маке коды клавиш другие U+0034 и т.д.
Напрямую к документу событие "keydown" привязать не получится.
я так и подозревал, но на всякий решил уточнить.. Жаль. Ладно пусть выскакивает панелька, ибо мышка - это то, чего я хотел избежать...

По поводу switch - я так понял, просто где-то ошибку провтыкал. Кстати у Eugenyus замечательная привычка в конце скобок ставить комментарий, что там закрывается. Возьму на вооружение!
 
Ответ: Скрипт смены точки привязки

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

Э.. проблема в том, что горячие клавиши не назначаются на цифровую клавиатуру. Для стилей -пожалуйста, а для остального - нет.
P.S. Уточнение - с модификаторами Ctrl Alt Shift. а просто цифровая уже давно вся забита
 
К сожалению, не имею сейчас перед глазами ни иллюстратора ни AutoHotKey
Но, подозреваю, что это зло еще не так с большой руки - у любого контрола есть внутренний уникальный ID
 
Статус
Закрыто для дальнейших ответов.