chalcedony_htnの日記スマートフォン用の表示で見るchalcedony_htnの日記この広告は、90日以上更新していないブログに表示しています。2019で、環境設定の「選択された文字の異体字を表示」をJavaScriptで切り替えるはいこんにちは。2019の環境設定には[選択された文字の異体字を表示]なる設定があるのですが、どうもこれがクリックで切り替えられない呪いがかかっているらしい。Windowsでは試してないのでわかりませんが。Transit上の記事ではタブキーでフォーカスして......と書いてあるのだけど、それすら私の環境ではできなかったのです。いうわけで、この呪いを解く呪文を考えました。先に呪文だけ書いておきます。!bool);実行するたびに設定が切り替えられます。false);でOK。過程せっかくなので、作る過程を書いておきます。呪いだけ解きたい人はこの先は読まなくてもいいです。あと、Mac前提で話をしますがたぶんWindowsでも同様に見つけられると思います。前提として、Illustratorの環境設定をJavaScript(ExtendScript)で制御することは可能。そのためのプロパティ(各設定に対応するキー名)はスクリプティングの資料には載っていない。抜き書きしたものをGitHubに共有してくれているのだけど、この中にそれらしい名前のものは見つからなかった。しかたがないので自力で探すことにする。SDKをダウンロードすればドキュメントの中に手がかりがあるらしい。いうわけでダウンロード。SDKを選んでダウンロード。dmgファイルなので、マウントしてdocs/references/sdkdocs.tar.gzを展開。sdkdocs/index.htmlを開くとリファレンスが見られます。開くと解説が載っている。Reference(_a_i_preference_keys_8h.html)を開く。適当に「alternate」とか「glyph」とかで検索し、それっぽい物を発見。visible.よくわかんないけどこのtext/enableAlternateGlyphあたりがキーだと思う。なんとなくだよ!環境設定の値を取得するときは(Boolean値の場合)app.preferences.getBooleanPreference("キー");でできるようなので、まずはキーがあってるか確かめる。$.write(app.preferences.getBooleanPreference("text/enableAlternateGlyph"));trueが出力されたのでたぶんあってる。設定をオフにしてみる。こちらはsetBooleanPreference()を使う。false);IllustratorのGUIで確かめてみたところ、ちゃんとオフになってる!解呪成功!!せっかくならオン/オフを切り替えられるようにしたい、ということでちょっと修正。冒頭に書いたものとおなじです。!bool);これで実行するたびに切り替わるようになりました。あ、そういえばどうもお久しぶりです。JavaScriptタイトルで用は済んでるのですが、忘れないようにもう少しメモしておきます。CS6を前提に書いたものです。DOMをいじるよりInDesignのメニューコマンドを叩いてしまうほうが処理が楽なことって結構ありますが、パネルメニューの場合はそのパネルが表示状態になってないと動きません。表示状態というのはパネルのメニューボタンが押せる状態のことで、他のパネルとくっつけてタブ表示された状態であっても、それが背面になっていたら動かないってことです。MenuActionオブジェクトをたどるだけじゃなくて、パネルの表示状態も変更する必要があります。}}());リハビリ的エントリでした。JavaScript昨日かいたやつがeveryItem()やitemByRange()で取得したオブジェクトに対応できてなかったことに気付きまして。twitterで騒いだところ、判別しないで対応すればいいじゃないと教えていただきました。https://twitter.com/peprintenpa/status/570915349459136512というわけで、書き直し。引数に指定した数値ずつサイズを下げる。}}());最近everyItem()の便利さにちょっと目覚めました。JavaScript自分で書かないと忘れるのでメモしておきます。Paragraphに「指定した数値だけポイントサイズを下げる」ってメソッドを生やすとか。引数に指定した数値ずつサイズを下げる。}}());エラー処理はてきとーです。Paragraph(インスタンス)のpointSizeの値しか見てないので、段落内で文字サイズが違う場合対応できない。実験だとpointSizeは最初の文字のサイズが返ってきてるみたい。ExtendScriptのプリプロセッサディレクティブJavaScriptExtendScriptって名前、検索しづらいにもほどがあると思います。スクリプトをいくつかのファイルに分割したり、単機能のライブラリとして読み込んだりしたいとき、#includeディレクティブ(指示文)を記述するとインクルードすることができます。他にも#targetとか#targetengineだとかあって、使うたびに調べてて面倒になったのでまとめておこうと思いました。元ネタは「JavaScriptToolsGuideCC.pdf」。CCでの実験結果を含みます。"file1.jsxinc;folder/file2.jsxinc"Cとかに似てるそうですね、知らんけど。ポイントは以下の通り。先頭に#、続けてディレクティブ名、スペース、引数。末尾にセミコロンはつけない。引数に複数の値を指定するときはセミコロンで区切る。引数の引用符は必須ではないけど、英数字以外を含む場合や、複数指定する場合は必要。指定できるディレクティブは以下の6つ。#include#includepath#script#strict#target#targetengine順番にいきましょう。"../folder/file1.jsxinc"他のスクリプトファイルをインクルード(読み込んで実行)します。相対パス、絶対パスどちらも使えるっぽいです。ちなみに.jsxincというのは普通の.jsxファイルの拡張子を変えただけのファイルです。インクルード専用のファイルだということを明示するために付ける拡張子。InDesignのスクリプトパネルなどから直接実行できなくなります。ディレクティブは複数書いても大丈夫みたいですね。その場合は上から順に読み込まれます。"folder1;../folder2"インクルードするファイル(#includeで記述)のパスを指定します。相対パス、絶対パスどちらも使えます。これがなかなかややこしいというか、下手に使うと失敗しそうです。"multi.jsxinc"こんなふうに記述した場合、インクルードされるファイルは以下の4つ。(数字)は読み込み順です。(4)最後のは、実行中のスクリプトと同じ階層にあるファイルです。確かに#include自体相対パスとみなせるので理解はできるんだけど......ちょっと怖いのは私だけですか。面倒なので実験はしてないけど、これで#includeが複数あるともっとややこしくなりそうです。ファイル名をユニークにすること、グローバル変数を最低限にすることが大事っぽい。Name"スクリプトの名前を指定します。tab.」って書いてあるんだけど、どこで使われるんだかよくわからない。知ってる人いたら教えてください。onエラーチェックをstrict(厳密)モードにします。オブジェクトのプロパティがreadonly(読み込み専用)に設定されているとき、通常はスクリプトで上書きしようとしても無視されてそのまま進むだけなんだけど、strictモードがonだとエラーで止まるようになるみたいです。"indesign"スクリプトが動作するアプリケーションを指定します。ここで指定しておくと、.jsxファイルをダブルクリックしたとき、アプリケーションを起動して実行するかどうかのダイアログが出ます。指定しない場合はESTKで開くだけで、実行はされません。"session"スクリプトが動作するJavaScriptエンジンを指定します。通常、スクリプトで使用したグローバル変数は実行後に破棄されるんだけど、ここでmain以外を指定しておくと、スクリプトが動作したアプリケーションが起動している間はずっと変数が保持され、同じエンジンを指定したスクリプトから参照できるようになります。ScriptUIを使ってウィンドウやらパレットやらを作りたいときには指定必須です。おしまい正直#includepathのとこが書きたかっただけです。InDesignはいこんばんは。相互参照の作り方がけっこうめんどくさかったので自分用にメモ。CS6でしか動かしてません。あと、テキストアンカーへの参照は別の作り方するはずです。destination);で、たとえばこんなのを作れるねっていう思いつき。変数名は上のと一緒にしてます。選択中のテキストと同じ文言をドキュメント内から検索し、まとめて段落相互参照を設定します。辞書系ドキュメントの見出し語を選択して実行→本文中の同じ文言が全部相互参照になるとか。単なるテキスト検索なので精度を上げるには工夫が必要。destinationは使い回せる}使いどころは限定されると思う。実際のところ、私が使ったのは逆パターン(選択したテキストから参照先の見出しを探す)のほうだったりします。そもそも相互参照じたい使ってる人少なそうだけどねー。Photoshopたまにはアプリケーションに特化したことを書こうのコーナーです(今考えた)。いわゆる「別名保存」はDocment.saveAs()メソッドを使うんだけど、オプション類をいちいち調べるのが嫌になったのでまとめます。Reference(リンク先PDF)を信用して書いたものです。ESTK付属のオブジェクトモデルビューアよりずっと使いやすいのでおすすめ。保存先になるFileオブジェクト。ここで拡張子つけても無視してpsd形式にされる。他の形式にしたい場合はオプションで指定する必要がある。ファイル形式、および保存時のオプションを指定する。ファイル形式ごとにオブジェクト(クラス)が異なる。複製として保存するかどうか。