Keynote、Pages、NumbersのいわゆるiWorkアプリケーションがそろってアップデートし、日本語、中国語、韓国語の縦書きテキストに対応しました。
Keynote | Pages | Numbers | |
---|---|---|---|
macOS 10.12 | v8.1 | v7.1 | v5.1 |
macOS 10.13 | v9.0 | v8.0 | v6.0 |
macOS 10.14 | v9.0 | v8.0 | v6.0 |
この、macOS 10.14用のバージョンが今回の最新アップデートです。最新のiWorkアプリケーションは最新のmacOSが必要です(記事執筆時にはmacOS 10.13用のアップデータが出ていなかったのでこう書きました。現在は10.13/10.14で実行可能)。
iWorkアプリケーション、とくにPagesについては日本語の縦書きができないことに対してMac App Store上で膨大な批判コメントがついており、アップデートとともにこれらの批判をかわそうという意図のようです(かわすだけで、もう一歩進んだ使い方の提案などはしていないもよう)。
macOS 10.12で足踏みをしている多くのユーザー(10.13が地雷すぎてアップデートできなかったユーザー)にアップデートを思い切らせるだけのものがあるでしょうか?
AppleScript用語辞書にselectionが装備され、Pagesでは活用できる
例によってこれらのiWorkアプリケーションのAppleScript用語辞書を書き出して前バージョンと比較したところ、数少ないものの大きな変更が加わっていることがわかりました。それが「selection」の実装です。
「選択中のオブジェクトに対してScriptで操作を行う」
という処理がほぼできなかったiWorkアプリケーションにおいて、selectionが実装されたことの意味は大きいと思います。
ただし、本当にすべてのオブジェクトをselectionで取得できるのか、実際に検証するまでわかりません(それがAppleクオリティー)。
検証したところ、KeynoteとNumbersではほとんど機能アップしておらず、既存の「選択中のスライド」(current slide)「現在のドキュメント」(front document)という範囲でしかselectionが機能していないことが判明しました(Numbersで「選択中の表」をselectionから取得できないのはとても残念。別の方法(↓)はあるけど)。
tell application "Numbers"
tell front document
tell active sheet
set theTable to first table whose class of selection range is range
tell theTable
try
set selList to value of every cell of selection range –選択範囲のデータを取得
on error
return "" –何も選択されてなかった場合
end try
end tell
end tell
end tell
end tell
★Click Here to Open This Script
唯一、Pagesではさまざまな選択中のオブジェクトにアクセスできるようになっており、常識的なエンジニアが担当していれば、じきに各アプリケーション間の機能の不整合を修正してくることでしょう。
今回のアップデートが、Pagesを中心に行われた(Pagesと共通の部品を使って、ついでにオマケでKeynoteとNumbersの機能アップが行われた)ことが伺い知れます。
Pages書類上のオブジェクトでも、状態によって参照できないケースも
まだ実装途上と思わせるものが、このあたりにあります。書類内のさまざまなオブジェクトによって、状態によってはselectionから(実際に選択していても)参照できないものがありました。とくに、Pages書類上の本文テキストをselectionから取得できないことについては、「テキストエディタ以下」「CotEditorの爪の垢でも煎じて飲ませてもらえ」ともいえるわけで、最大のがっかりポイントといえます。
オブジェクト配置=テキストと移動(デフォルト) | オブジェクト配置=移動しない | |
---|---|---|
本文中の文字 | selectionから取得できない(エラーになる) | selectionから取得できない(エラーになる) |
表(table) | selectionから取得できない(エラーになる) | 取得できる |
図形(shape) | 取得できる | 取得できる |
グラフ(chart) | 取得できる | 取得できる |
画像(image) | 取得できる | 取得できる |
テキストオブジェクト(shape) | 取得できる | 取得できる |
ムービー(movie) | 取得できる | 取得できる |
ライン(line) | 取得できる | 取得できる |
また、imageオブジェクトはファイルパスを「file」という属性ラベルで返してくることになっているのですが、この「file」が既存のAppleScriptの予約語とコンフリクトしており、属性値をまとめて取得しようとするとエラーになります。
imageオブジェクトからfile属性を単独で取得してもエラーになるため、Scripterからは解決方法がありません。ここは予約語を「image path」などのコンフリクトしない単語ないし連語に変更することで問題の回避を行なっていただきたいものです。
縦書き属性はAppleScriptから操作不能
現時点では、AppleScriptでアクセス可能な属性値に縦書きへの変更を行うためのものは用意されていません。縦書きのテキストオブジェクトを任意の場所に作成するといった処理は無理です。
しいていえば、あらかじめ縦書きのテキストアイテム(place holder)を含むテンプレート書類を用意しておき、テンプレートから作成した新規書類のplace holderにテキストを流し込むぐらいでしょうか。あと、GUI Scriptingで強引に操作すれば、縦書きのテキストアイテムを生成できないこともありません。
けっこうグッときました
最初、用語辞書の中に「selection」をみつけたときにはメイン環境をmacOS 10.12.6から10.14.4にアップデートしかけました。
ただ、詳細に検証して実態がわかると、アップデートを思いとどまりました。「selection」が利用できることの意義は大きいですが、Pagesの地の文(本文)の選択範囲が取得できないなど、何を目的として実装されたかが不明な仕上がりになっています。最終的には、本文テキストないしオブジェクト内部テキストの選択を取得するselectionと、各オブジェクトの選択を求めるselected itemの2つに分けるのがスマートなやり方だと思います(実装する方にしてみれば、泥臭い努力が必要なわけですが)。
Pagesのtableオブジェクトへのアクセスに「オブジェクト配置=移動しない」への設定が要求されることについては、かなり根深い問題があるものと思われますが、もう2・3発ジャブが入っていたら(Keynote上のテキストオブジェクトとか、Numbers上の表オブジェクトをselectionからアクセスできたとか)macOS 10.14にアップデートしていたかもしれません。