AppleScript アップルスクリプト 質問、発表 6
■ このスレッドは過去ログ倉庫に格納されています
ああ、BTTももちろんありだね
ランチャー系でメジャーどころといえばほかにもLaunchBar、Alfredなど
参考までに自分はKarabiner、BTT、Spark、LaunchBarを併用しているよ
Sparkはもうやめたいんだけど移行がめんどい(大事なことなので(ry >上記手順で作成したアップルスクリプトにショートカットを割り当てているのですが、もうちょっと効率的にできないのでしょうか?
↑を自動化しちゃえばいいんじゃねえ、なんつって
FastScripts
Instant access to your scripts, by keyboard shortcut or menubar.
Free for 10 keyboard shortcuts. $9.95 for unlimited.
10.6以降対応、10.10の話はリリースノートに載ってる
10.11はわからん >>641
レスありがとう。
karabiner からAppleScript実行できたのか。
知らなかった。
これができれば、>>640 の手続きを大分省略できる。 コマンドの 引数に何を指定したらいいかどこを見たら良いのでしょうか?
用語説明見てもちゃんと書いてないのが多く困ってます。
例えば、duplicate コマンドの引数に何を指定するかエイリアス? posixパス? それとも hfs 形式?
移動先はフルパスを指定するのか、移動先フォルダを指定するのかとかも書いてなくて、簡単そうなとこで詰まりまくりです >>646
>duplicate v : Duplicate one or more object(s)
>duplicate specifier : the object(s) to duplicate
>[to location specifier] : the new location for the object(s)
>移動先フォルダを指定するのか
これは書いてあるじゃん
まあ指定しなかったらどうなるかは書いてないけど
常識の範疇というかちょっと試せばわかること
>何を指定するか
この場合もそうだが、たいてい必要な specifier は alias や file だわな
path 自体はただのテキストにすぎないので、コマンドは場所として認識しない
君の書いてるPOSIX pathやなんかも最終的には変換して渡すわけだね
>set tarFolderPath to "/hoge/hage" --これはただのテキスト
>set tarFolder to POSIX file tarFolderPath --これでファイルを参照できる
>get POSIX path of tarFolder --これで tarFolderPath と同じものが返る
逆に言えば、コマンドに渡すまではどの形で管理しようと自由
テキストであることを生かしてホイホイ変形できる
自分なんかは POSIX path がわかりやすいし何かと便利なのでそれで統一してる
慣れるまでは全部下記のようにして渡すと謎の行き詰まりも減るかと
(面倒なことに、file や folder と alias の違いが問題になることがある)
>set tarFolder to tarFolder as alias --つまり (POSIX file "/hoge/hage") as alias よく見たら質問の答えになってないな。すまん
>どこを見たら
確かに用語辞書だけ見てもちんぷんかんぷんだと思う
暗黙の前提がけっこうあるからね
その辺は>>1にあるサイトを眺めてつかんでいくしかないよ >>647 役に立つレスありがとうございます
下記のコードで srcFile の指定を tell ブロックの中でやるとエラーになるのはなぜでしょうか?
今日一日の数時間の作業の成果。作業効率化のはずが非効率化してる。
デスクトップにファイルコピーするだけで数時間かかった。
-- このファイルをデスクトップにコピー
property bkItemFullpathText : "/Users/Tomo/Desktop/kopitesuto.scpt"
set srcFile to (POSIX file bkItemFullpathText)
set destDir to (path to desktop folder)
tell application "Finder"
log "----- 3 finder で 処理開始-----"
-- これがだめ — 上書きしない設定に変更できずこまった
-- duplicate srcFile to destDir with replacing false
-- 下記2つは動く
-- duplicate srcFile to destDir without replacing
duplicate srcFile to destDir with replacing
end tell >>649
set srcFile to bkItemFullpathText as POSIX fileにすればtell〜内で動く。
それより、AでできるのにBの記述にできなくて何が問題?
A : duplicate srcFile to destDir without replacing
B : duplicate srcFile to destDir with replacing false >>649>>651
ちゃんと用語辞書読めばそんな書き方はないとわかる
> [replacing boolean] : Specifies whether or not to replace items (ry
B はよけいな with がいかん
> duplicate srcFile to destDir replacing false
こう書けば普通に動く(コンパイル時に without の記法に直されるが)
どうでもいいが、without の記法が気に入らないならこうすればコンパイル通る
> set isFalse to false
> duplicate srcFile to destDir replacing isFalse >>651
レスありがとうございます。
理由がよくわからないのですが、as を使わないと finder のfile オブジェクトととして解釈されて動かないということでしょうか?
AppleScriptの最大の問題点はパスの指定。エイリアス、posix 、ファインダーのファイル、Mac 形式とかあって意味不明すぎる。
AppleScript は一つの単語に複数の意味があって混乱する。
一つの単語に複数の意味、使い方があるような言語を使ってると馬鹿になるよ。 わろた
>>653=>>646とは限らないがマジレスすると
パスの仕様は意味不明でもなんでもない
ASの問題点は存在するが、お前はそれを指摘できるレベルに達してないよw
「複数の意味」を問題にするなら、せめてtellブロックでの用語衝突などを挙げてくれ 理解してない子ほど、自分の無能を棚に上げて文句言うやつか 用語辞書のスイーツ(笑) ってなんなのでしょうか。
クラスの説明が複数スイーツに分かれてたりして分かりづらい。 都会の隠れ家的お店で、頑張った等身大の自分へ与えるご褒美です。 基本的なとこでつまりまくるので、Kindleで hanaan著"Learn AppleScript "を買った。
4600円したが内容は素晴らしい。
余計な前置きが多いのと、後で説明する、みたいなスタイルがうざいのがたまにキズ。 >>658
標準コマンドか否かみたいな感じ
基本的に見たいものは検索で探すから無視無視 display dialog "Happy New Year!" なーんか最近スクリプトエディタがよく落ちる
ちょっと前にJavaScriptで間違った文を実行して落ちて以来、落ち癖がついちゃったような
今はAppleScriptのコンパイル済み.scptを開いた時に多いけど、エディタ単独で開いても時々
OS X 10.11.2 (15C50)
スクリプトエディタ 2.8.1 (183.1) xcode 使ったら、ブレークポイントでとめて、タップで変数の中身確認とかできないの?
スクリプトエディタだとブレークポイント作れないよね? 使った事無いけどLateNightのScript Debuggerとか? 下記は重複しない保存先パスを作成する script の一部です。
日付_連番_ファイル名 このような形式のファイル名を作成しています。
exists コマンドの挙動がおかしく、常に false が返ってます。
set i to 2
repeat
tell application 構文エラー
expression、property または key form など があるべきところですが end of script が見つかりました。 set i to 2
repeat
tell application "Finder" to set isItemExists to exists (my POSIX file fullpathText)
if {isItemExists = false} then
log "存在しない"
exit repeat
else -- 存在するときの処理
set k to (i as text)
-- date_k_baseName -- /Users/Yuu/Desktop/2016_01_21_test.txt
set fullpathText to destDir & baseDateStr & k & "_" & baseNameStr
end if
set i to i + 1
end repeat
return fullpathText >>668 です。文法が怪しいところをハンドラにして書き方変えたら自己解決しました。
>>670はif文がなぜか常に "存在しない" の方に行く。
下記なら理由はよくわからないがうまくいく。
on fileExists(fullpathText)
tell application "System Events"
if exists file fullpathText then
return true
else
return false
end if
end tell
end fileExists if {isItemExists = false} then <- なんで{}とか使ってんの?
そもそも閉じる必要もないし。 以前AppleScriptの仕様に文句言ってた人では
見切りつけて使うのをやめたんじゃなかったのか 作業完了時にチャリーンと音を鳴らすにはどうするのが良いでしょうか?
下記のしっくりこない対策しか思いつきません。
・ beep
音が気にくわない。
・ AppleScriptobjc で NSSound クラスを使う。
本に載ってる。コピペでそのまま使えそう。
でも、なにか大げさで違和感のある対策。
・ iTunes でサウンドファイル再生。
大げさ、重い。 通知ありでも良ければ
display notification with title "終了しました" sound name ""
ユーザのライブラリ/Soundsに音源ファイル入れておけばOK
sound nameに拡張子無しのファイル名で音が出る。
名前が違えば通常の通知音が鳴る。 >>675 >>676
役に立つ回答有り難うございます。
できました。
do shell script "afplay /System/Library/Sounds/Ping.aiff" >>677
afplay -v 0.1 とかでボリューム調整な
うちもそうやって通知音出してるわ 起動してウインドウ位置とウインドウサイズを固定するAutomatorのアプリをApple Scriptで作りたいのですが、一部のアプリで
tell application "アプリ名"
activate
tell front window
set bounds to {0, 0, 0, 0}
end tell
end tell
でエラーウインドウが出るだけでアプリの起動もできません。
他の方法として
tell application "System Events"
を使えばいいようですが、どんな風にかけて思った動作がするにか想像もできません…
どなたか助けていただけませんか。 「一部のアプリ」でなんだかよくわからない「エラーウインドウ」ね……
エスパー募集かな? https://i.imgur.com/4aXhmWl.png
こんなウインドウしか出てこないのでどうすればいいのか全くわかりません。
アプリはTweetbotなどです。
特にエスパーは必要ではありません。 参考までに。
tell application "System Events"
set app_name to name of first item of (every application process that (frontmost is true))
tell process app_name
set a_win to (1st item of (every window that subrole is "AXStandardWindow"))
set position of a_win to {20, 60}
set size of a_win to {1600, 1200}
end tell
end tell tell application "System Events"
tell process "アプリ名"
tell front window
set position to {x, y}
set size to {w, h}
end tell
end tell
end tell
で行けんじゃないの Mailソフトでフィルタリングされた迷惑メール複数をmeiwaku@dekyo.or.jpに添付ファイルとして、転送できるようなAppleScriptって書けないものでしょうか?
件名はjunk mail transferとしたいです。 どこまで出来たか晒しなよ
見てくれる人はいっぱいいるから >>685
こういう系統のスクリプトはスパムに使えるから答えをもらえないかも。 んなこたあないw
そんなこと言い出したら>>679だってイタズラ用かもしれんぞ
答えをもらえるかどうかは>>1を読んだかどうかと女子高生か否かで決まる >>685
>Mailソフトでフィルタリングされた迷惑メール
迷惑メールが収められているフォルダー内のデータ
に対して(1、2)を行うスクリプト:
1) 文字検索して
2) 検索結果をmeiwaku@dekyo.or.jpに送る
をpythonやrubyなどで書いた方が、同じ作業を
AppleScriptで書くよりも絶対に楽だと思う。
5万円払ってくれるのなら、AppleScriptで書いて
もらえるとも思うが。 細かいこと言わなきゃ 環境設定→ルール の実行パターン「メッセージを転送」で済みそうな気もするけど。
もしくは、実行パターンとして「AppleScriptを実行」てのもあるからそこ使えば作れるかも。 AppleScriptでメーラー作ればいいんじゃない 教えてください。
ttp://hottinroof.blog54.fc2.com/blog-entry-77.html
のスクリプトを使って写真のリネームをしています。本日 El capitanにアップデートしたところ
「sh: exiftool: command not found Finder でエラーが起きました:sh: exiftool: command not found(127)」
と動かなくなりました。
exiftoolsは最新のmac用 10.11です。調べたところ、置き場所が変わったとの記述を見つけ、
スクリプトを開いて開いて POSIX path にMacintosh/usr/local/bin/exiftoolを当てようと色々試したのですが動かず的外れ
だったようです。
どなたかどうすればexiftoolが有効になるのか教えてください。お願いします。 頭の Macintosh 取って、 /usr から始めればいいんじゃない >>694
このAを各々Bと置き換えたらできないかな?
A:
set scrptMO to "exiftool -model " & cameraname
set scrptMO to "exiftool -DateTimeOriginal " & hidukejikoku
B:
set scrptMO to "sips --getProperty model " & cameraname
set scrptMO to "sips --getProperty creation " & hidukejikoku >>695
>>696
だめでした。pathの変更を記述しただけじゃダメみたいです。
ちょっとお手上げ。 >>697
試しにel capitanで実行しても動いたよ。>>696
変な所いじってない?
元のまま該当部分だけ置き換えた?
エラーが出るならなんてエラーが出てるかも書かないと。 exiftoolいらんかったんや
と思ったけど、調べてみたら、一発で所望のリネームまでできるじゃないか
exiftool '-FileName<$model $DateTimeOriginal%+c.%e' -d '%Y%m%d %H%M%S' ファイル...
ドロップレットで処理するとしても長々いらんかったんや >>698
コンパイルした後、保存するの忘れてました!!
うまく動きました。
本当にありがとうございます。
これで母艦もEl Capitanに移行できます。
ありがとうございます。 上の処理をシェルスクリプトの勉強がてら書いてみたんだけど、
よくわかっていないのでイマイチすっきりしない。
どう書いたらスマートに書けるか詳しい人教えて。
for f in `ls` ; do mv $f `sips --getProperty model $f | sed -n '/[0-9: ]$/p' | sed 's/ model: //'` なんかとちゅうで切れてるので再アップ
for f in `ls` ; do mv $f `sips --getProperty model $f | sed -n '/[0-9: ]$/p' |
sed 's/ model: //'`"_"`sips --getProperty creation $f | sed -n '/[0-9: ]$/p' |
sed 's/[^0-9]//g'`".jpg"; done おめーはよー、シェルスクリプトだけの話しかしねーならスレ違いだろボケー
このスレらしくImage Eventsで書き直した版持ってこいよ do shell scriptを使ってpython 3を実行させたいのですが、
Aの記述の様にパスに日本語を含むファイルを実行しようとすると
can't open file '<unprintable file name>': [Errno 92] Illegal byte sequence" number 2とエラーがでます。
A: do shell script"〜.pyenv/versions/3.3.0/bin/python 〜/Desktop/テスト.py"
B: do shell script"python 〜/Desktop/テスト.py"
ファイル名に日本語を含まない場合、ターミナルから直接実行した場合、Bの記述の場合は
いずれも問題なく実行できます。
どうしたら上の記述で実行できるでしょうか?
pandasを使いたくてpython 3の方に入れたのですが、
Bの記述だとpandasが認識されず、Aの記述だとpandasが認識されます。
ターミナルから実行する場合はBでも問題なくpandasは認識されます。
pandasはpipを使って入れています。 例のあれ、LANG=ja_JP.UTF-8 設定して解決じゃないの $ "hoge -hoge '/日本語/日本語'"
ってするんじゃないの |
| 彡⌒ミ
\ (´・ω・`)またhageの話してる
(| |)::::
(γ /:::::::
し \:::
\ >706
localeはLANG=ja_JP.UTF-8になっています。
>707
シングルクォートの事でしょうか? 囲っても囲まなくても結果は同じでした。 >>709
いやコマンドのコードに書き込めよ
中に書いてあっても読み込まないよ。 >710
コマンドに入れたらできました!
ありがとうございます。次からはおまじないで入れとくことにします。 テキストエディットで文末に表示とカーソルを移動させたいのですが、
どこをどう直せばよいですか?
tell application "TextEdit"
activate
tell front document
set selection to last paragraph
end tell
end tell >>712
詳しく知らないけど、ぱっと見それらしい命令がないので無理じゃないかな?
最終目的がわからないけど直接テキストデータいじった方が早いかも。 >>713-714
ありがとうございます
特定のテキストファイルに
コピーしたメモを貼り付けておきたいのですが、
文末にどんどん追加していきたいので、
そのテキストファイルを開いたら、カーソルが一番下に行くようにしたかったです。
Alfredのトリガーで「そのファイルを開いて、スクリプトで文末に移動」
というのを登録して使おうと思いました。
やっぱり、素直にこうするのがいいのかもしれませんね・・・
tell application "TextEdit"
activate
tell front document
tell application "System Events" to key code 125 using {command down}
end tell
end tell コピーってのがクリップボードへのコピーならカーソルを移動しなくてもこれでできる。
tell document 1 of application "TextEdit" to set every text to every text & return & (the clipboard) 速度的にはどうなんだろ
on replaceReg(str, fnd, opt, rep)
set JsScr to "
var str = " & quoted form of str & ";
var fnd = new RegExp(" & quoted form of fnd & "," & quoted form of opt & ");
var rep = " & quoted form of rep & ";
str.replace(fnd, rep);
"
set ret to run script JsScr in "Javascript"
return ret
end replaceReg >>717
どうもapplescriptに見えんなーと思ったらapplescriptじゃなかった
JS使いにとってはASで素直に置換ができない問題がこれで解消されるわけか?
まあしかしASだけでルーチン組むのとあんまり変わらんから
やっぱり速度の問題になるよね Doublequoteはescape必要に見えるけど、大丈夫? >>717
いいね、これ
前に似たようなことやりたくて、JSで書いたやつを~/Library/Script Librariesに置いてASから使おうとしてダメだったから諦めてた
代わりにuse framework "Foundation" ... NSRegularExpressionで書いて使ったけど見た目ごちゃごちゃしてるしマンドクサかった 721です。昨日から触り始めたので、目新しいことばかりです。
配列やオブジェクトがlistやrecordとして返ってくるのは
ちょっと嬉しい。今更かもしれませんが。
set JsScr to "
var obj = {str:'apple', arr:['ふじ','レッドデリシャス']};
obj
"
set ret to run script JsScr in "Javascript"
log "class of ret:" & class of ret
log "class of arr of ret:" & class of arr of ret
repeat with i in arr of ret
log i
end repeat >>711
NSRegularRexpression をラップしてたマンドくさくないシンプルなインタフェースのライブラリをつくればいいのではないかしら。 ASOCでウインドウをフローティング(常に前面)にしたいのですが、
どこでどう設定したらいいんでしょう? >>726
property win : missing value --xivでウィンドウど接続
--初期化で
win's setLevel_(3) >>727
すみません。エラーも起きませんが、フローティングにもなりません。
現在記述してあるのは、下記のみです。xcode 3.2.6 os10.6.8
script UntitledAppDelegate
property parent : class "NSObject"
property _win : missing value
on applicationWillFinishLaunching_(aNotification)
_win's setLevel(3)
end applicationWillFinishLaunching_
on applicationShouldTerminate_(sender)
return current application's NSTerminateNow
end applicationShouldTerminate_
end script アンダーバーが抜けていました。アンダーバー入れてもフローティングにはなりません。
_win's setLevel_(3) >>728
on applicationWillFinishLaunching_(aNotification)
set aB to current application's NSBackingStoreBuffered
set aRect to {{300, 300}, {300, 300}}
tell current application's NSWindow's alloc()
tell initWithContentRect_styleMask_backing_defer_(aRect, 7, aB, false)
tell current application's NSView's alloc()
tell initWithFrame_(aRect)
setNeedsDisplay_(true)
set aView to it
end tell
end tell
setContentView_(aView)
setDelegate_(me)
setTitle_("TEST")
setLevel_(3)
makeKeyAndOrderFront_(me)
end tell
end tell
end applicationWillFinishLaunching_
xiv怪しいから試しにwinnow作ってやってみて
これで出来ると思う >>730
ありがとうございます。
test windowはちゃんとフローティングになりました。
自分で作成したwindowはどこをどう設定したらいいんでしょう? >>731
xivのバグでoutlet接続しても接続されないってのがある、これはALを切ったりxivの設定を触ってると治る事がある
ただこれの場合はunrecognized functionとエラーログが出るのでおそらく別の問題。
通常、初期状態のxivのwindowをoutletを繋いでsetLevel_を呼び出せば、表示レベルが変更される。
マクロの定数をキャストしてな事による定数誤差の場合、>>730のコードも適用されないのでこれも違う
よってxivの設定が間違っている可能性が濃厚 >>732
たびたびありがとうございます。
バグの可能性を聞いて、接続したり切ったり、設定を変えたりして
いじっていたらできることがありました。(2回成功しました)
ただ、これといった確実な方法が見つからずほとんどの場合はできません。
フローティングにならない場合でも同じ設定でエラーは出ません。
手動でoutletsの設定したい場合はどうしたらいいのでしょう? 連投すみません。
絶対とは言えないのですが、高確率で成功する方法を見つけました。
property win : missing valueとwin's setLevel_(3)の両方を書いてからoutletsに接続すると成功率が高いようです。
property win : missing valueを設定してwin's setLevel_を実行する前にoutletsに接続してしまうと高確率で失敗します。 >>734
Visible At Launchをオフにしてコードでwindowを表示してみましょう。
もし表示出来たならOutletが正しく接続されているので他に原因がある事になります。
_win's makeKeyAndOrderFront_(me)
_win's setTitle_("TEST")--ついでにタイトルも変えてみましょう
xivのwindowは、初期設定状態でしょうか
例えばxivでwindowのHidesOnDeactivateをonにしていると、他のアプリに移動した時にウィンドウが消えます。 とりあえず新規プロジェクトで実験しているので初期設定状態のままです。
_win's makeKeyAndOrderFront_(me)
_win's setTitle_("TEST")
を試した後からなぜか突然フローティングに失敗しなくなりました。
新規で作ってさっきまでうまくいなかったやり方で試しても大丈夫です。
よくわからないけど助かりました。ありがとうございます。 # sed - put commas at the end of every line in stdin
# awk - pass to awk to remove the linefeeds
# sed - remove the comma from the last line
# sed - turn all spaces into pluses
address=`sed -e "s/$/,/g" | awk '{ str1=str1 $0 " "}END{ print str1 }' | sed -e "s/, $//g" | sed -e "s/ /\+/g"`
open "http://www.amazon.co.jp/s?field-keywords=$address"
Automatorのサービスで右クリックできるようにしたのですが、
これをつねにfirefoxで開くようにしたいです。
どのように付けくわえればよいでしょうか? デフォルトブラウザがFirefoxならそのまま行くんじゃないの
それかopen -a Firefoxにするか または open -b org.mozilla.firefox >>738,739
ありがとうございます
デフォルトはSafariです
amazonの検索だけFirefoxにしたかったのです
教えてもらった行を最後に付けくわえてみたら、
Firefoxは起動するけど、検索自体はSafariのままでした。
付けくわえかた間違ってるのでしょうか・・・? ■ このスレッドは過去ログ倉庫に格納されています