クリップボードからファイルパスを取得(少し改良)
#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "UniformTypeIdentifiers"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application
########################
## クリップボードの中身取り出し
########################
###初期化
set ocidPasteboard to refMe's NSPasteboard's generalPasteboard()
##中身の要素
set ocidPastBoardTypeArray to ocidPasteboard's types
#URL要素の確認
set boolFileName to ocidPastBoardTypeArray's containsObject:(refMe's NSFilenamesPboardType)
set boolFileURL to ocidPastBoardTypeArray's containsObject:("public.file-url")
set boolAppleURL to ocidPastBoardTypeArray's containsObject:("Apple URL pasteboard type")
#URL要素の取得
if boolFileName is true then
###NSFilenamesPboardTypeはUNIXパス形式
set ocidFilePathArray to ocidPasteboard's propertyListForType:(refMe's NSFilenamesPboardType)
else if boolFileName is false then
if boolFileURL is true then
##public.file-url の場合はNSURLのクラスを指定して取得した後でパス指定する
set ocidClassesArrayM to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
ocidClassesArrayM's addObject:((refMe's NSURL)'s class)
set ocidFilePathURLArray to ocidPasteboard's readObjectsForClasses:(ocidClassesArrayM) options:(missing value)
set ocidFilePathArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
repeat with itemArray in ocidFilePathURLArray
set ocidFilePath to itemArray's |path|
(ocidFilePathArray's addObject:(ocidFilePath))
end repeat
else if boolFileURL is false then
##Apple URL pasteboard typeにはURLは1つだけしか格納されない
set ocidAppleURLArray to ocidPasteboard's propertyListForType:("Apple URL pasteboard type")
set ocidFilePathArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
try
repeat with itemArray in ocidAppleURLArray
if itemArray ≠ (missing value) then
set ocidFilePathURL to (refMe's NSURL's URLWithString:(itemArray))
(ocidFilePathArray's addObject:(ocidFilePathURL's |path|))
end if
end repeat
on error
set ocidFilePathArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
(ocidFilePathArray's addObject:("ファイルのパスの取得に失敗しました"))
end try
else
set ocidFilePathArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
(ocidFilePathArray's addObject:("ファイルのパスの取得に失敗しました"))
end if
end if
########################
## 出力用のテキストにする
########################
set ocidOutPutString to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
repeat with itemArray in ocidFilePathArray
(ocidOutPutString's appendString:(itemArray))
(ocidOutPutString's appendString:("\n"))
end repeat
set strOutPutString to ocidOutPutString as text
########################
## ダイアログ
########################
##前面に
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 aliasIconPath to (POSIX file "/System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns")
try
set recordResult to (display dialog strOutPutString with title "戻り値です" default answer strOutPutString buttons {"クリップボードにコピー", "終了", "Finderに表示"} default button "Finderに表示" cancel button "終了" giving up after 20 with icon aliasIconPath without hidden answer) as record
on error
return "エラーしました"
end try
if (gave up of recordResult) is true then
return "時間切れです"
end if
##############################
#####Finderに表示
##############################
if button returned of recordResult is "Finderに表示" then
##NSWorkspaceで
set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
set ocidOpenURLsArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:0)
repeat with itemFilePath in ocidFilePathArray
set ocidFilePath to itemFilePath's stringByStandardizingPath()
set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath))
(ocidOpenURLsArray's addObject:(ocidFilePathURL))
end repeat
##SelectingURLsを実行する
appSharedWorkspace's activateFileViewerSelectingURLs:(ocidOpenURLsArray)
end if
##############################
#####値のコピー
##############################
if button returned of recordResult is "クリップボードにコピー" then
try
set strText to text returned of recordResult as text
set appPasteboard to refMe's NSPasteboard's generalPasteboard()
set ocidText to (refMe's NSString's stringWithString:(strText))
appPasteboard's clearContents()
appPasteboard's setString:(ocidText) forType:(refMe's NSPasteboardTypeString)
on error
tell application "Finder"
set the clipboard to strText as text
end tell
end try
end if
return 0
| 固定リンク
「NSPasteboard」カテゴリの記事
- クリップボード内のテキストに改行を<br />に変更して戻す 修正(2024.11.15)
- ペーストボードの内容の種類の確認(2024.10.06)
- [NSPasteboard]ペーストボードからテキストの取り出し(修正)(2024.07.02)
- 画像データをクリップボードにPDF形式で入れる(2024.06.28)
- クリップボードの中身で保存可能なものをファイルに保存する(2024.06.23)