Скрипт в одну строку: закавычить.jsx

Статус
Закрыто для дальнейших ответов.

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Создаем такой скрипт:
PHP:
app.activeDocument.selection[0].contents = "«" + app.activeDocument.selection[0].contents + "»";

Сохраняем. Назначаем ShortCut (рекомендую Shift+Alt+Ctrl+" для Text).
Выделяем текст, жмем ShortCut, получаем текст в кавычках.
Ерунда, скажите вы? Знали бы вы, сколько времени и нервов мне эта "ерунда" недавно сэкономила...:)
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Скрипт в одну строку: закавычить.jsx

Еще пара скриптов в одну строку.

Пролог. При выделении таблицы или ее части программа показывает полное количество строк и столбцов. Но часто надо знать, сколько строк (столбцов) выделено, например, чтобы вставить в эту область часть из другой таблицы. Узнать такую информацию можно простыми скриптами.

Количество выделеных строк:
PHP:
alert("Выделено "+ app.selection[0].rows.length+" строк");


Количество выделеных столбцов:
PHP:
alert("Выделено "+ app.selection[0].columns.length+" столбцов");
 

Dorm

10 лет на форуме
Сообщения
574
Реакции
1
Ответ: Скрипт в одну строку: закавычить.jsx

Спасибо. Никогда не задумывался о таких вещах. Но вещи необходимые, а иногда и архиважные.

Если будут еще идеи, было бы интересно.
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Скрипт в одну строку: закавычить.jsx

Быстро переключиться с одного слоя на другой

Верстается книга. В один макет (а значит в один файл) заливается разными слоями два варианта текста (в моем случае - англо-русский и англо-украинский). Сдать оба варианта надо одновременно, поэтому и правки на оба слоя вносятся одновременно. Чтобы переключиться с одного слоя на другой, надо: отключить ненужный слой; включить нужный слой; сделать нужный слой активным (для порядка'))'. Скриптом оказалось проще:

PHP:
var myDoc = app.activeDocument;
var myLayers = myDoc.layers; 
var myL = new Array();
myL[0] = myLayers.item("Text_engl_rus"); // Сюда забить первый из переключаемых слоев
myL[1] = myLayers.item("Text_engl_ukr"); // Сюда забить второй из переключаемых слоев
for (i=0;i<myL.length;i++){
	myL[i].visible = !myL[i].visible;      // Переключаем видимость слоя
	if (myL[i].visible) {myDoc.activeLayer = myL[i];} // Если после переключения слой видимый, делаем его активным
	}

Дальше традиционно назначаем ShortCut — и продолжаем экономить время и нервы :)
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Скрипт в одну строку: закавычить.jsx

О скрипте "закавычить": в продолжение темы
После многочисленных обсуждений и экспериментов с форматированием, а также попыткой закавычить сим скриптом один символ :))) пришел к выводу, что стоит окончательно остановиться на варианте В.Батушева (за что ему спасибо):
PHP:
try {
app.activeDocument.selection[0].insertionPoints.firstItem().contents = '«';
app.activeDocument.selection[0].insertionPoints.lastItem().contents = '»';
} catch(e) { alert('Open publication, select text and run script again.'); }
 

Maxbor

15 лет на форуме
Сообщения
215
Реакции
82
Быстро переключить видимость слоя (таки в одну строку :) )

Код:
app.activeDocument.layers.item("Russian").visible=!app.activeDocument.layers.item("Russian").visible; //в скобках в кавычках имя переключаемого слоя

По мотивам аналогичного скрипта из месседжа слегка выше. Большое спасибо автору!
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
Ответ: Скрипт в одну строку: закавычить.jsx

а можно скрипт чтобы раскавычить выделенное?
Спасибо!
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Скрипт в одну строку: закавычить.jsx

Можно конечно всё:)
PHP:
var mySel = app.activeDocument.selection[0];
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = "\"";
var myF = mySel.findGrep();
myF[myF.length-1].contents = "";
myF[0].contents = "";
Снимается первая найденная и последняя найденная кавычки в выделенной области.

Вот только личная практика убедила, что здесь руками всё-таки удобнее и быстрее. Хотя конечно кому как...
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
Ответ: Скрипт в одну строку: закавычить.jsx

спасибо, но я забыл сказать что для CS2 нужно. хотя наверное и правда руками проще кавычки убирать.
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Скрипт в одну строку: закавычить.jsx

В сложных макетах иногда возникает необходимость выделить на текущей странице десяток-другой-третий однотипых объектов, не "цепляя" при этом другие, находящиеся в "тесном контакте" с необходимыми, да еще и на одном слое. Вот несколько примеров.
Выделить все текстовые фреймы:
PHP:
app.activeWindow.activePage.textFrames.everyItem().select();
Выделить все группы объектов:
PHP:
app.activeWindow.activePage.groups.everyItem().select();
Выделить все овалы (включая круги):
PHP:
app.activeWindow.activePage.ovals.everyItem().select();
 

apg_777

15 лет на форуме
Сообщения
278
Реакции
81
Ответ: Скрипт в одну строку: закавычить.jsx

Напишу пару строк. На AppleScript. К InDesign отношения не имеет, но может кому пригодится.
В MacOS нет возможности прямым путем получить получить полный путь к фолдеру или полный путь к файлу, но иногда это нужно. Обычно для этого используется приблуда к OS, но можно воспользоваться одним из двух скриптов в одну строку:

set the clipboard to (choose folder) as Unicode text

set the clipboard to (choose file) as Unicode text

Для полного счастья можно сохранить эти строки как Application и не запускать Script Editor.
Осталось только сказать Cmd+V в нужном месте, и не волнует где - в AppleScript, JavaScript или еще где.
Причем фраза " as Unicode text" в OS после Тигра особо не нужна - начиная с Леопарда по умолчанию и так Unicode.
А при использовании Default Folder задача упрощается до запуска скрипта (программы) и клика мышкой.
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Простой способ добавить скрипт в основное меню

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

function main(){ //"оборачиваем" скрипт в эту функцию. Если она в скрипте уже есть, оставляем как есть.

//основной код

}//"закрываем" функцию

Далее следует скопировать скрипт в папку "Startup Scripts" и перезапустить Индизайн.

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

andrew.folio

Участник
Сообщения
28
Реакции
40
Ответ: Простой способ добавить скрипт в основное меню

В продолжение темы Скрипт в одну строку
Этот скрипт родился, когда редактор переставил один материал в журнале, после того как было сделано содержание. Так как содержание уже было вылизано генерить его снова мне не хотелось и перебивать номера страниц тоже.
Код:
with (app.activeDocument.selection[0]) for (var i in paragraphs.everyItem().index) with (paragraphs[i]) contents = contents.replace(/\t(\d+)$/gm, function(a,b) { return "\t" + (parseInt(b, 10)-2) })

Последняя двойка в строке скрипта это собственно то число, на которое надо изменить все числа в выделенной части текста стоящие в конце каждой строки после знака табуляции.
 

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Наиболее быстрый способ включить/отключить строки в скрипте

Временное отключение строк, которые стали ненужными, но могут ещё пригодиться, проще всего провести, сделав их комментариями. В Java Script комментарии обозначаются двумя вариантами: двумя косыми // — если нужно "закомментировать" одну строку или часть строки до её конца; и косой со звездой /*...*/ — если комметарий занимает несколько строк или находится внутри строки:
Код:
//Комментарий в одну строку
Эта часть — не комментарий; //а это уже комментарий
/*Комментарий
в несколько
строк*/
Это не комментарий /*это комментарий*/ и снова не комментарий;
Бывают случаи, когда фрагмент кода приходится таким образом отключать и потом снова включать довольно часто. В спешке путается регистр, ставится не та косая, меняется местами со звёздочкой... И вот изобрёлся наиболее (на мой взгляд) лёгкий способ быстро отключить/включить строки. Выглядит он так:
Код:
/*
Код, который
то нужен,
то не нужен
//*/
«Фишка» — в последней строке. Сейчас код отключён — работает связка /*...*/. Чтобы его «включить», сейчас достаточно в первую строку добавить всего одну косую: //* — тогда первая и последняя строка окажутся отключёнными двумя косыми //. Чтобы снова отключить строки, нужно эту косую убрать (всего одну). На мой взгляд, это гораздо проще, чем удалять косые со звёздами, а потом снова их вставлять.
 
  • Спасибо
Реакции: hulk1776 и lenna

Eugenyus

Топикстартер
12 лет на форуме
Сообщения
1 960
Реакции
3 589
Ответ: Наиболее быстрый способ включить/отключить строки в скрипте

Простейший скрипт
Код:
app.activeDocument.selection[0].parent.select();
может быть использован для того, чтобы перейти к маркеру привязки (Anchor Marker) привязанного объекта, который сейчас выделен. Особенно поможет, если в тексте несколько маркеров идут друг за другом подряд и довольно проблематично определить, каким по счёту идёт нужный.
 

boriskasmoscow

15 лет на форуме
Сообщения
343
Реакции
410
Ответ: Наиболее быстрый способ включить/отключить строки в скрипте

Поместил Word-файл книги в Индизайн и ужаснулся - автор весь текст загнал в таблицы, хотя они там совершенно не нужны, так как собственно таблиц там нет. Этой строкой перевел все таблицы в текст
Код:
app.selection[0].parentStory.tables.everyItem().convertToText();
 

pirate-party

Участник
Сообщения
42
Реакции
150
Ответ: Наиболее быстрый способ включить/отключить строки в скрипте

Скрипт включающий/отключающий подсветку строк без стиля или с отклонениями от примененного стиля. Удобно для проверки своих или чужих работ.

Код:
(app.activeDocument.textPreferences.enableStylePreviewMode ^= 1) && app.activeWindow.overprintPreview = false;
 

_JVK_

Чатланин
10 лет на форуме
Сообщения
184
Реакции
175
Ответ: Наиболее быстрый способ включить/отключить строки в скрипте

Мои пять копеек…
Включаем/отключаем атрибут Ignore Text Wrap у выделенного текстового фрейма.
Код:
try {
app.selection[0].textFramePreferences.ignoreWrap = !app.selection[0].textFramePreferences.ignoreWrap
} catch (e) {}
 

andrew.folio

Участник
Сообщения
28
Реакции
40
Ответ: Наиболее быстрый способ включить/отключить строки в скрипте

Можно пойти дальше
PHP:
//*

Код 1

/*/

Код 2

//*/
Сейчас выполняется Код 1. А если убрать только одну самую первую косую, то будет выполнятся Код 2
 
  • Спасибо
Реакции: hulk1776
Статус
Закрыто для дальнейших ответов.