今年もよろしくお願いします。 applescriptでillustratorの行間を変更しようと試みていますが 以下たけうちさんのを参考にと思いillustratorライブラリをみていますがなかなか難しいですね。 ちなみにscriptは tell application "Adobe Illustrator" tell document 1 tell text frame 1 tell paragraph 1 set justification to full justify last line left
--right以外にも下記の種類がある --center/full justify/full justify last line center/ --full justify last line left/full justify last line right --/left/right end tell end tell end tell end tell
これって行間の解説をみてみるとleadingというのに当てはまるようですがleadingに leading (real) : the amount of space between two lines of text (in points) とあります (行間をつめたいけどできない)でやりたいのだがどなたかご教授ください。
>>15 tell application "Adobe Illustrator" tell document 1 tell text frame 1 tell paragraph 1 set auto leading to false set leading to 10 --単位はpt end tell end tell end tell end tell
とかになるよ。 数値適用する前に改行の自動をオフにしないとダメ。 paragraphを対象にしていると最終行が改行で終わっているとleadingに数値適用するとエラーとなるので text frame全体に適用するにはevery paragraph(paragraphs)ではなくevery line(lines)で
tell text frame 1 set auto leading of lines to false set leading of lines to 10 end tell
>>17 >>16の最後の部分は tell text frame 1 tell lines set auto leading to false set leading to 10 end tell end tell これと同じ。 ちょっと値代入するだけなのにtellでくくるのはめんどくさいので set auto leading of lines to false set leading of lines to 10 とした。 set leading of lines to 10 は優先される部分をあえてカッコでくくると set (leading of lines) to 10 カッコ内の△△ of □□ってのは「□□の△△」って意味なので lines(全ての行)のleading(行間)を10にするってこと。 実は↓これでもOK set lines's leading to 10
auto leading は最初スクリプト組んで実行してみたら行間変わらなかったので、 Illustratorの書類見たら改行が自動のままだった。 それから解説のlinesとかparagraphの項目みたら PROPERTIESにauto leadingって項目があったからfalseにしてみたらうまくいったよ。
どころで全体の文章で行間を変えるには別な記述でしょうか? 現況の >set auto leading of lines to false >set leading of lines to 10 では 行間変更では改行がある前は行間ポイントが変更できますが それ以降の行間は変更がなされないのは他に書き方があるのでしょうか? >every line(lines) と変更しても改行後の文には行間は及ぼしません。
どころで全体の文章で行間を変えるには別な記述でしょうか? 現況の >set auto leading of lines to false >set leading of lines to 10 では 行間変更では改行がある前は行間ポイントが変更できますが それ以降の行間は変更がなされないのは他に書き方があるのでしょうか? >every line(lines) と変更しても改行後の文には行間は及ぼしません。
最初の行に property i : 24 とりあえずトップに挿入する。行間24ptで固定 .... .... ....display dialog "オーバーフロー:" のところに下記スクリプトを挿入した .... tell application "Adobe Illustrator" tell document 1 tell every text frame tell every line set auto leading of lines to false repeat with i from 20 to i set leading of lines to i end repeat end tell end tell end tell
repeat with i from 20 to i 普通こんな記述はしない。 行間の初期値は該当するtext frameから読み取った方が良いし 目的のtext frameがtext frame 1で全行同じ行間であれば tell document 1の後に set defLeading to leading of character 1 of text frame 1 1文字目の行間を取得で十分 オーバーフローしてるテキストボックスをの行間を詰めるにしても 行間を少しずつ(例えば0.1ptずつとか)「減らす」記述にしないとダメ。 repeat with i from defLeading to 0 by -0.1 減らす毎に文字がオーバーフローしていないかチェックして 文字が収まったらexit repeatっていう処理が必要 tell every text frame の辺りも全部のテキストフレームに一括で同じ処理する場合のみ使う。
というかあなたにそのスクリプトはちょっと難しすぎる。このまま進むのは危ない。 ハンドラ(サブルーチン・関数)の使い方も分からないでしょ? on overflow(tFrame) … end overflow の部分
tell application "Adobe Illustrator" tell document 1 -- ← every document にすると全体のテキストにスクリプトが動くのであえてDocument1にしています --set defLeading to leading of character 1 of text frame 1 set defLeading to "20" -- ←本文の行間を固定しています。ここは書類に応じて変更したりします。 repeat with tFrame in every text frame if kind of tFrame is {area text} then if my overflow(tFrame) then --display dialog "オーバーフロー:" & contents of tFrame ←ここでオーバーフローしたテキストが抽出されますのでこれを利用しました。 tell every text frame tell every line repeat with i from defLeading to 0 by -1 ←ここで行間を縮めています set auto leading of lines to false set leading of lines to defLeading end repeat end tell end tell end if end if end repeat end tell end tell
ハンドラはたけうちとおるさんのを参照しています on overflow(tFrame) set OriginalDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to "" tell application "Adobe Illustrator" set myLastP to (contents of every paragraph of tFrame) as string set myLastL to (contents of every line of tFrame) as string set AppleScript's text item delimiters to OriginalDelimiters if myLastP is not myLastL then set AppleScript's text item delimiters to OriginalDelimiters return true else set AppleScript's text item delimiters to OriginalDelimiters return false end if end tell end overflow
set theText to "あいうえお" set startCount to 1 set endCount to 2 my textMask(theText, startCount, endCount)
set aaa to "かきくけこ" set bbb to 2 set ccc to 4 my textMask(aaa, bbb, ccc)
my textMask("さしすせそたちつてと", 5, -1)
on textMask(theText, startCount, endCount) set resultText to text startCount thru endCount of theText set startCountText to my minusCheck(startCount) set endCountText to my minusCheck(endCount) display dialog "テキスト「" & theText & "」の" & startCountText & "文字目〜" & endCountText & "文字目までは「" & resultText & "」です" end textMask
on minusCheck(theCount) if theCount < 0 then return "最後から" & (-theCount as Unicode text) else return theCount as Unicode text end if end minusCheck
>>34 >set defLeading to "20" set defLeading to 20 にしないと数値として扱えないんじゃないかな?
>repeat with i from defLeading to 0 by -1 ←ここで行間を縮めています >set auto leading of lines to false >set leading of lines to defLeading >end repeat これだと行間0になるまで止まらない気がするよ。(実際は0になったとこでIllustrator側でエラー返すと思うけど)
repeat with i from defLeading to 0 by -1 ←ここで行間を縮めています set auto leading of lines to false set leading of lines to defLeading if not my overflow(tFrame) then exit repeat end if end repeat
------返された値 計算が続いて...... set auto leading of every line of every line of every text frame of document 1 to false set leading of every line of every line of every text frame of document 1 to "22" get kind of item 7 of every text frame of document 1 --> {point text} 計算が続いて...... get kind of item 18 of every text frame of document 1 --> {point text} end tell
>repeat with i from defLeading to 0 by -1 ←ここで行間を縮めています >set auto leading of lines to false >set leading of lines to defLeading >if not my overflow(tFrame) then >exit repeat >end if >end repeat
これだと以下の部分がなくなりました ーーーーーーー返された値 set auto leading of every line of every line of every text frame of document 1 to false set leading of every line of every line of every text frame of document 1 to "22" get kind of item 7 of every text frame of document 1 --> {point text}
------------------返された値 この部分が残りました get kind of item 18 of every text frame of document 1 --> {point text} end tell
あと set auto leading of lines to false は1回実行すれば大丈夫なのでrepeatの外でOKだったのと さらに一つ見逃してた。 repeatでiを変動させて行間変えないと行けないのにdefLeading設定しちゃってる。 >set leading of lines to defLeading は set leading of lines to i で
set auto leading of lines to false repeat with i from defLeading to 0 by -1 ←ここで行間を縮めています set leading of lines to i if not my overflow(tFrame) then exit repeat end if end repeat
あー何度もごめん。 set leading of lines to i だとエリアに収まってる部分しか行間変えてくれないから paragraph指定するしかないのか。 set auto leading to falseとか 最後が改行で終わってるとエラーになるからIllustratorの書類側で気を使わないといけないかも。 最初から自動行間になっていない事前提なのと最後が改行で終わっていないというのが条件
tell tFrame tell every paragraph repeat with i from defLeading to 0 by -1 set leading to i if not my overflow(tFrame) then exit repeat end if end repeat end tell end tell
行間を自動にてつめるスクリプトですが改良の余地がまだたくさんあるようです。 個人的にはこのスクリプトで自分が自分が目指していたのができとても喜んでいます。 下記に教えてくださった皆様のscriptを元に利用しているapplescriptです。 tell application "Adobe Illustrator" tell document 1 -- ← every document にすると全体のテキストにかかるようであえてDocument1にします --set defLeading to leading of character 1 of text frame 1 set defLeading to "24" -- ←本文の行間を固定しています repeat with tFrame in every text frame if kind of tFrame is {area text} then if my overflow(tFrame) then --display dialog "オーバーフロー:" & contents of tFrame tell text frame 6 tell every line repeat with i from defLeading to 0 by -1 set auto leading of lines to false set leading of lines to i if not my overflow(tFrame) then exit repeat end if end repeat end tell end tell end if end if end repeat end tell end tell
たけうちとおるさんのハンドラをそのまま利用しています。 on overflow(tFrame) set OriginalDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to "" tell application "Adobe Illustrator" set myLastP to (contents of every paragraph of tFrame) as string set myLastL to (contents of every line of tFrame) as string set AppleScript's text item delimiters to OriginalDelimiters if myLastP is not myLastL then set AppleScript's text item delimiters to OriginalDelimiters return true else set AppleScript's text item delimiters to OriginalDelimiters return false end if end tell end overflow
tell application "Adobe Illustrator" tell document 1 tell text frame 1 set properties of every paragraph of text frame 1 in document 1 to {text font:"Osaka"} end tell end tell end tell
>58 これでいいの? set setStr to "サンプルテキスト" set X to 10 set Y to 10 set setStr to setStr as string set X to X as real set Y to Y as real set pt to 2.83 set X to X * pt set Y to Y * pt tell application "Adobe Illustrator" set placedRef to make new text frame in document 1 with properties {contents:setStr, position:{X, Y}} set properties of every paragraph of text frame 1 in document 1 to {size:8.5, fill color:{class:CMYK color info, black:100, cyan:0, magenta:0, yellow:0}, text font:"ShinGo-Bold-83pv-RKSJ-H"} end tell
>58 それともこれかな? tell application "Adobe Illustrator" set docRef to make new document with properties {color space:CMYK} set romanText to "日本語書体変換" set newText to romanText set textRef to make new text frame in docRef with properties {position:{100, 200}, contents:newText} set charStyle to make new character style in docRef with properties {name:"ヒラギノ明朝 Pro-W3"} set kerning method of charStyle to metricsromanonly set properties of every paragraph of text frame 1 in document 1 to {size:48} set cmykColor to {cyan:50, magenta:20, yellow:10, black:5} set fill color of charStyle to cmykColor apply character style charStyle to text of textRef end tell
tell application "Adobe Illustrator" set docRef to make new document with properties {color space:CMYK} set romanText to "日本語書体変換" set newText to romanText set textRef to make new text frame in docRef with properties {position:{100, 200}, contents:newText} set charStyle to make new character style in docRef with properties {name:"ヒラギノ明朝 Pro-W3"} set kerning method of charStyle to metricsromanonly set properties of every paragraph of text frame 1 in document 1 to {size:48} set cmykColor to {cyan:50, magenta:20, yellow:10, black:5} set fill color of charStyle to cmykColor apply character style charStyle to text of textRef end tell
書体変換ができないのだが set charStyle to make new character style in docRef with properties {name:"ヒラギノ明朝 Pro-W3"} これってどうだろうか
>全くAppleScriptと関係無いのにうんざりだぜなのにいw じゃあさ。 書体変換ができないのだが set charStyle to make new character style in docRef with properties {name:"ヒラギノ明朝 Pro-W3"} これってどうだろうかね知っている? 変換ができないんだよ。 Marvericksでさ、Illustrator CC 使ってんだ。 だが書体変更がきかんのだよそちらならすぐ解けるんでしょ。ちょっと難しいかな?
>81 知らないお前に教えてあげるよw ヒントはここにw tell application "Adobe Illustrator" tell document 1 tell text frame 1 tell character 2 get properties end tell end tell end tell end tell
ちなみにテキスト全体への書体変更は下記のようです。書体ポイント変更はsizeで変更。 Marvericksでも動きます。 tell application "Adobe Illustrator" set atype to every text frame of document 1 set myatype to count of every text frame of document 1 repeat with i in atype set the text font of text of i to text font "ShinseiKaiPro-CBSK1" end repeat repeat with n from 1 to myatype tell document 1 tell text frame n tell text range tell every line set size to 40 end tell end tell end tell end tell end repeat end tell
まとめしたのは。 tell application "Adobe Illustrator" set atype to every text frame of document 1 set myatype to count of every text frame of document 1 repeat with i in atype set the text font of text of i to text font "ShinseiKaiPro-CBSK1" end repeat repeat with n from 1 to myatype tell every line of text range of text frame n of document 1 set size to 40 end tell end repeat end tell
わかったようだから、あの2行はねえ、 -- get text font of text of text frame 1 of document 1 set text font of text of text frame 1 of document 1 to text font gFontName だよ。Adobe Illustrator も スクリプトファイルも消したので、ちょっとは間違っているかもしれないけど
on open dorp_Items tell application "Finder" set aISO to selection as alias end tell set b to do shell script "hdiutil mount " & (quoted form of POSIX path of aISO) tell application "Finder" set tmp to AppleScript's text item delimiters set AppleScript's text item delimiters to tab set fileName to last text item of (b as string) set fileName to (POSIX file fileName) as alias end tell tell application "VLC" activate open fileName end tell end open
サーバー側 property cmdlist : {"curl 'http://ip.ossus.ch'", "ifconfig", "sw_vers"} on cmd(Q) set out to do shell script item Q of cmdlist return out end cmd
tell application "Finder" set thePATH to selection as alias set thePATH to POSIX path of thePATH endt tell set theAnswer to do shell script "ls -a " & quoted form of POSIX path of thePATH displaydialog theAnswer as Unicode text
set Q to choose file --ファイルの場所を取得(Macintosh HD:Users:xxx:Desktop:11.jpg) set Q to POSIX path of Q --POSIX path に変換(/Users/xxx/Desktop/11.jpg) set cmd to "GetFileInfo " & quoted form of Q --コマンドを作成(ここでdo shell scriptでも良いけど、こっちの方がデバッグしやすい) set info to do shell script cmd --コマンドを実行 display dialog "Result" default answer info --結果をダイアログに表示 (*結果はこんな感じ file: "/Users/xxx/Desktop/11.jpg" type: "\0\0\0\0" creator: "\0\0\0\0" attributes: avbstclinmedz created: 02/08/2014 16:20:16 modified: 02/08/2014 16:21:43 *)
on open dropItems --ドラッグ&ドロップされた時の処理とエイリアスリスト repeat with Q in dropItems --入力ファイル数分リピート処理してJPEG イメージのみ変換 tell application "Finder" set itemkind to get kind of Q end tell if itemkind is "JPEG イメージ" then set DropPOSIX to POSIX path of Q set pngOutPath to DropPOSIX & "幅30.jpg" set comd to "sips --resampleWidth 30 " & quoted form of DropPOSIX & " --out " & quoted form of pngOutPath --コマンド作成 do shell script comd --コマンド実行 else --jpegイメージ以外はパス end if end repeat end open --作って思ったけどドラッグ&ドロップはデバッグしづらくて作るの面倒いね
>>154 素朴な疑問ですみませんが、なんで変数にQなんてとるの? 見たことないんだけど意味あるの? やっぱりrepeat with とくれが i t s くらいで、そのあと小文字でp q r あたり使うのが普通だと思うんだけど。 大文字でQってなんかすごく自己主張が激しいというかw それに普通の変数に1文字変数とかあとで面倒でしょ。
画像を大量に人に渡すときにターミナルで cd でフォルダに移動して sips -s format jpeg *.tif sips -Z 2000 *.tif for nm in *.tif; do mv $nm ${nm%.tif}.jpg; done アプリを使うよりも全然早いのでよく使います。 教えてもらった奴で似たことができそうですね。 いろいろいじくって試してみます。 ありがとうございました。
副産物置いとくね エイリアスリストをつくるハンドラ2つ set aliaslist1 to AliasListGen("/Users/xxx/Desktop/test/") set aliaslist2 to choosefile("jpgとpngだけ", {"jpg", "png"}, true, false) --######################## on AliasListGen(Directory) --入力されたDirectory(POSIXパス)にあるすべてのファイルをaliasリストにするハンドラ set aliaslist to {} set filelist to list folder Directory repeat with Q in filelist set tmppath to Directory & Q set tmpalias to POSIX file tmppath as alias set end of aliaslist to tmpalias end repeat return aliaslist end AliasListGen --######################## on choosefile(prom, seltype, multSel, inv) --(ダイアログに表示される文字列,選択できるファイルタイプリスト,複数選択できるか(Bool),不可視ファイルの表示(Bool)) set deskpath to path to desktop --初期フォルダ設定 choose file with prompt prom of type seltype default location deskpath multiple selections allowed multSel invisibles inv end choosefile
>>159 画像変換スクリプト作ってみたよ!>>160のAliasListGenハンドラ使ってるから追加してください。 set Convfolderpath to POSIX path of (choose folder with prompt "choose folder") repeat display dialog Convfolderpath & " Please input width" default answer "2000" buttons {"Cancel", "TIFF", "JPEG"} default button 3 with title "Image Conversion" copy the result as list to {intext, selbutton} try if (intext as number) > 0 then exit repeat end try end repeat set OutPath to Convfolderpath set aliaslist1 to AliasListGen(Convfolderpath) if selbutton is "JPEG" then ConvProcess("JPEG", intext, ".jpg", aliaslist1, OutPath) else if selbutton is "TIFF" then ConvProcess("TIFF", intext, ".tif", aliaslist1, OutPath) end if on ConvProcess(format, inWidth, Extension, itemlist, outpathPOSIX) set tmpnum to 0 repeat with initem in itemlist --JPEG, PNG, TIFFのみ変換 (日本語環境のみ) tell application "Finder" to set itemkind to get kind of initem if itemkind is "JPEG イメージ" or itemkind is "PNG イメージ" or itemkind is "TIFF イメージ" then set tmpnum to tmpnum + 1 tell application "Finder" to set itemname to get name of initem set ConvitemPOSIX to POSIX path of initem set itemname to do shell script "echo " & quoted form of itemname & " |sed -e 's/.[^.]*$//g'" set outitemPOSIX to outpathPOSIX & "[" & tmpnum & "]" & itemname & Extension do shell script "sips -s format " & format & " --resampleWidth " & inWidth & " " & quoted form of ConvitemPOSIX & " --out " & quoted form of outitemPOSIX end if end repeat end ConvProcess
てかぶっちゃけリピート処理だとシェルスクリプトだけの方が処理は早いと思う フォルダのパスを取得して cdしてパイプでつないでsips -s format jpeg -Z 2000 *.tif でまとめて変換した方が速いんじゃないかな。
そえば tell application "Finder" to set itemkind to get kind of initem と set itemkind to kind of (info for initem) ってどっちが速いんだろ何回かmsecで時間計ってみたら、後者の方が速い気もしたんだけど、logの表示がうざったいからtellにしました。 あとget kindとかの英語以外での環境での英語表示とかどうやるんだっけ? これだと環境依存で気持ち悪いなー
>>154 "JPEG イメージ"は移植性が無い。 >tell application "Finder" >set itemkind to get kind of Q >end tell >if itemkind is "JPEG イメージ" then if (type identifier of (info for Q) = "public.jpeg") then
>>160 これだと拡張子無しや".jpeg"は拾えない。 >set aliaslist2 to choosefile("jpgとpngだけ", {"jpg", "png"}, true, false) set aliaslist2 to choosefile("jpgとpngだけ", {"public.jpeg", "public.png"}, true, false)
てことで>>163さんのアドバイスどおり >>161の tell application "Finder" to set itemkind to get kind of initem if itemkind is "JPEG イメージ" or itemkind is "PNG イメージ" or itemkind is "TIFF イメージ" then
を
try set itemkind to type identifier of (info for initem) on error set itemkind to "" end try if itemkind is "public.jpeg" or itemkind is "public.png" or itemkind is "public.tiff" then に変更します。
あと set OutPath to Convfolderpath で無駄に変数増やしちゃってるけど、文字数制限で処理を徐々に消していった名残なので適当に名前変えて消してくださいorz ありがとうございました!
property ca : current application on run set BK to ca's NSBackingStoreBuffered tell ca's NSWindow's alloc() initWithContentRect_styleMask_backing_defer_({{300, 300}, {200, 100}}, 3, BK, false)'s autorelease() setTitle_("NSSoundTest") set wind to it end tell tell current application's NSButton's alloc() tell initWithFrame_({{0, 0}, {90, 24}}) setTitle_(" Play ") setTarget_(me) setBezelStyle_(1) setAction_("Play:") set button to it setTranslatesAutoresizingMaskIntoConstraints_(false) end tell end tell set conview to wind's contentView conview's addSubview_(button) set xx to current application's NSLayoutAttributeCenterX set yy to current application's NSLayoutAttributeCenterY set xx_con to current application's NSLayoutConstraint's constraintWithItem_attribute_relatedBy_toItem_attribute_multiplier_constant_(conview, xx, ca's NSLayoutRelationEqual, button, xx, 1, 0)'s autorelease() set yy_con to current application's NSLayoutConstraint's constraintWithItem_attribute_relatedBy_toItem_attribute_multiplier_constant_(conview, yy, ca's NSLayoutRelationEqual, button, yy, 1, 0)'s autorelease() conview's addConstraint_(xx_con) conview's addConstraint_(yy_con) wind's makeKeyAndOrderFront_(me) end run on Play_(sender) ca's NSSound's soundNamed_("Submarine")'s play() end Play_
windowとかをわざわざ作らないでchoose from list使って簡略化しました、再生される音も選べるようにしました。 CFAbsoluteTimeGetCurrent使ってタイトルに時間表示してます ちなみにlionだと 選択したSEが再生され、音が鳴り終わるごとにコンソールにerrログが出力されます。 ログが出るかでないかだけでも教えてもらえれば幸いです
on run repeat set nowtime to (current application's CFAbsoluteTimeGetCurrent()) div 1 set SEList to {"Basso", "Blow", "Bottle", "Frog", "Funk", "Blow", "Glass", "Hero", "Morse", "Ping", "Pop", "Purr"} set selSE to choose from list SEList with prompt "再生するSEを選択" OK button name "Play" with title nowtime if selSE is false then quit me else my play(item 1 of selSE) end if end repeat end run on play(SEName) current application's NSSound's soundNamed_(SEName)'s play() end play
とりあえず動いた property vwList : {{v:"name", w:300}, {v:"dateAdded", w:200}, {v:"label", w:150}} -- vは{"name", "dateModified", "dateCreated", "dateLastOpened", "dateAdded", "size", "kind", "version", "comments", "label"}のどれか。下記(*1)を参照。 on getW(argV) repeat with itemX in vwList if v of itemX is argV then return w of itemX end if end repeat return 0 end getW tell application "Finder" set current view of front window to list view end tell tell application "System Events" tell application process "Finder" tell outline 1 of scroll area 2 of splitter group 1 of front window --(*1) vに取りうる値は下記文にて表示。 --value of attribute "AXIdentifier" of every column repeat with x from 1 to (count of column) tell column x set v to value of attribute "AXIdentifier" set newW to my getW(v) if newW is not 0 then set {w, h} to size set size to {newW, h} end if end tell end repeat end tell end tell end tell
OS X (10.9.2)のターミナルからosascriptで動かそうとしているんですが、 以下のパターン1と2では execution error: CotEditor got an error: Can’t get contents of selection of document 1. (-1728) というエラーがでてしまいます。 パターン3だと上手く動くのですが、 パターン1と2でエラーになってしまう理由はなんなのでしょうか? 最終的にはパターン1の形で動かそうとしています。
【パターン1:エラー】 #!/usr/bin/osascript set activeApp to path to frontmost application as text tell application activeApp set note_text to contents of selection of front document end tell return note_text
【パターン2:エラー】 #!/usr/bin/osascript set activeApp to "Macintosh HD:Applications:MustApp:CotEditor.app:" tell application activeApp set note_text to contents of selection of front document end tell return note_text
【パターン3:成功】 #!/usr/bin/osascript tell application "Macintosh HD:Applications:MustApp:CotEditor.app:" set note_text to contents of selection of front document end tell return note_text
frontmost applicationにはなら tell application "System Events" to set activeApp to name of application processes whose frontmost is true tell application activeApp でいいんじゃないの
>>183 × tell application "System Events" to set activeApp to name of application processes whose frontmost is true ○ tell application "System Events" to set activeApp to item 1 of (get name of application processes whose frontmost is true)
>>185 ちなみにTerminalでやれば tell application "System Events" to set activeApp to name of application processes whose frontmost is true は、Terminalだよ。前のdelay入れて、その間にCotEditorを表にしてってしてるんだよね?
【パターン1、改】 #!/bin/sh activeApp="` osascript - <<EOS1 set activeApp to path to frontmost application as text EOS1 `" osascript - <<EOS2 tell application "$activeApp" set note_text to contents of selection of front document end tell return note_text EOS2
【パターン2、改】 #!/usr/bin/osascript set activeApp to "CotEditor" using terms from application "CotEditor" tell application activeApp set note_text to contents of selection of front document end tell return note_text end using terms from
>>189 activeAppを使いたい理由はこんな形を想定していたからです。 tell application activeApp if activeApp = "CotEditor" then else if activeApp = "TextMate" then else end if end tell
とりあえずは、ifを外側にもってくれば動きそうです。 if activeApp = "CotEditor" then tell application "CotEditor" end tell else if activeApp = "TextMate" then tell application "TextMate" end tell end if
再現スクリプト on run my setWake() my putNotification() end run on wake:aNotification NSLog("%@", "wake_") end wake: on setWake() tell my NSWorkspace's sharedWorkspace()'s notificationCenter() addObserver_selector_name_object_(me, "wake:", "NSWorkspaceDidWakeNotification", missing value) end tell end setWake on putNotification() set uNotification to my NSUserNotification's alloc()'s init() tell uNotification setTitle_("Title") setSubtitle_("Subtitle") end tell tell my NSUserNotificationCenter's defaultUserNotificationCenter() setDelegate_(me) deliverNotification_(uNotification) end tell end putNotification on userNotificationCenter:aCenter didActivateNotification:aNotification NSLog("%@", "activate") end userNotificationCenter:didActivateNotification:
再現スクリプトを下記のように分割し、修正します main.scptの内容 on run set mySubScpt to my subScpt's alloc()'s init() tell mySubScpt setWake() putNotification() end tell end run (続く)
sub.scptの内容(CocoaAppletAppDelegate.scptと同じ階層に置きます) script subScpt on wake:aNotification NSLog("%@", "wake_") end wake: on setWake() tell my NSWorkspace's sharedWorkspace()'s notificationCenter() addObserver_selector_name_object_(me, "wake:", "NSWorkspaceDidWakeNotification", missing value) end tell end setWake on putNotification() set uNotification to my NSUserNotification's alloc()'s init() tell uNotification setTitle_("Title") setSubtitle_("Subtitle") end tell tell my NSUserNotificationCenter's defaultUserNotificationCenter() setDelegate_(me) deliverNotification_(uNotification) end tell end putNotification on userNotificationCenter:aCenter didActivateNotification:aNotification NSLog("%@", "activate") end userNotificationCenter:didActivateNotification: on NSLog(fmg, msg) do shell script "syslog -s -l Notice " & msg end NSLog end script
on run {input, parameters} tell application "Safari" make new document with properties {URL:"hoge"} (省略) do JavaScript "document.getElementsByName('text')[0].value = '" & input & "'" in document 1 end tell return input
tell application "System Events" delay 1 key code 19 using control down -- switch to desktop 2 delay 1 key code 18 using control down -- switch to desktop 1 end tell
何でか知らんが set the clipboard した後に keystroke でペーストすると更新前の内容 になっちまうけど、 run script か do shell script で迂回してやればいけそう あと keystroke してから実際にカットorペーストされるまで多少タイムラグがあるみたいなんで、次の処理が早すぎると上手くいかない
なのでこんなんとか
set oriClip to the clipboard tell application "System Events" keystroke "c" using command down do shell script "printf '(*%s*)' $(pbpaste) | pbcopy" keystroke "v" using command down end tell delay 0.5 set the clipboard to oriClip
環境によっては do shell script の前にも delay 入れんとダメかも カット"x"かコピー"c"かはお好みで
>>239 ProgressBar表示するappletとかOS9時代からあるけど、入れても結局ウザくて使わないな。 自分の用途ではscriptの終了や経過知りたい場合は音で十分。 do shell script "afplay /System/Library/Sounds/Hero.aiff" を最後に置いたり、音声で知らせたりする。 repeat with i from 10 to 90 by 10 say quote & i & "%" & quote end repeat say "done!"
>>243 途中まで tell application "System Preferences" activate set current pane to pane "com.apple.preference.displays" end tell tell application "System Events" tell process "System Preferences" tell window 1 tell tab group 1 click radio button "Display" tell radio group 1 click radio button "Scaled" end tell tell scroll area 1 tell table 1 select row 2 end tell end tell end tell end tell end tell end tell
すまん適当だし合ってるかどうかも知りませんが iWork items (whose ((item 1 of position) as integer) of it > 100) of page 1 of document 1 item 1 of position とか参照が参照のままでダメだから、型を適当に明示して変換すると けっこう行けたり行けなかったりしないかなあ?
set theList to (find text "[+-]?\\d+(\\.\\d+)?" in "数字を足してね♥︎ -1, 0.01, +1, 2,..,99 " with regexp, all occurrences and string result) set total to 0 repeat with x in theList set total to (total + (atof (x))) end repeat set message to "(" & (join theList using ") + (") & ") = " & total
>>278 set the_Date to int_date's dateValue() これでそのエラーになる?出ないけどなあ set the_Date to int_date's dateValue() as string だと、文字列に変換できないオブジェクト(この場合NSDate)を文字列に変換しようとすると(全く)同じエラーが出るけど
>>279,278 とりあえずな日付(NSDate)を文字列にはこんなんかな set theDate to int_date's dateValue() set dateFormatter to current application's NSDateFormatter's alloc()'s init()'s autorelease() dateFormatter's setDateFormat_("YYYY-MM-dd hh:mm:ss a") set dateString to dateFormatter's stringForObjectValue_(theDate)
暇つぶしにデータピッカからテキストにして、テキストからNSDateに変換する流れ書いてみた、テストしてないです。 NSDateはテキストじゃないから、直接変換しようとしてつまるよねー。 property datePicker : missing value set pickDate to my datePicker's dateValue() set nsDateObj to my pick2date(pickDate)
on pick2date(pickdate) set cal to current application's class "NSCalendar"'s currentCalendar() set com to cal's components_fromDate_(254, pickdate) set year to com's |year|() set month to com's |month|() set day to com's |day|() set hour to com's hour() set minute to com's minute() set second to com's |second|() set time2sec to (((hour) * 3600) + ((minute) * 60)+ second) as number set qqq to my mkDate(year, month, day, 0) + time2sec return result end pick2date
on makeDate(y, m, d, s) tell (get current date) set {year, its month, day, time} to {y, m, d, s} return its contents end tell end makeDate
281さんありがとうございます。実際おしえてもらったコードを入れてみました set Client to name_Client's stringValue() as string set the_Date to int_date's dateValue()
set dateFormatter to current application's NSDateFormatter's alloc()'s init()'s autorelease() dateFormatter's setDateFormat_("YYYY-MM-dd hh:mm:ss a") set dateString to dateFormatter's stringForObjectValue_(theDate) 最後の行でエラーが起きてしまいました Scheduler[3049:303] *** -[AppDelegate workSchedulRecorder:]: The variable theDate is not defined. (error -2753) ご返答のコード内容が理解できない初心者なのですが 変数のthe_Dateは作っていただいた書式にははまらないということでしょうか もう少しねばってみたいと思います。ご返答ありがとうございました!
>>289 set dateString to "2014/10/26" as text log class of dateString log class of "2014/10/26" log class of date dateString log class of date "2014/10/26" Cocoa-AppleScript の date文 が変数の場合なんかおかしなことをしている/おかしなことになっている date 変数 の場合に作られるのは«script»オブジェクト?
292さんありがとうございます。がんばってみましたが能力が足りないせいでうまくいきませんでした set the_Date to pick_date's dateValue() --my取りました set nsDateObj to my pick2date(the_Date)
on pick2date(pickdate) set cal to current application's class "NSCalendar"'s currentCalendar() set com to cal's components_fromDate_(254, pickdate)
set year to com's |year|() set month to com's |month|() set day to com's |day|() set hour to com's hour() set minute to com's minute() set second to com's |second|() set time2sec to (((hour) * 3600) + ((minute) * 60)+ second) as number set qqq to my makeDate(year, month, day, 0) + time2sec --mkDateからmake dateに訂正 return result end pick2date
on makeDate(y, m, d, s) tell (get current date) set {year, its month, day, time} to {y, m, d, s} return its contents end tell end makeDate いろいろ試しながら探しながらやってみました。。せっかく書いてくださったんですが、、 すると、下記の閉じ忘れのようなエラーが出てコンパイル失敗になったようです。
291さん ありがとうございます。logで調べながらする方法すばらしいですね。 log class of date dateString 私のひっかかった date "変数" の箇所 log date dateString ですると複数のパラメーターがどうのでエラーになりました appdelegateはすごく私には早すぎた感がありました。皆さんこんなに助言いただいたのに うまくいかず申し訳ありません。
>>295 >log date dateString ですると うん、date dateString で «script»オブジェクト(?)ができての、«script»オブジェクトをlogするためになんか(文字列)変換/«script»オブジェクトに対してなんかしよとして失敗かと log class of date dateString は、«script»オブジェクトになんのクラスやねんって問いただして、(たぶん)classオブジェクトが返って来ての、classオブジェクトは文字列に変換可能だからかと てきとーにそう思うw
>>303 よくわかりませんが、ここの人たちが言っていることのほうが 正しい道のような気はしますが、あなたの考えを伸ばすとすると、 要はLightroomで書きだしたあと後処理にExifTool使ってExif情報を操作するんだよね? そしたら、情報を削除したファイルがどこかに出来るはずだから、 それのパスを作成してそれをtell application "Finder"で set ~ as alias (list) とかして、適宜自分の好きな名前にするなどすればいいよ。
スクリプト中には同一時刻の場合サブナンバーを付けるようになってますが、これが出来ず、同じ 名前の項目があるため処理できない、とのメッセージが出てしまいます。下記がサブナンバーの 記述ですがどうすればサブナンバーがつくようになりますか? OS Mavericks, mac pro mid 2012 です。
--もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if
set name of Obj to fname & "." & kakutyousi
だから、そこ try / on error / end で囲えばいいんじゃないの スクリプトちゃんと読んでないけどとりあえず _2 _3 _4 などにリネームされる
try set name of Obj to fname & "." & kakutyousi on error --もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if end try
try set name of Obj to fname & "." & kakutyousi end try --もし同一時刻のファイルが存在した場合、サブナンバーをつける set ChkFname to name of Obj if ChkFname is not Orifname then set CHK to "OK" end if if ChkFname is Orifname then set CHK to "NO" set subNUM to subNUM + 1 end if
tell application "Finder" set theFileList to selection as alias list repeat with i in theFileList set i to i as alias set i_Extension to name extension of i set AnswerFileName to my getExif_(i) & i_Extension set NUM to 1 repeat while (exists (file AnswerFileName of parent of i)) set AnswerFileName to my getExif_(i) & "_" & NUM & i_Extension set NUM to NUM + 1 end repeat set name of i to AnswerFileName end repeat end tell
on getExif_(theFile) set theName_of_Camera to do shell script "exiftool -model " & quoted form of POSIX path of theFile
set theDate to do shell script "exiftool -DateTimeOriginal " & quoted form of POSIX path of theFile
set OriginalDeliniter to AppleScript's text item delimiters set AppleScript's text item delimiters to ":" set theName_of_Camera to item 2 of text items of theName_of_Camera set theDate to items 2 thru end of text items of theDate set AppleScript's text item delimiters to OriginalDeliniter return text 2 thru end of theName_of_Camera & (theDate as string) end getExif_
Applescriptの話になってきたので 「Mac OS Xのテキストエディタ総合 Part12」から移動してきました
--CotEditorでファイルを開いて文末に日時を挿入 --ファイルパスの例"/Users/ユーザー名/Desktop/ファイル名.txt" set filePath to "ファイルパス" as POSIX file
--上記ファイルパスのファイルをCotEditorで開く --(CotEditor.appがApplicationsフォルダの直下にある場合を想定) tell application "Finder" open filePath using file "CotEditor" of folder "Applications" of startup disk end tell
tell application "CotEditor" activate tell front document -- カーソルをドキュメントの末尾に移動 set docLen to length set range of selection to {docLen, 0} --末尾に日時を挿入 set contents of selection to return & return & return & return & "---" & (current date) & "---" --日時挿入した行の2行上にカーソルを移動 set theRange to range of selection scroll to caret set item 1 of theRange to (item 1 of theRange) + 2 set item 2 of theRange to 0 set range of selection to theRange end tell end tell
--CotEditorでファイルを開いて文末に日時を挿入 --ファイルパスの例"/Users/ユーザー名/Desktop/ファイル名.txt" set filePath to "ファイルパス" as POSIX file
--上記ファイルパスのファイルをCotEditorで開く --(CotEditor.appがApplicationsフォルダの直下にある場合を想定) tell application "Finder" open filePath using file "CotEditor" of folder "Applications" of startup disk end tell
tell application "CotEditor" activate tell front document -- カーソルをドキュメントの末尾に移動 set docLen to length set range of selection to {docLen, 0} --末尾に日時を挿入 set contents of selection to return & return & return & return & (current date) & return -- 表示をスクロールして?カーソルをドキュメントの末尾に移動 set theRange to range of selection scroll to caret set docLen to length set range of selection to {docLen, 0} end tell end tell
activate application "Finder" tell application "System Events" tell process "Finder" keystroke "a" using {command down} keystroke "y" using {command down, option down} end tell end tell
参考 tell application "Adobe Illustrator" set docRef to make new document with properties {color space:CMYK} set pathRef to make new star at beginning of docRef with properties { center point:{300, 300}, radius:20, inner radius:10, point count:4, reversed:false, filled:true, stroked:false, fill color:{cyan:75, magenta: 50, yellow:20, black:5}} end tell
>>451 ありがとうございます。 tell application "Safari" open location "http://anago.2ch.net/mac/" delay 5 get properties of document 1 end tell とやってみたら取れました。 Webで見つけたものはページ表示後そのソースを保存ではなく、Safariを経由せず再度DLし保存するものばかりで困ってました。
set anAliasA to "/Users/***/Desktop/AppleScript/2015-02-16.numbers" --ファイルを開く set anAliasB to "Macintosh HD:Users:***:Desktop:AppleScript:makecsv:" & date string of (current date) & ".csv" --書き出す場所は固定+日付指定した+拡張子設定
tell application "Numbers" open anAliasA export document 1 to anAliasB as CSV --NumbersファイルをCSVで書き出し close document 1 end tell
書き出したい場所も、毎回同じファルダ内に書き出したいので、 set anAliasB to "Macintosh HD:Users:***:Desktop:AppleScript:makecsv:" & date string of (current date) & ".csv"
で指定しているのですが、下記のエラーが出ます。 error "Numbers でエラーが起きました:書類“2015-02-16.numbers”を“2015年2月18日水曜日”として書き出せませんでした。アクセス権がありません。" number 6
書きだしたファイル名はユニーク名で付けたいのでとりあえず今はdate string of (current date) で指定してます、本当は時間もファイル名に入れたい。
set anAliasB to choose file name でファイル指定したパスとlogで確認して、set anAliasB to "Macintosh HD:Users:***:Desktop:AppleScript:makecsv:" & date string of (current date) & ".csv" にしてみたのですが・・・。
>>460 >本当は時間もファイル名に入れたい set currentDate to current date set anAliasB to POSIX file (“/Users/***/Desktop/AppleScript/makecsv/“ & date string of currentDate & “ “ & time string of currentDate & “.csv”)
としたいところだが、”/“や”:”がファイル名に入るのは好ましくないので、
set dateTimeString to do shell script "date +'%Y-%m-%d %H-%M-%S'" set anAliasB to POSIX file (“/Users/***/Desktop/AppleScript/makecsv/“ & dateTimeString & “.csv”)