AppleScript

Working With Automation


AppleScript や Automatorで何か出来るのか?
これからは
この文書のリンクを教えようかな…
73 人の TidBITS 読者から寄せられた Mac 自動化物語
http://jp.tidbits.com/TidBITS-jp-1353.html#lnk3


Website_image00290402_162924


そうなのよ

もう少しアプリケーションの機能や効果を勉強してくれて
エラーになったりした時に、冷静に手順を再現できたりしてくれれば
もう少し問題解決が早くなるんだよねぇ〜

|

[AppleScript]空のRTFを作成する

リッチテキストの空のファイルを作るには
何通りか、方法を考えついたが、簡単そうなのに落ち着いた。
10.12の機器が何台か現場に導入されて
一部のスクリプトでテキストエディタの保存部分で
エラーになる物があった、個々にエラーの内容を精査する時間が無いので
『動作する』記述にパパパッット書き換えてしまった。

時間が無いって恐ろしい…汗

(*

ユーザードメインの書類(documents)フォルダに
空のRTFリッチテキストフォーマットのファイルを作成します。
空のテキストファイルをtextutilコマンドでRTF化します。
10.12の登場で今までの方法では問題が出て来たので
今後はこの方法にする
20170106 初回作成

*)


---ファイル名用の日付け
set theDateAmdTime to (do shell script "date '+%Y%m%d_%k%M%S'") as text
---Finderよびだし
tell application "Finder"
---日付けをファイル名に
set theFileName to theDateAmdTime as text
---書類フォルダまでのエイリアスパス
set aliasFolder to (the path to documents folder from user domain) as alias
try
---ファイル名に拡張子追加して新規ファイルを作成
make new file at aliasFolder with properties {name:(theFileName & ".txt")}
end try
---新しいファイルまでのパスをエイリアスとして格納
set aliasNewFile to (((aliasFolder) as text) & ((theFileName & ".txt") as text)) as alias
---新規ファイルの処理終了
end tell
---テキストファイルまでのパスをUNIXパスに変換
set theNewFilePath to quoted form of (the POSIX path of aliasNewFile) as text
---テキストファイルを変換するコマンドを整形
set theCommandText to ("textutil -convert rtf " & " -extension rtf " & theNewFilePath & "") as text
---コマンド実行
do shell script theCommandText
---元のテキストファイルをtmpに入れる
(*
/private/tmpに移動されたファイルは
次回の再起動時に削除される
*)
tell application "Finder"
---起動ディスクの名称を取得
set theStartupDiskName to (path to startup disk) as text
---tmpフォルダへのエイリアスパスをテキストで整形
set theTmpPathTXT to (theStartupDiskName & "private:tmp:") as text
---エイリアスに変換
set aliasTmpPath to theTmpPathTXT as alias
---テキストファイルをtmpに移動
move file aliasNewFile to aliasTmpPath
(* ごみ箱に入れる場合はこちら
move file aliasNewFile to (the path to trash folder from user domain)
*)
---テキストファイルの移動の終わり
end tell
(* 処理の後テキストエディタで開く場合は以下
---テキストエディタのはじまり
tell application "TextEdit"
---新しいファイルまでのパスをエイリアスとして格納
set aliasNewRtfFile to (((aliasFolder) as text) & ((theFileName & ".rtf") as text)) as alias
---オープンファイル
set objOpenFile to open aliasNewRtfFile
---オープンしたファイル
tell objOpenFile
---ここでオープンしたファイルに色々な処理を
end tell
end tell
*)

「MakeNewRtfFile.scpt.zip」をダウンロード

|

フラットパッケージをバンドルパッケージに

---flat_pkg_expand.scpt
(*
単機能スクリプト
フラットパッケージを拡張してバンドルパッケージに変換します。
インストールされる物が気になる時用
20161001 初回作成

*)


---ダブルクリックの始まり
on run
---プロンプトの文言改行が使えます。改行入れる所には『\n』を入れます
set theWithPrompt to "flat packageを拡張してbundles packageに変換します"
---ファイル選択ダイアログのデフォルトのディレクトリ
set theDefLoc to path to downloads folder from user domain
---UTI指定複数ある時はカンマで区切る
---本当は↓で動作するはずだが上手く動作しない
---set theFileType to "com.apple.installer-package,com.apple.application-bundle" as text
set theFileType to "" as text
set AppleScript's text item delimiters to {","}
---ファイルタイプをリストにする
set theFileTypeList to (every text item of theFileType) as list
set AppleScript's text item delimiters to {""}
---ダイアログを出して選択されたファイルは「open」に渡す
open (choose file default location theDefLoc ¬
with prompt theWithPrompt ¬
of type theFileTypeList ¬
invisibles true ¬
with showing package contents without multiple selections allowed)
end run


on open objOpenPath
---OpenしたファイルのパスをUNIXパスに変換
set theOpenPath to POSIX path of objOpenPath
---コマンド整形
set theCmdCom to "pkgutil --expand '" & theOpenPath & "' '" & theOpenPath & ".expand.pkg'" as text
---コマンド実行
do shell script theCmdCom
end open

「flat_pkg_expand.scpt.zip」をダウンロード

|

不可視ファイルを削除する


ローカルディスク上のフォルダを選択した場合

findコマンドを使って削除する

リムーバブルディスクの場合

dot_cleanコマンドを使って削除します。


ftpを使ってマルっとアップロードする時用

--dot_clean.scpt
(*
不可視ファイルを削除する
選択したディレクトリが『リムーバブル』なら
dot_cleanでクリーニングする
選択したディレクトリがローカルの場合は
findを使って削除する
*)

on run
---プロンプトの文言改行が使えます\nを入れます
set theWithPrompt to ".』ドットからはじまるリソースファイルを削除します"
---ファイル選択ダイアログのデフォルトのディレクトリ
set theDefLoc to POSIX file "/Volumes"
---ダイアログを出して選択されたファイルは「open」に渡す
open (choose folder default location theDefLoc ¬
with prompt theWithPrompt ¬
invisibles true ¬
with multiple selections allowed without showing package contents)
end run



on open objOpenPath
---リストから読み込む順番の初期化
set numCntList to 1 as number
---繰り返し回数の初期化
set numCntRepeat to 0 as number
---リストの項目数を数える
set numCntRepeat to (count of objOpenPath) as number
---リピートの開始
repeat numCntRepeat times
---順番に読み込む
set theReadTextFileLine to (item numCntList of objOpenPath) as text
---openからの返り値をUNIXパスに変換
set theOpenPath to POSIX path of theReadTextFileLine as text
---区切り文字を指定して
set AppleScript's text item delimiters to ":"
---パスをリストに格納します
set listObjPath to text items of theReadTextFileLine
---区切り文字は戻しておきます
set AppleScript's text item delimiters to ""
---パスの最初の文字=ディスクの名前を取得しておきます
set theObjPathDiskName to (item 1 of listObjPath) as text
---そのディスクが取り外し可能か?ローカルか?を判定
tell application "Finder"
set theEjectableDiskName to (get name of disks whose local volume = true and ejectable = true) as text
end tell
---ローカルディスク|リームーバブルならdot_cleanを使う
if theEjectableDiskName contains theObjPathDiskName then
---コマンドをテキストで整形
set theCmdCom to ("dot_clean -m \"" & theOpenPath & "\"") as text
---コマンドを実行
try
do shell script theCmdCom
end try
log "Done dot_clean"
else
---ネットワークボリュームや排出出来ない(起動ディスク)ボリュームの場合はFindを使う
---TemporaryItemsフォルダを削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \".TemporaryItems\" -depth -exec rm -Rf {} \\;") as text
try
do shell script theCmdCom
end try
---DS_Store削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \".DS_Store\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---localized削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \".localized\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---Thumbs.db削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \"Thumbs.db\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---Desktop.ini削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \"Desktop.ini\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---Bridgeのキャッシュ削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \".BridgeSort\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---Bridgeのキャッシュ削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \".BridgeLabelsAndRatings\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
---分割されたリソースフォークファイルを削除
set theCmdCom to ("find \"" & theOpenPath & "\" -name \"._*\" -depth -exec rm {} \\;") as text
try
do shell script theCmdCom
end try
log "Done Find"
end if
---読み込み順をカウントアップ
set numCntList to numCntList + 1 as number
end repeat
end open


「dot_clean.scpt.zip」をダウンロード

|

ファイルをファイル名のフォルダに格納してからDMGにする

DMGファイルはMacにとって、とても便利なディスクイメージです。
圧縮が可能で暗号化にパスワードの指定
リソースフォークを保持出来る(HFS+等を選択すれば)
サーバー等から呼び出した時にPKGを実行出来る等々
Macな環境内では『ある意味で』最強かも(まぁちょっと破損が怖いけど)

ファイルを選択

ファイル名のフォルダを作成してその中にファイルを入れる

ファイル名のDMGを作る


いった流れ

(*
makeDMG4File.scpt
20160829 初回作成

選んだファイルをフォルダに入れてDMGファイルに変換します。

*)

---■■■■ ダブルクリックの始まり
on run
---プロンプトの文言改行が使えます\nを入れます
set theWithPrompt to "ディスクイメージに変換します"
---ファイル選択ダイアログのデフォルトのディレクトリ
set theDownloadsFolderPath to path to desktop folder from user domain
---Uniform Type Identifier指定
---詳しくは http://goo.gl/6jAQa Uniform Type Identifier
set theFileType to "" as text
---のファイルタイプをリスト形式に整形する
set AppleScript's text item delimiters to {","}
set theFileTypeList to every text item of theFileType
---ダイアログを出して選択されたファイルは「open」に渡す
open (choose file default location theDownloadsFolderPath ¬
with prompt theWithPrompt ¬
of type theFileTypeList ¬
invisibles true ¬
with multiple selections allowed without showing package contents)
(* フォルダをの場合はこちらを
open (choose folder default location theDownloadsFolderPath ¬
with prompt theWithPrompt ¬
invisibles true ¬
with multiple selections allowed without showing package contents)
*)
end run


---openドロップの始まり
on open DropObj

--- 繰り返しの始まり
repeat with ObjFiles in DropObj
---オブジェクトのエイリアスを取得
set theAlias to ObjFiles as alias
---オブジェクトの情報を取得
set theFileInfo to info for ObjFiles as alias
---エイリアス形式をテキストに変換
set theAliasPath to theAlias as text
---ファイル名を取得
set theName to (name of theFileInfo) as text
---拡張子を取得
set theNameExtension to (name extension of theFileInfo) as text
----
if (folder of theFileInfo) is false then
---エイリアスパスからファイル名を引いてディレクトリを取得
set theDirName to my doReplace(theAliasPath, theName, "") as text
else if (folder of theFileInfo) is true then
---エイリアスパスからファイル名を引いてディレクトリを取得
set theDirName to my doReplace(theAliasPath, (":" & theName), "") as text
end if
---ファイル名から拡張子を取り除く
set theShortName to my doReplace(theName, ("." & theNameExtension), "") as text
---ディレクトリをUNIXパス形式に
set theDirPath to POSIX path of theDirName as text
---日付けと時間からテンポラリー用のフォルダ名を作成
set theNowTime to (my doDateAndTIme(current date)) as text
-----------------------------------フォルダを作って
tell application "Finder"
try
make new folder at folder theDirName with properties {name:theNowTime}
on error
log "フォルダの作成時にエラーが発生しました"
end try
end tell
-----------------------------------ファイルを中に入れて
tell application "Finder"
try
move ObjFiles to folder theNowTime of folder theDirName with replacing
on error
log "ファイルの移動時にエラーが発生しました"
end try
end tell
-----------------------------------フォルダの名前をファイル名に変更する
tell application "Finder"
try
set name of folder theNowTime of folder theDirName to theShortName
on error
log "フォルダの名称変更時にエラーが発生しました"
end try
end tell
-----------------------------------DMGを作成する
---パス指定
set theSrcFolder to (POSIX path of (theDirPath & theShortName)) as text
---コマンド実行
do shell script "hdiutil create -fs HFS+ -srcfolder '" & theSrcFolder & "' -volname '" & theShortName & "' '" & theDirPath & theShortName & ".dmg'"
---繰り返しの終了
end repeat


end open



----ここからサブルーチン
to doReplace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end doReplace
------------------------------
to doDateAndTIme(theDate)
set y to (year of theDate)
set m to my monthNumStr(month of theDate)
set d to day of theDate
set hms to time of theDate
set hh to h of sec2hms(hms)
set mm to m of sec2hms(hms)
set ss to s of sec2hms(hms)
return (y as text) & my zero1(m) & my zero1(d) & "_" & zero1(hh) & zero1(mm) & zero1(ss)
return (y as text) & my zero1(m) & my zero1(d)
end doDateAndTIme
------------------------------
to monthNumStr(theMonth)
set monList to {January, February, March, April, May, June, July, August, September, October, November, December}
repeat with i from 1 to 12
if item i of monList is theMonth then exit repeat
end repeat
return i
end monthNumStr
------------------------------
to sec2hms(sec)
set ret to {h:0, m:0, s:0}
set h of ret to sec div hours
set m of ret to (sec - (h of ret) * hours) div minutes
set s of ret to sec mod minutes
return ret
end sec2hms
------------------------------
to zero1(n)
if n < 10 then
return "0" & n
else
return n as text
end if
end zero1

「makeDMG4File.scpt.zip」をダウンロード

|

Install_Adobe_Output_Module_CC2015.scpt

BridgeCC2015の出力パネル|AOM(Adobe Output Module)をインストールします

(*
AOM(Adobe Output Module)インストーラー
20160723 Install_Adobe_Output_Module_CC2015 初回作成
################################
【重要】2015がインストールされているのが前提です
################################


AOM(Adobe Output Module)Mac版は
解凍時のアクセス権の影響で
複数の人が同じ機器を利用する場合
インストールした人以外が出力パネルを利用出来ない(エラーになる)
インストールからアクセス権設定までを自動化して
トラブル防止用に作成した
業務用に作成した物を可読性を配慮して作り直した
アクセス権でstaffにフルアクセス権を付けている(ここは好みの問題)
Bridge Help / Install Adobe Output Module
https://helpx.adobe.com/bridge/kb/install-output-module-bridge-cc.html
詳しくはこちら
http://force4u.cocolog-nifty.com/skywalker/2015/12/aomadobe-output.html
*)

----ログを表示
tell application "AppleScript Editor"
activate
try
tell application "System Events" to keystroke "3" using {command down}
end try
try
tell application "System Events" to keystroke "l" using {option down, command down}
end try
end tell

-----Bridge CC 2015 のインストール判定
try
set theLocalSuppDir to (path to application support folder from local domain) as text
set theLocalSuppBrCCdir to (theLocalSuppDir & "Adobe:Bridge CC 2015 Extensions:") as text
set aliasLocalSuppBrCCdir to theLocalSuppBrCCdir as alias
on error
return "BridgeCC2015が未インストールです"
end try





---日付けと時間からテンポラリー用のフォルダ名を作成
set theNowTime to (my doDateAndTIme(current date)) as text
---テンポラリー用フォルダのパスを定義
set theTrashDir to ("/tmp/" & theNowTime) as text


-----テンポラリーフォルダを作成
try
set theCommand to ("mkdir -pv " & theTrashDir) as text
do shell script theCommand
set theTmpPath to theTrashDir as text
delay 1
on error
return "テンポラリフォルダ作成でエラーが発生しました"
end try

-----ファイルをダウンロード
try
set theCommand to ("curl -L -o '" & theTmpPath & "/AOM_Package_Mac.zip' 'https://helpx.adobe.com/content/help/en/bridge/kb/install-output-module-bridge-cc/_jcr_content/main-pars/download_1/file.res/AOM_Package_Mac.zip'") as text
do shell script theCommand
delay 1
on error
return "ダウンロードでエラーが発生しました"
end try
-----ファイルを解凍
try
set theCommand to ("unzip '" & theTmpPath & "/AOM_Package_Mac.zip' -d '" & theTmpPath & "'") as text
do shell script theCommand
delay 1
on error
return "ファイルの解凍でエラーが発生しました"
end try
-----インストール先のフォルダを確保
try
set theCommand to ("sudo mkdir -p '/Library/Application Support/Adobe/Bridge CC 2015 Extensions'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo mkdir -p '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Workspaces'") as text
do shell script theCommand with administrator privileges
on error
----ここはエラー制御無しで
end try
-----ワークススペースファイルを移動(おきかえ)
try
set theCommand to ("sudo mv -f '" & theTmpPath & "/AOM_Mac/AdobeOutputModule.workspace' '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Workspaces'") as text
do shell script theCommand with administrator privileges
on error
---ここはエラー制御無しでOKかな
end try
-----モジュールを移動(エラーしたら削除してから新しいファイルを移動)
try
set theCommand to ("sudo mv -f '" & theTmpPath & "/AOM_Mac/Adobe Output Module' '/Library/Application Support/Adobe/Bridge CC 2015 Extensions'") as text
do shell script theCommand with administrator privileges
on error
set theCommand to ("sudo mv -f '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Adobe Output Module' '" & theTmpPath & "'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo mv -f '" & theTmpPath & "/AOM_Mac/Adobe Output Module' '/Library/Application Support/Adobe/Bridge CC 2015 Extensions'") as text
do shell script theCommand with administrator privileges
end try
-----アクセス権を修正775(アクセス権は好みで)
try
set theCommand to ("sudo chown -Rf root '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Adobe Output Module'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo chgrp -Rf staff '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Adobe Output Module'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo chmod -Rf 775 '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Adobe Output Module'") as text
do shell script theCommand with administrator privileges
on error
return "アクセス権修正でエラーが発生しました"
end try
-----アクセス権を修正775(アクセス権は好みで)
try
set theCommand to ("sudo chown -Rf root '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Workspaces/AdobeOutputModule.workspace'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo chgrp -Rf staff '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Workspaces/AdobeOutputModule.workspace'") as text
do shell script theCommand with administrator privileges
set theCommand to ("sudo chmod -Rf 775 '/Library/Application Support/Adobe/Bridge CC 2015 Extensions/Workspaces/AdobeOutputModule.workspace'") as text
do shell script theCommand with administrator privileges
on error
return "アクセス権修正でエラーが発生しました"
end try
-----Workspacesキャッシュクリア
try
set theUserBridgeDir to path to application support folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/Support'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Adobe/Bridge CC 2015' '" & theTmpPath & "/Support'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try

-----Commonクリア
try
set theUserBridgeDir to path to application support folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/Common'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Adobe/Common' '" & theTmpPath & "/Common'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try
-----Preferencesクリア
try
set theUserBridgeDir to path to preferences folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/Preferences'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Adobe/Bridge' '" & theTmpPath & "/Preferences'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try
-----plistクリア
try
set theUserBridgeDir to path to preferences folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/Preferences'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "com.adobe.bridge6.3.plist' '" & theTmpPath & "/Preferences'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try
-----Cachesクリア
try
set theUserBridgeDir to path to library folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/Caches'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Caches/Adobe' '" & theTmpPath & "/Caches'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try
-----Cachesクリア Bridge CC 2015 version 6.3
try
set theUserBridgeDir to path to library folder from user domain
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath2015 & "/Caches'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Caches/com.adobe.bridge6.3' '" & theTmpPath2015 & "/Caches'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try

-----temporary itemsクリア
try
set theUserBridgeDir to path to temporary items
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/TemporaryItems'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Adobe' '" & theTmpPath & "/TemporaryItems'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try


-----temporary itemsクリア
try
set theUserBridgeDir to path to temporary items
set theUserBridgeDir to (POSIX path of theUserBridgeDir) as text
set theCommand to ("mkdir -p '" & theTmpPath & "/TemporaryItems'") as text
do shell script theCommand with administrator privileges
set theCommand to ("mv -f '" & theUserBridgeDir & "Adobe Output Module' '" & theTmpPath & "/TemporaryItems'") as text
do shell script theCommand with administrator privileges
on error
-----ここはエラー制御なし
end try






return "AOM(Adobe Output Module)のインストールが終了しました\rブリッジを起動させて出力パネルを確認してください\rテンポラリフォルダの中身は次回起動時に消去されます"


--------------------------------------------------#ここからサブルーチン
to doDateAndTIme(theDate)
set y to (year of theDate)
set m to my monthNumStr(month of theDate)
set d to day of theDate
set hms to time of theDate
set hh to h of sec2hms(hms)
set mm to m of sec2hms(hms)
set ss to s of sec2hms(hms)
return (y as text) & my zero1(m) & my zero1(d) & "_" & zero1(hh) & zero1(mm) & zero1(ss)
return (y as text) & my zero1(m) & my zero1(d)
end doDateAndTIme

------------------------------
to monthNumStr(theMonth)
set monList to {January, February, March, April, May, June, July, August, September, October, November, December}
repeat with i from 1 to 12
if item i of monList is theMonth then exit repeat
end repeat
return i
end monthNumStr
------------------------------
to sec2hms(sec)
set ret to {h:0, m:0, s:0}
set h of ret to sec div hours
set m of ret to (sec - (h of ret) * hours) div minutes
set s of ret to sec mod minutes
return ret
end sec2hms
------------------------------
to zero1(n)
if n < 10 then
return "0" & n
else
return n as text
end if
end zero1


「Install_Adobe_Output_Module_CC2015.scpt.zip」をダウンロード

|

WhiteWindowWorkaround.pluginをインストール

WhiteWindowWorkaround.pluginをインストールします。
https://helpx.adobe.com/jp/photoshop/kb/cq03060049.html

仕事用に作ってあったのを
可読性に配慮して作り直し公開

(*
AWWWWhite Window Workaround.plugin)インストーラー
WhiteWindowWorkaround.pluginをインストールします

20160704 初回作成

詳しくは
Wacom 社製タブレット使用時にメニューや投げ縄ツールなど一部の機能が使用できない(Mac OS Photoshop
https://helpx.adobe.com/jp/photoshop/kb/cq03060049.html

*)

----ログを表示
tell application "AppleScript Editor"
activate
try
tell application "System Events" to keystroke "3" using {command down}
end try
try
tell application "System Events" to keystroke "l" using {option down, command down}
end try
end tell

---日付けと時間からテンポラリー用のフォルダ名を作成
set theNowTime to (my doDateAndTIme(current date)) as text
---テンポラリー用フォルダのパスを定義
set theTrashDir to ("/tmp/" & theNowTime) as text
-----テンポラリーフォルダを作成
try
set theCommand to ("mkdir -pv " & theTrashDir) as text
do shell script theCommand
set theTmpPath to theTrashDir as text
delay 1
on error
return "テンポラリフォルダ作成でエラーが発生しました"
end try

-----ファイルをダウンロード
try
set theCommand to ("curl -L -o '" & theTmpPath & "/WhiteWindowWorkaround.plugin1_0_6.zip' 'https://helpx.adobe.com/content/help/jp/photoshop/kb/cq03060049/_jcr_content/main-pars/procedure/proc_par/step_0/step_par/download/file.res/WhiteWindowWorkaround.plugin1_0_6.zip'") as text
do shell script theCommand
delay 1
on error
return "ダウンロードでエラーが発生しました"
end try
-----ファイルを解凍
try
set theCommand to ("unzip '" & theTmpPath & "/WhiteWindowWorkaround.plugin1_0_6.zip' -d '" & theTmpPath & "'") as text
do shell script theCommand
delay 1
on error
return "ファイルの解凍でエラーが発生しました"
end try

tell application "Finder"
---アプリケーションフォルダのエリアスをテキストで取得
set theApplicationDir to (path to applications folder from local domain) as text
---解凍後のプラグインのエリアスをテキストで取得
set thePluginFile to ("/private" & theTrashDir & "/WhiteWindowWorkaround.plugin") as text
end tell
---解凍後のプラグインをエイリアスで取得
set aliasPluginFile to (POSIX file thePluginFile) as alias
---CS6
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CS6:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CS6は未インストール又はプラグインインストール済み"
end try
---CC
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CC:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CCは未インストール又はプラグインインストール済み"
end try
---CC2014
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CC 2014:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CC 2014は未インストール又はプラグインインストール済み"
end try
---CC2015
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CC 2015:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CC 2015は未インストール又はプラグインインストール済み"
end try
---CC2015
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CC 2015:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CC 2015は未インストール又はプラグインインストール済み"
end try
---CC2015.3
try
tell application "Finder"
set aliasPsdDir to ""
set aliasPsdDir to (theApplicationDir & "Adobe Photoshop CC 2015.5:Plug-ins") as alias
duplicate aliasPluginFile to folder aliasPsdDir
end tell
on error
log "CC 2015.5は未インストール又はプラグインインストール済み"
end try
---終了メッセージ
return "AWWWのインストールを終了しましたPhotoshopを再起動(終了〜開始)してください"


--------------------------------------------------#ここからサブルーチン
to doDateAndTIme(theDate)
set y to (year of theDate)
set m to my monthNumStr(month of theDate)
set d to day of theDate
set hms to time of theDate
set hh to h of sec2hms(hms)
set mm to m of sec2hms(hms)
set ss to s of sec2hms(hms)
return (y as text) & my zero1(m) & my zero1(d) & "_" & zero1(hh) & zero1(mm) & zero1(ss)
return (y as text) & my zero1(m) & my zero1(d)
end doDateAndTIme

------------------------------
to monthNumStr(theMonth)
set monList to {January, February, March, April, May, June, July, August, September, October, November, December}
repeat with i from 1 to 12
if item i of monList is theMonth then exit repeat
end repeat
return i
end monthNumStr
------------------------------
to sec2hms(sec)
set ret to {h:0, m:0, s:0}
set h of ret to sec div hours
set m of ret to (sec - (h of ret) * hours) div minutes
set s of ret to sec mod minutes
return ret
end sec2hms
------------------------------
to zero1(n)
if n < 10 then
return "0" & n
else
return n as text
end if
end zero1


「Install_WhiteWindowWorkaround.plugin.scpt.zip」をダウンロード

ソース
https://github.com/force4u/Install_WhiteWindowWorkaround.plugin.scpt

|

[AppleScript]AppleScriptでテキストに行番号を発生させる(その2)

ゼロサプレスの処理を変更した
桁数を文字列として文字数を数える事で取得し
処理する桁数での制限を無くした


(*
add_line_no.scpt
20160303 初回作成 
20160305 ゼロサプレス処理変更
テキストデータに行番号を付加してその後にタブを挿入し
タブ区切りテキスト形式に変換した出力を
テキストエディタに表示します。
JeditXでテキストに行番号を発生させる
http://mottainaidtp.seesaa.net/article/434495744.html
アップルスクリプト版
*)


----設定項目
(*
1ならゼロサプレス有り
ソレ以外ならゼロサプレス無し
*)
property preZeroSup : 1


------------------------------------ ダブルクリックの始まり
on run
------------プロンプトの文言改行が使えます\nを入れます
set theWithPrompt to "テキストデーターにラインNO(行番号+タブ)を挿入します"
------------ファイル選択ダイアログのデフォルトのディレクトリ
tell application "Finder"
---set theDefaultLocation to (path to desktop from user domain) as alias
set theDefaultLocation to (container of (path to me)) as alias
end tell
------------Uniform Type Identifier指定
set theFileTypeList to "public.plain-text,com.apple.traditional-mac-plain-text" as text
------------のファイルタイプをリスト形式に整形する
set AppleScript's text item delimiters to {","}
set theFileTypeList to every text item of theFileTypeList
------------ダイアログを出して選択されたファイルは「open」に渡す
open (choose file default location theDefaultLocation ¬
with prompt theWithPrompt ¬
of type theFileTypeList ¬
invisibles true ¬
without multiple selections allowed and showing package contents)
end run


on open DropObj
---ファイルのエイリアスを取得
set theFileAlias to DropObj as alias
------選択したファイルのUNIXパスを取得
set theUnixPass to POSIX path of theFileAlias as text
-----ファイルを読み込む
set theData to (do shell script "cat '" & theUnixPass & "'") as «class utf8»
---リスト用の区切り文字
set AppleScript's text item delimiters to {"\r"}
---読み込んだデータをリスト形式で格納
set retListVal to (every text item of theData) as list
---行毎データ初期化
set theDataListLine to "" as text
---アウトプットデータ初期化
set theOutPut to "" as text
-----読み込んだテキストの行数を数える
set numListLine to count of retListVal
-----行数カウンタ初期化
set numLine to 1 as number
----繰り返しの始まり
repeat numListLine times
---1つ読み込む
set theDataListLine to (item numLine of retListVal) as text
---ゼロサプレスの有無
if preZeroSup is 1 then
----ゼロサプレスあり
set theZeroSupLineNo to doZeroSuppress(numLine, numListLine)
else
----ゼロサプレス無し
set theZeroSupLineNo to numLine as text
end if
---出力テキスト整形
set theOutPut to theOutPut & theZeroSupLineNo & "\t" & theDataListLine & "\r"
---カウントアップ
set numLine to (numLine + 1) as number
---リピートのおわり
end repeat
---結果をテキストエディタで開く
tell application "TextEdit" to launch
tell application "TextEdit"
make new document with properties {text:theOutPut}
end tell
tell application "TextEdit" to activate
end open




----ゼロサプレスのサブルーチン
#nに処理する値
#totalnoに最大数
#ゼロサプレス処理をします
to doZeroSuppress(n, totalno)
---戻り値の初期化
set theSupZero to "" as text
---最大数の桁数を数える
set theCntTotal to (count of (totalno as text)) as number
---処理する値の桁数を数える
set theCntN to (count of (n as text)) as number
---差分を求める
set numZeoCnt to ((theCntTotal) - (theCntN)) as number
---桁数の差だけ処理する
repeat numZeoCnt times
---戻り値にゼロを追加
set theSupZero to (theSupZero & "0") as text
end repeat
---戻り値を返す
return (theSupZero & n) as text
end doZeroSuppress

「minimum20160305.zip」をダウンロード

|

[AppleScript]AppleScriptでテキストに行番号を発生させる

JeditXでテキストに行番号を発生させる
http://mottainaidtp.seesaa.net/article/434495744.html

反応

ただやってもナニなので
行番号にゼロサプレス処理を付加出来るようにした


(*
add_line_no.scpt
テキストデータに行番号を付加してその後にタブを挿入し
タブ区切りテキスト形式に変換した出力を
テキストエディタに表示します。
JeditXでテキストに行番号を発生させる
http://mottainaidtp.seesaa.net/article/434495744.html
アップルスクリプト版
*)


----設定項目
(*
1ならゼロサプレス有り
ソレ以外ならゼロサプレス無し
*)
property preZeroSup : 2


------------------------------------ ダブルクリックの始まり
on run
------------プロンプトの文言改行が使えます\nを入れます
set theWithPrompt to "テキストデーターにラインNO(行番号+タブ)を挿入します"
------------ファイル選択ダイアログのデフォルトのディレクトリ
tell application "Finder"
---set theDefaultLocation to (path to desktop from user domain) as alias
set theDefaultLocation to (container of (path to me)) as alias
end tell
------------Uniform Type Identifier指定
set theFileTypeList to "public.plain-text,com.apple.traditional-mac-plain-text" as text
------------のファイルタイプをリスト形式に整形する
set AppleScript's text item delimiters to {","}
set theFileTypeList to every text item of theFileTypeList
------------ダイアログを出して選択されたファイルは「open」に渡す
open (choose file default location theDefaultLocation ¬
with prompt theWithPrompt ¬
of type theFileTypeList ¬
invisibles true ¬
without multiple selections allowed and showing package contents)
end run


on open DropObj
---ファイルのエイリアスを取得
set theFileAlias to DropObj as alias
------選択したファイルのUNIXパスを取得
set theUnixPass to POSIX path of theFileAlias as text
-----ファイルを読み込む
set theData to (do shell script "cat '" & theUnixPass & "'") as «class utf8»
---リスト用の区切り文字
set AppleScript's text item delimiters to {"\r"}
---読み込んだデータをリスト形式で格納
set retListVal to (every text item of theData) as list
---行毎データ初期化
set theDataListLine to "" as text
---アウトプットデータ初期化
set theOutPut to "" as text
-----読み込んだテキストの行数を数える
set numListLine to count of retListVal
-----行数カウンタ初期化
set numLine to 1 as number
----繰り返しの始まり
repeat numListLine times
---1つ読み込む
set theDataListLine to (item numLine of retListVal) as text
---ゼロサプレスの有無
if preZeroSup is 1 then
----ゼロサプレスあり
set theZeroSupLineNo to doZeroSuppress(numLine, numListLine)
else
----ゼロサプレス無し
set theZeroSupLineNo to numLine as text
end if
---出力テキスト整形
set theOutPut to theOutPut & theZeroSupLineNo & "\t" & theDataListLine & "\r"
---カウントアップ
set numLine to (numLine + 1) as number
---リピートのおわり
end repeat
---結果をテキストエディタで開く
tell application "TextEdit" to launch
tell application "TextEdit"
make new document with properties {text:theOutPut}
end tell
tell application "TextEdit" to activate
end open




----ゼロサプレスのサブルーチン
to doZeroSuppress(n, totalno)
if totalno < 10 then
return n as text
else if totalno < 100 then
if n < 10 then
return "0" & n
else
return n as text
end if
else if totalno < 1000 then
if n < 10 then
return "00" & n
else if n < 100 then
return "0" & n
else
return n as text
end if
else if totalno < 10000 then
if n < 10 then
return "000" & n
else if n < 100 then
return "00" & n
else if n < 1000 then
return "0" & n
else
return n as text
end if
end if
end doZeroSuppress


「minimum20160303.zip」をダウンロード

ソースはこちらに保存
https://github.com/force4u/add_line_no.scpt

|

[CSS]フォントの各名称とCSS【その2】

その1は
http://force4u.cocolog-nifty.com/skywalker/2016/02/csscss-838a.html


繰り返しになりますが
CSSのフォント指定はあくまでも『ファミリ名』ですが
フォントを指定する場合に有効なのが

PostScript名
フル・フォント名
ファミリー名+ウェイト名
フォント・ファミリー名 を指定出来ると、各ブラウザで表示出来るわけです。

ポイントは
ローカライズ名ではなく英語で指定するのがセオリー

英語でフォントの各種名称を取得する場合
有効なのが
表示言語の一時変更での
フォントブックでの取得が簡単でしょう


Website_image00280211_165241


サンプルはヒラギノですので
スタイル部分がW3になっていますが
ウェイトを取得出来る事もあります。

それ以外の方法だと
mdls
スポットライトコマンドで取得出来ます。

/usr/bin/mdls -name com_apple_ats_names
/usr/bin/mdls -name com_apple_ats_name_full
/usr/bin/mdls -name com_apple_ats_name_fond
/usr/bin/mdls -name com_apple_ats_name_family
/usr/bin/mdls -name com_apple_ats_name_postscript
/usr/bin/mdls -name com_apple_ats_name_style

スクリプトにするとこんな感じ

Website_image00280211_172417_2

(*
com_apple_ats_name_family.scpt

Uniform Type Identifiers Reference
public.truetype-collection-fontを指定していますが
異なるファミリーが同封されている場合は
全てのファミリは取得出来ません。
フォントブックを英語モードに切り替えて利用する事をお勧めします

*)
-----ファインダー呼び出し
tell application "Finder"
activate
---ファイルを選択 TTF TTC OTF PS1のみ選べます Font Suitcase等は選べません
set objResult to ¬
choose file default location (path to fonts folder from user domain) ¬
of type ¬
{"public.truetype-ttf-font", "public.truetype-collection-font", "public.opentype-font", "com.apple.truetype-datafork-suitcase-font", "com.adobe.postscript-lwfn​-font"} invisibles true ¬
with multiple selections allowed without showing package contents

end tell


set theLogFile to "" as text


----繰り返しのはじまり
repeat with objFiles in objResult
----ファインダー処理
tell application "Finder"
----取得したファイルのエリアスを取得
set theFileIAlias to objFiles as alias
----ファイル名を取得
set theFontName to (name of (info for objFiles) as list) as text
----フォントがあるディレクトリを取得
set theFileDir to (container of objFiles) as text
----UNIXパスにしておきます
set theUnixFilePath to (POSIX path of theFileIAlias) as text
end tell
-----mdlsのコマンドを実行して格納
set theMdlsResult to do shell script "/usr/bin/mdls -name com_apple_ats_name_postscript \"" & theUnixFilePath & "\""

-----区切り文字を改行に設定
set AppleScript's text item delimiters to {"\r"}
-----改行毎のリストとして格納
set theResultList to (every text item of theMdlsResult) as list
-----区切り文字を戻す
set AppleScript's text item delimiters to {""}
-----何行あるか?(データ件数)を数える
set numListLine to (count of theResultList) as number

set theLineData to (item 2 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, ",", "") as text
set theResultTextPostscript to my doReplace(theResultText, " ", "") as text


set theMdlsResult to "" as text
-----mdlsのコマンドを実行して格納
set theMdlsResult to do shell script "/usr/bin/mdls -name com_apple_ats_name_family \"" & theUnixFilePath & "\""
-----区切り文字を改行に設定
set AppleScript's text item delimiters to {"\r"}
-----改行毎のリストとして格納
set theResultList to (every text item of theMdlsResult) as list
-----区切り文字を戻す
set AppleScript's text item delimiters to {""}
-----何行あるか?(データ件数)を数える
set numListLine to (count of theResultList) as number

set theLineData to (item 2 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, ",", "") as text
set theResultTextFamily to my doReplace(theResultText, " ", "") as text

set theMdlsResult to "" as text

-----mdlsのコマンドを実行して格納
set theMdlsResult to do shell script "/usr/bin/mdls -name com_apple_ats_name_full \"" & theUnixFilePath & "\""
-----区切り文字を改行に設定
set AppleScript's text item delimiters to {"\r"}
-----改行毎のリストとして格納
set theResultList to (every text item of theMdlsResult) as list
-----区切り文字を戻す
set AppleScript's text item delimiters to {""}
-----何行あるか?(データ件数)を数える
set numListLine to (count of theResultList) as number

set theLineData to (item 2 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, ",", "") as text
set theResultTextFull to my doReplace(theResultText, " ", "") as text


-----mdlsのコマンドを実行して格納
set theMdlsResult to do shell script "/usr/bin/mdls -name com_apple_ats_name_style \"" & theUnixFilePath & "\""
-----区切り文字を改行に設定
set AppleScript's text item delimiters to {"\r"}
-----改行毎のリストとして格納
set theResultList to (every text item of theMdlsResult) as list
-----区切り文字を戻す
set AppleScript's text item delimiters to {""}
-----何行あるか?(データ件数)を数える
set numListLine to (count of theResultList) as number

set theLineData to (item 2 of theResultList) as text
set theResultText to my doReplace(theLineData, "\t", "") as text
set theResultText to my doReplace(theResultText, "\"", "") as text
set theResultText to my doReplace(theResultText, ",", "") as text
set theResultTextStyle to my doReplace(theResultText, " ", "") as text



set theLogFile to theLogFile & "\r\rcom_apple_ats_name_postscript\r" & theResultTextPostscript & "\r\rcom_apple_ats_name_family\r" & theResultTextFamily & "\r\rcom_apple_ats_name_full\r" & theResultTextFull & "\r\rcom_apple_ats_name_style\r" & theResultTextStyle & "\r\r" as text

log theLogFile

end repeat



return theLogFile













---------文字の置き換えサブルーチン
to doReplace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end doReplace


「apple_ats_name_family.scpt.zip」をダウンロード

その3に続く
http://force4u.cocolog-nifty.com/skywalker/2016/02/csscss3fontbook.html

|

より以前の記事一覧

その他のカテゴリー

Accessibility | AccessibilityCheck | AccessibilityForm | AccessibilityInDesign | AccessibilityPDF | Acrobat | Acrobat Action | Acrobat Annotation | Acrobat AppleScript | Acrobat Layer | Acrobat Plug-ins | Acrobat Portfolios | Acrobat Print | AcrobatBarcode | AcrobatDialog | AcrobatForm | AcrobatJS | AcrobatMenu | AcrobatPDF | AcrobatStamp | AcrobatYouTube | AddressBook | Adobe | Adobe InDesign | AdobeAppleScript | AdobeBridge | AdobeIllustrator | AdobeJSX | aed | Alfresco | Android | AnimationGif | Apple | AppleScript | AppleScriptBasics | AppleScriptCharacter | AppleScriptColor | AppleScriptDroplet | AppleScriptErrorNum | AppleScriptFolder | AppleScriptFontBook | AppleScriptRename | AppleScriptTools | AppleSymbols | Applications | Barcode | Barcode2D | BarcodePostal | BetterHTMLExport | Book | Browser | buzz | Certificates | CharacterEntity | CharacterSets | Colors | Cool Site | CSS | Cutting | DecoMail | DecorationMail | Design | Desktop | Diff | DJ | dmg | DNS | Documents | Download | eBook | Editer | eMail | Envelopes | ExifTool | Facebook | FFmpeg | File System | Fonts | FontsTool | FontsWeb | FOOD | FormPrint | ftp | Gadget | Gif Animation | Google | HexEditor | HTML | info | iPhoto | ISBN | ISO | iTunes | iWork | iWorkNumbers | iWorkNumbersCalendar | iWorkNumbersTimecard | iWorkPages | JavaScript | JeditX | JeditX Regexp | JeditXAppleScript | JIS | jquery | Letterpress | Library | logo | Mac Admin | Mac Archiver | Mac Browser | Mac Browser Plugin | Mac QuickLook | Mac Spotlight | Mac Video | Map | Mobby | Moto | Movies | Music | Network Basic | ntp | OCR | Office | OSX | Pantone | Paper | PDFlib | Permission | Photo | Pictograms | Print | Public | QuickLook | QuickTime | QuickTimeSetting | QuickTimeSound | Real Media | ReName | ResourceFork | ruby | Screen | ScreenCast | Search | Security | SEO | Sharing | SLAResource | Spotlight | Stamp | SWF | Tutorial PSD | TV | Twitter | Typography | Unicode | Utilities | Video | WebFont | Wedding | Windows | WindowsMedia | XML | XMP | XPS | YouTube | YouTube Rss