Keynoteで日々さまざまな書類を作っており、Keynoteを使わない日はないと言って過言ではないほどです。
当然、Keynote関連の作業の効率化のためのAppleScriptを書くことが多くなります。そして、Keynote書類の連続したスライド(ページ)を選択し、それらのタイトルを加工するようなAppleScriptをよく使います。
たとえば、マル付き数字(例:①②③)の付け直し(リナンバー)AppleScriptはよく使いますが、
Keynote上で末尾ページから先頭ページに向かってページ選択できる、いわば「逆順選択状態」を画面上からの操作によって作り出せてしまうことに気づきました。
この状態でAppleScriptからselectionを取得すると、P-197、196、195、194、193、192、191と、意図しない順番でスライドオブジェクトを取得できてしまうことがわかりました。この逆順選択状態で、マル付き数字のリナンバーScriptを実行すると、末尾から番号が振られてしまいます。
この状態は、たとえば197ページを選択しておいて、SHIFTキーを押しながら、上向き矢印キーを押すことで選択範囲を拡張した場合に発生することがわかりました。この現象は、Keynote v14.0+macOS 13.6.7で発生を確認しています。
これは、バグではありません。ただ、意図しない状態を作り出せてしまうことについては、知っておく必要がある内容です。
selectionでアクセスできるSlideオブジェクトが、かならずしもページの先頭方向から順に末尾方向へと並んでいるわけではない、ということで対策が必要になりました。この手の、複数Slideを選択して実行するAppleScriptは割と多いので。
そこで、selctionから取得したSlideオブジェクトの先頭と末尾のSlide numberを取得し、先頭のSlide Numberが大きければ、selectionから取得したデータをその場で逆順に並べ替えるという対処を行いました。
AppleScript名:スライドの逆順選択状態を解消する.scpt |
tell application "Keynote" tell front document set aaSel to selection set fItem to class of first item of aaSel if fItem is not equal to slide then display dialog "Slide内のオブジェクトが選択されています。Slide単位で選択してください。" buttons {"OK"} default button 1 return end if set fItem to slide number of first item of aaSel set lItem to slide number of last item of aaSel –逆順選択が発生していた場合には、listを逆順に入れ替える if fItem > lItem then set aaSel to reverse of aaSel end if set fItem2 to slide number of first item of aaSel set lItem2 to slide number of last item of aaSel return {fItem2, lItem2} end tell end tell |