#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#com.cocolog-nifty.quicktimer.icefloe
# 新規でステッキーズを生成します 色や文言はカスタマイズして利用してください
(*
v2 ZOrderの値を修正した
*)
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
##自分環境がos12なので2.8にしているだけです
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application
set appFileManager to refMe's NSFileManager's defaultManager()
#
tell application id "com.apple.Stickies"
quit
end tell
#
################################
######ペーストボードを取得
################################
set ocidPasteboard to refMe's NSPasteboard's generalPasteboard()
####タイプを取得
set ocidPastBoardTypeArray to ocidPasteboard's types()
log ocidPastBoardTypeArray as list
set boolContainPng to ocidPastBoardTypeArray's containsObject:"public.png"
set boolContainText to ocidPastBoardTypeArray's containsObject:"public.utf8-plain-text"
set boolContainRtf to ocidPastBoardTypeArray's containsObject:"public.rtf"
set boolContainTiff to ocidPastBoardTypeArray's containsObject:"public.tiff"
########################
##
########################
#保存先ディレクトリ
set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSLibraryDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidLibraryDirPathURL to ocidURLsArray's firstObject()
set ocidSaveDirPathURL to ocidLibraryDirPathURL's URLByAppendingPathComponent:("Containers/com.apple.Stickies/Data/Library/Stickies") isDirectory:(true)
###処理の分岐
if boolContainRtf is true then
##RTFの場合はそのまま
set ocidAttarStringArray to ocidPasteboard's readObjectsForClasses:({refMe's NSAttributedString}) options:(missing value)
set ocidAttarString to ocidAttarStringArray's firstObject()
set ocidRange to refMe's NSMakeRange(0, (ocidAttarString's |length|))
set ocidAttarData to ocidAttarString's RTFFromRange:(ocidRange) documentAttributes:(missing value)
set ocidUUIDString to doSaveAttarData(ocidAttarData, ocidSaveDirPathURL)
else if boolContainText is true then
##テキストの場合はダイアログを出す
set strReadString to doGetPasteboard()
set aliasIconPath to doGetAppIconAliasFilePath("com.apple.Stickies")
#前面に
set strName to (name of current application) as text
if strName is "osascript" then
tell application "Finder" to activate
else
tell current application to activate
end if
set strTitle to ("入力してください") as text
set strMes to ("メッセージ") as text
set recordResult to (display dialog strMes with title strTitle default answer strReadString buttons {"キャンセル", "OK"} default button "OK" cancel button "キャンセル" giving up after 30 with icon aliasIconPath without hidden answer)
if (gave up of recordResult) is true then
return "時間切れです"
else if (button returned of recordResult) is "キャンセル" then
return "キャンセルです"
else
set strSetValue to (text returned of recordResult) as text
end if
####
set ocidAttarData to doMakeAttarText(strSetValue)
set ocidUUIDString to doSaveAttarData(ocidAttarData, ocidSaveDirPathURL)
else if boolContainPng is true then
##画像の場合
set strSaveImageFileName to ("Attach.png") as text
set ocidImageData to ocidPasteboard's dataForType:(refMe's NSPasteboardTypePNG)
set ocidUUIDString to doSaveImageAttarData(ocidImageData, ocidSaveDirPathURL, strSaveImageFileName)
else if boolContainTiff is true then
set strSaveImageFileName to ("Attach.tif") as text
set ocidImageData to ocidPasteboard's dataForType:(refMe's NSPasteboardTypeTIFF)
set ocidUUIDString to doSaveImageAttarData(ocidImageData, ocidSaveDirPathURL, strSaveImageFileName)
else
return "キャンセル"
end if
################################
#PLIST 設定ファイルの読み込み
set ocidPlistFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(".SavedStickiesState") isDirectory:(false)
set ocidPlistArray to refMe's NSMutableArray's alloc()'s initWithContentsOfURL:(ocidPlistFilePathURL)
set numCntArray to (count of ocidPlistArray) as integer
#追加するDICT=新しいステっキーズのデータ
set ocidAddDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
#数値系 前後関係のINDEX
set numSetValue to (numCntArray + 1) as integer
ocidAddDict's setValue:(numSetValue) forKey:("ZOrder")
#開いているのが1 閉じているのが0
set numSetValue to (0) as integer
ocidAddDict's setValue:(numSetValue) forKey:("ExpandFrameY")
#日本語スペルチェックは無いのでデフォルト値
set numSetValue to (8455) as integer
ocidAddDict's setValue:(numSetValue) forKey:("SpellCheckingTypes")
#テキスト系
ocidAddDict's setValue:(ocidUUIDString) forKey:("UUID")
#開いた時のサイズ
ocidAddDict's setValue:("{300, 200}") forKey:("ExpandedSize")
#ポジション 左上原点 xy wh
ocidAddDict's setValue:("{{30, 335}, {300, 200}}") forKey:("Frame")
#BOOL系
set ocidBool to (refMe's NSNumber's numberWithBool:false)
ocidAddDict's setValue:(ocidBool) forKey:("Translucent")
set ocidBool to (refMe's NSNumber's numberWithBool:true)
ocidAddDict's setValue:(ocidBool) forKey:("Floating")
#色データはテキスト形式のDICTを個別で作成
#ControlColor
set ocidSetObjectDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
set numSetValue to (0.859) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Red")
set numSetValue to (0.772) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Green")
set numSetValue to (0.012) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Blue")
set numSetValue to (1) as integer
ocidSetObjectDict's setValue:(numSetValue) forKey:("Alpha")
ocidAddDict's setObject:(ocidSetObjectDict) forKey:("ControlColor")
#HighlightColor
set ocidSetObjectDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
set numSetValue to (0.737) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Red")
set numSetValue to (0.662) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Green")
set numSetValue to (0.007) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Blue")
set numSetValue to (1) as integer
ocidSetObjectDict's setValue:(numSetValue) forKey:("Alpha")
ocidAddDict's setObject:(ocidSetObjectDict) forKey:("HighlightColor")
#SpineColor
set ocidSetObjectDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
set numSetValue to (0.997) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Red")
set numSetValue to (0.917) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Green")
set numSetValue to (0.239) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Blue")
set numSetValue to (1) as integer
ocidSetObjectDict's setValue:(numSetValue) forKey:("Alpha")
ocidAddDict's setObject:(ocidSetObjectDict) forKey:("SpineColor")
#StickyColor
set ocidSetObjectDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
set numSetValue to (0.996) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Red")
set numSetValue to (0.956) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Green")
set numSetValue to (0.611) as number
ocidSetObjectDict's setValue:(numSetValue) forKey:("Blue")
set numSetValue to (1) as integer
ocidSetObjectDict's setValue:(numSetValue) forKey:("Alpha")
ocidAddDict's setObject:(ocidSetObjectDict) forKey:("StickyColor")
#作成した設定を読み込んだPLITに追加
ocidPlistArray's addObject:(ocidAddDict)
#SavedStickiesStateはテキスト形式のXMLなのでXML形式で保存
set ocidNSbplist to refMe's NSPropertyListXMLFormat_v1_0
set listPlistData to refMe's NSPropertyListSerialization's dataWithPropertyList:(ocidPlistArray) format:ocidNSbplist options:0 |error|:(reference)
set ocidPlistEditData to (item 1 of listPlistData)
###この場合は上書き
set listDone to ocidPlistEditData's writeToURL:(ocidPlistFilePathURL) options:0 |error|:(reference)
if (item 1 of listDone) is false then
return "保存に失敗しました"
end if
delay 0.5
tell application id "com.apple.Stickies"
activate
end tell
########################
## イメージの保存とRTFの生成
########################
on doSaveImageAttarData(argImageData, argSaveDirPathURL, argSaveImageFileName)
##RTFを生成
set strRTFString to ("{\\rtf1\\ansi\\ansicpg932\\cocoartf2761{\\NeXTGraphic Attach.png \\appleattachmentpadding0}}") as text
set ocidRTFString to refMe's NSString's stringWithString:(strRTFString)
set ocidAttarData to ocidRTFString's dataUsingEncoding:(refMe's NSUTF8StringEncoding)
#UUID=rtfdファイル名=ディレクトリ名
set ocidConcreteUUID to refMe's NSUUID's UUID()
set ocidUUIDString to ocidConcreteUUID's UUIDString()
#ファイル名は固定
set strFileName to ("TXT.rtf") as text
#rtfdファイル=ディレクトリのURL
set ocidUUIDDirPathURL to argSaveDirPathURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(false)
set ocidRtfdDirPathURL to ocidUUIDDirPathURL's URLByAppendingPathExtension:("rtfd")
#ディレクトリを作る アクセス権755
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
ocidAttrDict's setValue:(493) forKey:(refMe's NSFilePosixPermissions)
set appFileManager to refMe's NSFileManager's defaultManager()
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidRtfdDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
#RTFデータの保存先
set ocidSaveRTFPathURL to ocidRtfdDirPathURL's URLByAppendingPathComponent:(strFileName) isDirectory:(false)
#イメージデータの保存先
set ocidSaveImagePathURL to ocidRtfdDirPathURL's URLByAppendingPathComponent:(argSaveImageFileName) isDirectory:(false)
#保存
set ocidOption to (refMe's NSDataWritingAtomic)
#RTF
set listDone to ocidAttarData's writeToURL:(ocidSaveRTFPathURL) options:(ocidOption) |error|:(reference)
if (item 1 of listDone) is false then
return "保存に失敗しました"
end if
#イメージファイル
set listDone to argImageData's writeToURL:(ocidSaveImagePathURL) options:(ocidOption) |error|:(reference)
if (item 1 of listDone) is false then
return "保存に失敗しました"
end if
return ocidUUIDString
end doSaveImageAttarData
########################
## Attarテキストの保存
########################
on doSaveAttarData(argAttarData, argSaveDirPathURL)
#UUID=rtfdファイル名=ディレクトリ名
set ocidConcreteUUID to refMe's NSUUID's UUID()
set ocidUUIDString to ocidConcreteUUID's UUIDString()
#ファイル名は固定
set strFileName to ("TXT.rtf") as text
#rtfdファイル=ディレクトリのURL
set ocidUUIDDirPathURL to argSaveDirPathURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(false)
set ocidRtfdDirPathURL to ocidUUIDDirPathURL's URLByAppendingPathExtension:("rtfd")
#ディレクトリを作る アクセス権755
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
ocidAttrDict's setValue:(493) forKey:(refMe's NSFilePosixPermissions)
set appFileManager to refMe's NSFileManager's defaultManager()
set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidRtfdDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error|:(reference)
#RTFデータの保存先
set ocidSaveRTFPathURL to ocidRtfdDirPathURL's URLByAppendingPathComponent:(strFileName) isDirectory:(false)
#アトリビュートテキストのDATAを保存
set ocidOption to (refMe's NSDataWritingAtomic)
set listDone to argAttarData's writeToURL:(ocidSaveRTFPathURL) options:(ocidOption) |error|:(reference)
if (item 1 of listDone) is false then
return "保存に失敗しました"
end if
return ocidUUIDString
end doSaveAttarData
########################
## RTFデータの作成
########################
on doMakeAttarText(argText)
#アトリビュートテキストを生成する
set ocidAttarString to refMe's NSMutableAttributedString's alloc()'s initWithString:(argText)
#セットするDICT
set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
#フォントサイズ
#フォントファミリー指定はスタイル入りで
set ocidFont to refMe's NSFont's fontWithName:("BIZ UDPGothic Bold") |size|:(18)
#システムフォント指定
#set ocidFont to refMe's NSFont's boldSystemFontOfSize:(18)
ocidAttrDict's setObject:(ocidFont) forKey:(refMe's NSFontAttributeName)
#色指定
#set ocidSetColor to refMe's NSColor's colorWithDisplayP3Red:1.0 green:0 blue:0 alpha:1.0
#set ocidSetColor to refMe's NSColor's colorWithCalibratedRed:0.044 green:0.378 blue:0.673 alpha:1.0
set ocidSetColor to refMe's NSColor's grayColor()
ocidAttrDict's setObject:(ocidSetColor) forKey:(refMe's NSForegroundColorAttributeName)
#
set ocidRange to refMe's NSMakeRange(0, (ocidAttarString's |length|))
ocidAttarString's addAttributes:(ocidAttrDict) range:(ocidRange)
set ocidAttarData to ocidAttarString's RTFFromRange:(ocidRange) documentAttributes:(missing value)
return ocidAttarData
end doMakeAttarText
########################
## クリップボードの中身取り出し
########################
on doGetPasteboard()
set appPasteboard to refMe's NSPasteboard's generalPasteboard()
set ocidPastBoardTypeArray to appPasteboard's types
###テキストがあれば
set boolContain to ocidPastBoardTypeArray's containsObject:"public.utf8-plain-text"
if boolContain = true then
###値を格納する
tell application "Finder"
set strReadString to (the clipboard as text) as text
end tell
###Finderでエラーしたら
else
set boolContain to ocidPastBoardTypeArray's containsObject:"NSStringPboardType"
if boolContain = true then
set ocidReadString to ocidPasteboard's readObjectsForClasses:({refMe's NSString}) options:(missing value)
set strReadString to ocidReadString as text
else
log "テキストなし"
set strReadString to "入力してください" as text
end if
end if
return strReadString
end doGetPasteboard
########################
#AppIconのパスを求める
########################
on doGetAppIconAliasFilePath(argBundleID)
#
set appFileManager to refMe's NSFileManager's defaultManager()
set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
set ocidAppBundle to (refMe's NSBundle's bundleWithIdentifier:(argBundleID))
if ocidAppBundle ≠ (missing value) then
set ocidAppPathURL to ocidAppBundle's bundleURL()
else if ocidAppBundle = (missing value) then
set ocidAppPathURL to (appSharedWorkspace's URLForApplicationWithBundleIdentifier:(strBundleID))
end if
if ocidAppBundle ≠ (missing value) then
set ocidAppPathURL to ocidAppBundle's bundleURL()
else if ocidAppBundle = (missing value) then
set ocidAppPathURL to (appSharedWorkspace's URLForApplicationWithBundleIdentifier:(strBundleID))
end if
if ocidAppPathURL = (missing value) then
tell application "Finder"
try
set aliasAppApth to (application file id strBundleID) as alias
on error
return "アプリケーションが見つかりませんでした"
end try
end tell
set strAppPath to POSIX path of aliasAppApth as text
set strAppPathStr to refMe's NSString's stringWithString:(strAppPath)
set strAppPath to strAppPathStr's stringByStandardizingPath()
set ocidAppPathURL to refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:true
end if
####ダイアログに指定アプリのアイコンを表示する
###アイコン名をPLISTから取得
set ocidPlistPathURL to ocidAppPathURL's URLByAppendingPathComponent:("Contents/Info.plist") isDirectory:false
set ocidPlistDict to refMe's NSMutableDictionary's alloc()'s initWithContentsOfURL:(ocidPlistPathURL)
set strIconFileName to (ocidPlistDict's valueForKey:("CFBundleIconFile")) as text
###ICONのURLにして
set strPath to ("Contents/Resources/" & strIconFileName) as text
set ocidIconFilePathURL to ocidAppPathURL's URLByAppendingPathComponent:(strPath) isDirectory:false
###拡張子の有無チェック
set strExtensionName to (ocidIconFilePathURL's pathExtension()) as text
if strExtensionName is "" then
set ocidIconFilePathURL to ocidIconFilePathURL's URLByAppendingPathExtension:"icns"
end if
##-->これがアイコンパス
log ocidIconFilePathURL's absoluteString() as text
###ICONファイルが実際にあるか?チェック
set boolExists to appFileManager's fileExistsAtPath:(ocidIconFilePathURL's |path|)
###ICONがみつかない時用にデフォルトを用意する
if boolExists is false then
set aliasIconPath to POSIX file "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertNoteIcon.icns"
else
set aliasIconPath to ocidIconFilePathURL's absoluteURL() as alias
end if
return aliasIconPath
end doGetAppIconAliasFilePath