Keynoteで作業がめんどくさくなったら、その場でAppleScriptを書いて使うシリーズ。Keynote v14で動かしていますが、別にバージョン依存している箇所はありません。もっと古いKeynoteでも動くと思います(KeynoteのAppleScript対応機能的には、slideのselectionができるようになったv12が実用下限だと思っています)。
Keynote書類の、章トビラに内容を個別のテキストアイテムで箇条書きしていたような場合に、
これを、全部結合して1つのテキストアイテムに入れたくなる時があります。
そこで、本ScriptのようなものをmacOS標準搭載のスクリプトメニューに入れて、
呼び出すために作ったものです。
実行すると、それぞれのテキストアイテムをY座標に着目してソートを行い、上→下の順番にならべかえて、テキストを取り出し、改行をはさみつつ連結します。
この後で、もとのテキストアイテムにこの連結したテキストを入れることになります。
一番上(positionのY座標が一番小さい)のテキストアイテムだけ残してあとは削除するわけですが、このあたりのオブジェクト操作もAppleScriptから操作してしまったほうがよさそうです。
ただし、Keynoteはテキストアイテム内の文字の上寄せ/下寄せの制御をAppleScriptからできないので(キーボードショートかメニューでも操作する?)そのあたりに「残念感」が残ってしまうかもしれません。
macOS標準搭載のスクリプトメニューに入れるAppleScriptで、絵文字を大量に入れるのは、大量のAppleScriptをメニューに入れるため文字だけだと視認性が低く、色付き文字を入れてそれぞれを識別しやすくするためです。
AppleScript名:🧭位置情報🧭をもとに🈴テキスト連結🈴して📎📎クリップボードへ📎📎.scpt |
use AppleScript use scripting additions use framework "Foundation" set outList to {} set outStr to "" tell application "Keynote" tell front document set aSel to selection if length of aSel = 0 then display dialog "Keynote書類上で何も選択されていません。" with title "オブジェクト選択エラー" buttons {"OK"} default button 1 with icon 2 return else if length of aSel = 1 then display dialog "Keynote書類上で複数のオブジェクトが選択されていません。" with title "オブジェクト選択エラー" buttons {"OK"} default button 1 with icon 2 return else if (class of first item of aSel = slide) then display dialog "Keynote書類上でスライドが選択されてしまっています。" with title "オブジェクト選択エラー" buttons {"OK"} default button 1 with icon 2 return end if repeat with i in aSel set j to contents of i set aClass to class of j if aClass = text item then set {aPosX, aPosY} to position of j set aCon to object text of j set the end of outList to {xPos:aPosX, yPos:aPosY, textCon:aCon} end if end repeat end tell end tell set bList to sortListAscending(outList, "yPos") of me repeat with i in bList set j to contents of i set aText to textCon of j set outStr to outStr & aText & return end repeat set the clipboard to outStr beep 1 –入れ子のリストを昇順ソート(AppleScriptObjC) on sortListAscending(theList as list, keyLabel) set anArray to current application’s NSMutableArray’s arrayWithArray:(theList) set theDescriptor to current application’s NSSortDescriptor’s sortDescriptorWithKey:(keyLabel) ascending:(true) set sortedList to anArray’s sortedArrayUsingDescriptors:{theDescriptor} return sortedList as list end sortListAscending |
More from my site
(Visited 16 times, 1 visits today)