left menu mob button

Новое на канале:

Если любишь жизнь, не трать время зря, потому что жизнь состоит из времени. (Б. Франклин)


Комментарии

Christian Geiselmann
(17.07.2019 16:18):

Extremely useful! A real time-saver for projects with many pages such as book!

(Выравнивание фрейма через контекстное меню)

Christian Geiselmann
(17.07.2019 16:11):

This tiny script comes in very handy for large projects such as books, especially when you have to share documents with colleagues. Works flawlessly for me. (Win 7, Indesign CC 2018). Thank you!

(Объём связанных файлов на диске)

Christian Geiselmann
(17.07.2019 15:43):

Thank you for the bugfix. This works much better now, with a very nice report about changes made displayed at the end. -- Here is however a second issue: I notice that in my current project not all Paragraph Styles are included in the operation. It seems, a number of Paragraph Styles are simply ignored. -- Background: I am searching for "Englisch UK", and replacing it with various other languages such as Spanish, German 2006 reform, Greek etc. -- My current project has about 100-150 Paragraph Styles (I did not count them). They are organised in two levels of folders. -- I tried to find a pattern, and it seems, especially those Paragraph Styles are affected that are inside a second-levels folder hierarchy (Paragraph Styles can be grouped into folders and subfoldrs). When I disintegrate my folder structure and use only first level folders the script seems to work well. -- So, question: would it be possible to make the scrip work also with two-level folder structures?

(Изменить язык в стилях и по тексту)

только нужной информации

(серия статей):

Доступ к скрипту из локализованного меню

В английской (нелокализованной) версии программы разместить ссылку на скрипт в любом меню проблем не составляет. Кратко напомню простейшие способы.

Код для добавления пункта в верхнее меню:

var menuName = "Текст, который будет отображаться в меню";
var myMenuItem  = app.scriptMenuActions.add(menuName);
myMenuItem.addEventListener('onInvoke', function(){main();});
//Строкой ниже пункт меню будет добавлен в меню Type (аналогично добавляется в меню Object, Table и др.)
var mnu = app.menus.item("$ID/Main").submenus.item("$ID/Type");
mnu.menuItems.add(myMenuItem);
function main(){
	Содержимое скрипта, выполняемое при вызове из меню
}

localmenuen1

Аналогично добавляются пункты и в контекстные меню:

var mnuName = "Текст, который будет отображаться в меню";
var mnuItem = app.scriptMenuActions.add(mnuName);
mnuItem.addEventListener('onInvoke', function(){main();});
//В строке ниже выбирается контекстное меню для инструмента "Текст"
var rMouseMnu = app.menus.item("$ID/RtMouseText");
rMouseMnu.menuSeparators.add(); //Этой строка добавляет разделитель между пунктами меню
rMouseMnu.menuItems.add(mnuItem);
function main(){
	//Содержимое скрипта, выполняемое при вызове из меню
}

localmenuen2

Список названий большинства используемых меню (таких, как $ID/RtMouseText) можно вывести в консоли ESTK простым скриптом:

for (var i=0; i<app.menus.length; i++){ 
	$.writeln(i+": "+app.findKeyStrings(app.menus.item(i).name)); 
	}

localmenuen3

Какие же проблемы возникают в случае с локализованной версией программы? В случае с верхним меню, по большому счёту, никаких. Достаточно добавить стандартный для этого случая функционал, изобретённый как раз для этой цели. А именно, «обернуть» каждое имя меню в метод app.translateKeyString():

var mnu = app.menus.item(app.translateKeyString("$ID/Main")).submenus.item(app.translateKeyString("$ID/kTablePanelTitle"));

localmenuru1

В некоторых случаях скрипт сработает даже если, особо не мудрствуя, просто вбить русский вариант меню:

var mnu = app.menus.item("$ID/Main").submenus.item("$ID/Текст");

localmenuru2

Не так всё просто с контекстным меню. Там не только не пройдёт номер с «напрямую» заданными русскими словами. translateKeyString также не сработает. Скрипт выдаст сообщение об ошибке и прекратит работу:

localmenuruerror

Решить проблему можно, обратившись к нужному меню по его индексу в коллекции. Здесь важно отметить, что индексы эти могут быть разными от версии к версии, и от локализации к локализации. Например, индекс контекстного меню таблиц в английской версии CS5 — 103, а в русской локализации CS6 — 16. Получить же полный список индексов для нужной версии можно уже упомянутым скриптом:

for (var i=0; i<app.menus.length; i++){ 
	$.writeln(i+": "+app.findKeyStrings(app.menus.item(i).name)); 
	}

Строка получения доступа к нужному меню, таким образом, приобретает следующий формат:

var rMouseMnu = app.menus[16];

А если предполагается использование скрипта как в русской, так и в английской версиях, тогда можно позволить скрипту выбрать нужный вариант с помощью метода localize:

var cm = localize({en:"var rMouseMnu = app.menus[103]", ru:"var rMouseMnu = app.menus[16]"});
app.doScript(cm);

Допустимо также для английской локализации указать имя меню, а для русской — его индекс:

var cm = localize({en:"var mnu = app.menus.item(\"$ID/RtMouseTable\");",ru:"var mnu = app.menus[16]"});
app.doScript(cm);

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

Полный рабочий вариант включения в контекстное меню нового пункта будет выглядеть так:

var menuName = "Новый пункт табличного меню";
var myMenuItem  = app.scriptMenuActions.add(menuName);
myMenuItem.addEventListener('onInvoke', function(){main();});
var cm = localize({en:"var rMouseMnu = app.menus[103]",ru:"var rMouseMnu = app.menus[16]"});
app.doScript(cm);
rMouseMnu.menuSeparators.add();
rMouseMnu.menuItems.add(myMenuItem);

localmenuru3

И напоследок, для полноты информации (да и вдруг кто не знает), нужно, конечно, указать, что скрипты, которые содержат в себе код для добавления в меню, нужно складывать в папку c:\Program Files (x86)\Adobe\Adobe InDesign ***\Scripts\startup scripts. После размещения скрипта в этой папке надо перезапустить InDesign. И в случае внесения изменений в скрипты, лежащие в этой папке, программу надо перезапускать, чтобы эти изменения заработали.

Комментариев нет.

Оставить комментарий:

Имя*:
E-mail*:
Текст комментария*:
Код безопасности*: