macOS 12であらたに搭載されたショートカット.appのショートカット・ワークフローのアイコンを読み取ってダイアログ表示するAppleScriptです。
Shortcuts.appおよびShortcuts Events.app経由で各ショートカット・ワークフローの情報を取得することができます。
tell application "Shortcuts Events"
set aList to properties of shortcut 1
–> name:"ASTEST", class:shortcut, accepts input:false, action count:1, subtitle:"1個のアクション", folder:missing value, color:{62105, 22734, 24226}, computer name:«data TIFF4D4D002A00040008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 …..» id:"5CEF527E-F2E7-42A4-9513-209F098E50E9"}
end tell
★Click Here to Open This Script
ここで、「computer name」と解釈されているのがショートカット・ワークフローのアイコンです。このあたりバグくさいところですね。実際には「icon」という属性ラベルなのですが、、、、
iconデータの内容は最初の文字を見れば丸わかりのTIFF画像です。
手っ取り早く変換したかったので、クリップボード経由でNSImageに変換して、ダイアログに表示してみました。
この手の「ちょっとしたビューをアラートダイアログに入れてデータ表示」を行うのは、すでにノウハウがたまっていて気楽に行えるのが2021年的なAppleScriptの利用状況です。
とりあえず、すべてのショートカット・ワークフローのアイコンを取得することはできるのですが、全部確認するのはかったるいので冒頭の10個だけ表示しています。
AppleScript名:ショートカットのプロパティで返ってくるアイコンをダイアログ表示.scpt |
— – Created by: Takaaki Naganoya – Created on: 2021/10/27 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.8" use scripting additions use framework "Foundation" use framework "AppKit" property NSAlert : a reference to current application’s NSAlert property NSImage : a reference to current application’s NSImage property NSImageView : a reference to current application’s NSImageView property NSRunningApplication : a reference to current application’s NSRunningApplication property NSImageScaleProportionallyUpOrDown : a reference to current application’s NSImageScaleProportionallyUpOrDown property returnCode : 0 tell application "Shortcuts Events" set aCount to count every shortcut if aCount > 10 then set aCount to 10 –Too dull to see every icons…. If you want whole icons, remove this if-then block end if end tell repeat with i from 1 to aCount tell application "Shortcuts Events" set aProp to properties of shortcut i set aCon to icon of aProp set aName to name of aProp end tell –クリップボードの内容をNSImageに set the clipboard to aCon set aNSIMage to my getClipboardASImage() my dispNSImage(aNSIMage, aName) end repeat on dispNSImage(aNSIMage, aTitle) set aMessage to "Your NSImage" set paramObj to {myMessage:aTitle, mySubMessage:"This is an image", myImage:aNSIMage} my performSelectorOnMainThread:"displayImageView:" withObject:(paramObj) waitUntilDone:true –my displayImageView:paramObj–for debugging with Script Editor end dispNSImage on displayImageView:paramObj set aMainMes to myMessage of paramObj set aSubMes to mySubMessage of paramObj set anImage to (myImage of paramObj) set imgSize to (anImage’s |size|()) set imgWidth to ((imgSize’s width) as real) set imgHeight to ((imgSize’s height) as real) set anImageView to NSImageView’s alloc()’s initWithFrame:{origin:{x:0.0, y:0.0}, |size|:{width:imgWidth, height:imgHeight}} anImageView’s setImageScaling:(NSImageScaleProportionallyUpOrDown) anImageView’s setEditable:false anImageView’s setImage:anImage anImageView’s display() — set up alert set theAlert to NSAlert’s alloc()’s init() tell theAlert its setMessageText:aMainMes its setIcon:anImage its setInformativeText:aSubMes its addButtonWithTitle:"OK" its addButtonWithTitle:"Cancel" its setAccessoryView:anImageView end tell — show alert in modal loop NSRunningApplication’s currentApplication()’s activateWithOptions:0 my performSelectorOnMainThread:"doModal:" withObject:(theAlert) waitUntilDone:true if (my returnCode as number) = 1001 then error number -128 end displayImageView: on doModal:aParam set (my returnCode) to aParam’s runModal() end doModal: — クリップボードの内容をNSImageとして取り出して返す on getClipboardASImage() set theNSPasteboard to current application’s NSPasteboard’s generalPasteboard() set theAttributedStringNSArray to theNSPasteboard’s readObjectsForClasses:({current application’s NSImage}) options:(missing value) set theNSAttributedString to theAttributedStringNSArray’s objectAtIndex:0 return theNSAttributedString end getClipboardASImage |