— Created 2017年12月15日 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use bPlus : script "BridgePlus"
use mdLib : script "Metadata Lib" version "1.0.0"
use jLib : script "japaneseTextEncodingDetector"
property NSURLIsDirectoryKey : a reference to current application’s NSURLIsDirectoryKey
property NSDirectoryEnumerationSkipsHiddenFiles : a reference to current application’s NSDirectoryEnumerationSkipsHiddenFiles
property NSPredicate : a reference to current application’s NSPredicate
property NSMutableArray : a reference to current application’s NSMutableArray
property NSDirectoryEnumerationSkipsPackageDescendants : a reference to current application’s NSDirectoryEnumerationSkipsPackageDescendants
property NSFileManager : a reference to current application’s NSFileManager
property |NSURL| : a reference to current application’s |NSURL|
property NSDirectoryEnumerationSkipsSubdirectoryDescendants : a reference to current application’s NSDirectoryEnumerationSkipsSubdirectoryDescendants
property NSArray : a reference to current application’s NSArray
property NSSortDescriptor : a reference to current application’s NSSortDescriptor
property SMSForder : a reference to current application’s SMSForder
load framework
tell application "CotEditor"
set dCount to count every document
if dCount = 0 then return
tell front document
set curPath to path
end tell
tell window 1
set aBounds to bounds
end tell
end tell
set aPath to current application’s NSString’s stringWithString:curPath
set fileName to (aPath’s lastPathComponent()) –ファイル名
set pathExtension to aPath’s pathExtension() as string
set parentFol to (aPath’s stringByDeletingLastPathComponent()) as string —親フォルダ
–同じフォルダから同じ拡張子のファイルのファイル名を取得
set fList to my getFilesByIncludedStringInName:(pathExtension) fromDirectory:(parentFol) exceptPackages:(true)
–昇順ソート
set aArray to NSArray’s arrayWithArray:fList
set desc1 to NSSortDescriptor’s sortDescriptorWithKey:"self" ascending:true selector:"localizedCaseInsensitiveCompare:"
set bArray to aArray’s sortedArrayUsingDescriptors:{desc1}
set cList to bArray as list
–ダイアログ表示用のデータを作成
set ccList to {}
repeat with i in cList
set j to POSIX path of (i as string)
set aStr to readJapanesTextFileWithGuessingEncoding(j) of jLib
if aStr = missing value or aStr = false then
display dialog "Encoding Error"
return
end if
set aPath to (current application’s NSString’s stringWithString:j)
set fileName to (aPath’s lastPathComponent()) as string –ファイル名
set aFirst to first item of paragraphs of aStr
set the end of ccList to (fileName & " / " & aFirst)
end repeat
set aMes to "項目を選択してください"
set selRes to retItemFromListByItemNo(ccList, aMes) of me
if selRes = false then return –Cancel
set newPath to contents of item selRes of cList
tell application "CotEditor"
set oldDoc to front document
open (POSIX file newPath) as alias
tell window 1
set bounds to aBounds
end tell
close oldDoc without saving
end tell
makeWinVertical() of me –縦書き表示
–Make CotEditor’s front window to Vertical display mode (Tategaki)
on makeWinVertical()
activate application "CotEditor"
tell application "System Events"
tell process "CotEditor"
try
click menu item "縦書きで表示" of menu 1 of menu bar item "フォーマット" of menu bar 1
end try
end tell
end tell
end makeWinVertical
on retFileFormatUTI(aExt as string)
if aExt begins with "." then set aExt to text 2 thru -1 of aExt
return (current application’s SMSForder’s UTIForExtension:aExt)
end retFileFormatUTI
on spotlightFindByLabels(aLabelList as list, thePath as string)
set aList to makeRepeatinglList(length of aLabelList, "kMDItemFSLabel == %@")
set aStr to retStrFromArrayWithDelimiter(aList, " OR ") of me
set fRes to mdLib’s searchFolders:{thePath} searchString:aStr searchArgs:aLabelList
return fRes
end spotlightFindByLabels
–リストを指定デリミタをはさんでテキスト化
on retStrFromArrayWithDelimiter(aList as list, aDelim as string)
set anArray to current application’s NSArray’s arrayWithArray:aList
return (anArray’s componentsJoinedByString:aDelim) as string
end retStrFromArrayWithDelimiter
–指定回数、指定アイテムを連結したリストを作成
on makeRepeatinglList(hitNum as integer, hitItem as string)
set outList to {}
repeat hitNum times
set the end of outList to hitItem
end repeat
return outList
end makeRepeatinglList
–指定フォルダ内の指定文字列を含むファイル名のファイルをPOSIX pathのlistで抽出する
on getFileNamesByIncludedStringInName:(fileNameStr as string) fromDirectory:(sourceFolder) exceptPackages:(packageF as boolean)
set fileManager to NSFileManager’s defaultManager()
set aURL to |NSURL|’s fileURLWithPath:sourceFolder
set theOptions to ((NSDirectoryEnumerationSkipsPackageDescendants) as integer) + ((NSDirectoryEnumerationSkipsHiddenFiles) as integer) + ((NSDirectoryEnumerationSkipsSubdirectoryDescendants) as integer)
set directoryContents to fileManager’s contentsOfDirectoryAtURL:aURL includingPropertiesForKeys:{} options:theOptions |error|:(missing value)
set findPredicates to NSPredicate’s predicateWithFormat_("lastPathComponent CONTAINS %@", fileNameStr)
set foundItemList to directoryContents’s filteredArrayUsingPredicate:findPredicates
–Remove Folders From found URL Array
set anArray to NSMutableArray’s alloc()’s init()
repeat with i in foundItemList
set j to contents of i
set {theResult, isDirectory} to (j’s getResourceValue:(reference) forKey:(NSURLIsDirectoryKey) |error|:(missing value))
–Collect files
if (isDirectory as boolean = false) then
(anArray’s addObject:j)
else if (packageF = false) then
–Allow Package files?
set {theResult, isPackage} to (j’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value))
if (isPackage as boolean) = true then
(anArray’s addObject:j)
end if
end if
end repeat
return (anArray’s valueForKey:"lastPathComponent") as list
end getFileNamesByIncludedStringInName:fromDirectory:exceptPackages:
–指定フォルダ内の指定文字列を含むファイル名のファイルをPOSIX pathのlistで抽出する
on getFilesByIncludedStringInName:(fileNameStr as string) fromDirectory:(sourceFolder) exceptPackages:(packageF as boolean)
set fileManager to NSFileManager’s defaultManager()
set aURL to |NSURL|’s fileURLWithPath:sourceFolder
set theOptions to ((NSDirectoryEnumerationSkipsPackageDescendants) as integer) + ((NSDirectoryEnumerationSkipsHiddenFiles) as integer) + ((NSDirectoryEnumerationSkipsSubdirectoryDescendants) as integer)
set directoryContents to fileManager’s contentsOfDirectoryAtURL:aURL includingPropertiesForKeys:{} options:theOptions |error|:(missing value)
set findPredicates to NSPredicate’s predicateWithFormat_("lastPathComponent CONTAINS %@", fileNameStr)
set foundItemList to directoryContents’s filteredArrayUsingPredicate:findPredicates
–Remove Folders From found URL Array
set anArray to NSMutableArray’s alloc()’s init()
repeat with i in foundItemList
set j to contents of i
set {theResult, isDirectory} to (j’s getResourceValue:(reference) forKey:(NSURLIsDirectoryKey) |error|:(missing value))
–Collect files
if (isDirectory as boolean = false) then
(anArray’s addObject:j)
else if (packageF = false) then
–Allow Package files?
set {theResult, isPackage} to (j’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value))
if (isPackage as boolean) = true then
(anArray’s addObject:j)
end if
end if
end repeat
return (anArray’s valueForKey:"path") as list
end getFilesByIncludedStringInName:fromDirectory:exceptPackages:
–リストから選択してアイテム番号を返す
on retItemFromListByItemNo(aList, aMes)
set aRes to choose from list aList with prompt aMes
if aRes = false then return 0
set aRes to contents of item 1 of aRes
set hitNum to 1
repeat with i in aList
set j to contents of i
if j is equal to aRes then
exit repeat
end if
set hitNum to hitNum + 1
end repeat
return hitNum
end retItemFromListByItemNo