AppleScript アップルスクリプト 質問、発表 8
「発表8」で、JavaScriptでのQuickTime動画の操作でお世話になった者です。
macOS Ventura 13.2.1を使用してます。追加の質問です。
再生中のQuickTime動画のタイムコードを表示(取得)する目的で
次のスクリプト(1)を作成し実行しすると、スクリプトエディターの
「返された値」のタブには(2)のようなエラーが出ます。
currentTimeの値を表示(取得)する方法をご教示いただけると幸いです。
(1) スクリプト
quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
console.log(quickTimePlayer.documents[0].currentTime);
(2) 「返された値」のタブ
app = Application("QuickTime Player")
app.activate()
app.currentTime.Symbol.toPrimitive()
--> Error -1700: タイプを変換できません。
/* */
結果:
Error -1700: タイプを変換できません。 >>3
ご助言ありがとうございます。.currentTime() で見事に値が得られました。
「これ読みなさい」も読んでみます。
本来のJavaScriptとPythonを頻繁に使用しますが、()の有無によるget, setの
使い分けは、まったく使ったことがないため、ご指摘いただけなかったら
自己解決は絶対に無理でした。 >本来のJavaScriptとPythonを頻繁に使用しますが〜
JavaScriptとPythonを頻繁に使用するがそれで使うライブラリ/フレームワークを調べようともしてないってことか
言い訳にならない言い訳をなぜしようとするのか 質問者には悪いけどまだそこまで学習できてないからだろう
おまえがすごいのは分かるけど全員がおまえのようにすごくはないってことだろう
むしろなぜそんなに追い込みたい? 無意味なプライドは早めにへし折った方が後のためではある >>5
>ライブラリ/フレームワークを調べよう
JavaScriptとPythonはユーザー数が多いので、単純にエラーメッセージなどを
Google検索すれば、回答が出てきます。一方、ASのJavaScriptは、同じような
Google検索を実行しても、答えが出てこないため、これまでも皆様のご助言に
救われてきました。心より感謝しております。
(JavaScriptは20年以上、Pythonは10年以上、ASは25年以上使用し続けていて
このレベル(笑)です。) JXAは確かに情報少ないけど、
サンプルみてたら()つけるぐらいは試してみて良さそうなもの
ましてそれだけのプログラミング歴があるなら >>10
>ましてそれだけのプログラミング歴があるなら
Python, JavaScriptは毎日平均2、3時間書き続けてますが
25年以上のASの方は1ヶ月に数時間というレベルで、どんどん
忘れていくばかりです。このスレッドで、これまで同じような質問をして
(「()をつける」など)ご迷惑をおかけして心よりお詫び申し上げます。 プログラミング歴を自ら出せるレベルじゃないと自覚してるなら、そうしなよ
言い訳が自分の為であって、なんら他人のためではない
タイプを変換できません ってことはそこのどこかの型がおかしいって推察できそうなもんだが、その自称歴からは
そこのどこかの型がおかしいってのも、JavaScriptの基本で調べられることであろうに
とか細かく言いたくはなるなw >>12
>どこかの型がおかしいってのも、JavaScriptの基本で
JavaScriptの型変換から類推して、いろいろとあがきました:
String(quickTimePlayer.documents[0].currentTime)
parseInt(quickTimePlayer.documents[0].currentTime)
' '.join(quickTimePlayer.documents[0].currentTime)
正解の()は、自分では全く思いつきませんでした。 typeof quickTimePlayer.documents[0].currentTime
() に決まってるだろ
typeof知らないでよくJavaScriptを頻繁にとか20年以上とかよく言うわ 20年以上やってまだ初学者の勉強中を脱してないって 只々スクリプトを読まずに横流ししてただけじゃねーか勉強もクソもあるかいなって 勉強という姿勢はそもそも全くないのは今までのレスでわかってるよ
そういう意味じゃない 意味なんてどっちでも良いけどvbaもluaもpythonもcもライブラリは型()やし、
あの質問はtbn初めてイチから書いた文章だと思う。
批判はしねぇけど長年やってきたと言う割には超基礎抜けしてるから
良く今まで指摘されなかったな/(^o^)\って感じ >>19
>批判はしねぇけど長年やってきたと言う割には超基礎抜けしてるから
Mac歴は35年以上。元々はHyperCardというスクリプトから
始めましたが、それが消滅して、4th DimensionやAppleScriptを
使うようになりました。4Dは10年前にやめて、pythonやSQLiteに
乗り換えましたが、AppleScriptは今でも時々、使っています。
いつまで経っても素人レベルで申し訳ないです。老化のため、10年前に
できたことも「超基礎抜け」し始めています。 ChatGPTがpythonやJavaScriptのスクリプトを自動生成してくれる
ようですが、「私のパソコン内に保存された動画ファイルaaa.mp4を
QuickTimeで開き、1分10秒から再生するスクリプトを
書いてくれ」というチャットには、ChatGPTver.99でも対応
できないのでは?! >>20
マイコン世界のまま来たんだ…
>>22
開く訳ないんだよなぁ… >>23
え?当たり前だけどちゃんと動くけど?
スクリプト見たら分かるよね?
まさかパスそのままじゃないよね? >>25
何年前のmac使ってるねんパス書いてみーや >>23
マイコンの世界ママからというより、色々手を出すがどれもこれも何も身についてないって感じ
経歴を色々出す意味が全くわからんな。どれもこれも知見が全くない素人レベルでしかないだろうに
単にど素人ですって言われた方が...いやそれでも自分で何か色々したいなら勉強する姿勢を見せろってなるか まあ、動かないことは動かなかったり
原因がパス形式がではなく、fileもしくはaliasが足りなくなくない?
AppleScriptではHFS形式が隠れデフォなのは前スレで話題にあったな
そうでなくても使うことがないのに、普通に目にするわな
Script Editorの結果表示とかで >>30
ヒント与えちゃダメでしょ〜
コロンの付いたhfsパスではapfsコンテナを通過できなくてPOSIXに変える必要があるんだけど、
chatGPTチャンの"アレ"で完璧に動作するのはsierra以前になるのよね。
誰かさんの誇らしげな書き込みがどんな転末を迎えるか楽しみだったのにw ん?Veatura13.2.1でコロンのついたパスでも動作するけど?
POSIX形式のパスじゃなくても。
Macintosh HD:Users:ほにゃらら:Movies:aaa.mp4で >>22
>すぐ書いてくれましたよ
驚きです! 対話を続けて「今のAppleScriptをJavaScriptに
書き換えてください」とChatGPTへ返答すると、ChatGPT は
JavaScriptで書き直してくれるのでしょうか?
JXAのJavaScriptは、学習するデータが他の言語より少ない
はずなので、ChatGPTが正しい回答をするのは難しいと予想してますが
ChatGPTの進化は「マイコンの世界ママ」の老人の予想を遥かに
超えてるんですかね? マイコンの世界ママでもない単なる勉強嫌いのくせに
ホンマこの老害は老害らしい >>31
>コロンの付いたhfsパスではapfsコンテナを通過できなくてPOSIXに変える必要があるんだけど、
違うんじゃね
MacOSXになった頃から、MacOSXのAPIはPOSIXパスのばかり、HFSパスを受け取れるのはMacOSの頃のAPI(Carbon)だけだったような
aliasはMacOSの頃のAPIなので、名残でHFSパスの方になるという。ファイルシステムは無関係で、APIの問題。AppleScriptはまた別の問題でもある
間違いは素直に認めような。気持ち悪いw >>36
>学習するデータ
ああ、AIのか
トンチキなレスだったな。まあ似たようなもんだがw >>37
お前それだけツラツラ書いときながら馬鹿だろ…
>MacOSXになった頃から、MacOSXのAPIはPOSIXパスのばかり、HFSパスを受け取れるのはMacOSの頃のAPI(Carbon)だけだったような
path to meは一体何だよ(笑)venturaでも稼働するぞ
>aliasはMacOSの頃のAPIなので、名残でHFSパスの方になるという。ファイルシステムは無関係で、APIの問題。AppleScriptはまた別の問題でもある
エイリアスだけじゃねーぞ、お前一体何食ったらそんな脳みそ小さくなるんだ 以前の私は、掌田 津耶乃氏の書籍でAppleScriptの
勉強をしていた時期もありますが、2002年以降日本語での
書籍が消滅して、私のような素人がAppleScriptを学ぶのは
難しくなってきたと感じておりました。しかしChatGPTが >>22 の
ような見事なスクリプトを作成する時代が来たので
「単なる勉強嫌い」でもAppleScriptに触れる機会が
増えそうです。 >>39
「もちろん」AppleScriptもMacOSの頃からなので、方々でHFSの名残はある
aliasは端的にMacOSの頃のAPIを「使うしかない」という代表
「AppleScriptはまた別の問題でもある」はそういう意味だよ
レスの趣旨は端的にはファイルシステムなんて関係ないよ、何言い出してるのってってことなんだがw >>41
>HFSの名残
HFSパス形式の名残
それもある意味単なる文字列でしかなかったり。そうでなかったり
>何年前のmac使ってるねんパス書いてみーや
と言っていたくせにw単なる 動かしてみーや ではなく
明らかに間違いかあえてミスリードする根性悪だな
前者だったら後のレスが根性悪すぎでどっちにしろ根性悪だなw 前書き。
そんだけ連投しといて書いてる事が何1つの意味が無いのはあんたの特技か。
落ち着ついてよく読んでよく"考えて"書け。
初めて見たぞ、全部が全部間違えてるなんて
重複もあるけど一つ一つ書くからね
>>37
>carbonだけだったような
>>39で書いた通りhfsパスで取得するライブラリが残ってます。
と言うかposix指定しないと基本的にhfsパスです。
>>41
>「もちろん」AppleScriptもMacOSの頃からなので、方々でHFSの名残はある
名残ではなく下位互換。
>レスの趣旨は端的にはファイルシステムなんて関係ないよ、何言い出してるのってってことなんだがw
ExFatはPOSIX pathプロパティのみ受け付けます。
>>42
>HFSパス形式の名残
下位互換です。関数によってhfsパスを要求する事があります。(特にNS系)
>前者だったら後のレスが根性悪すぎでどっちにしろ根性悪だなw
結果彼はventura(veanturaだから私の知らないosかもしれません)のapfsに見事hfsパスを書きました。
初志貫徹ぷりが良いところです。あなたの様な気持ち悪さが無いのがものすごく好きになれそうです >>43
>>carbonだけだったような
>>39で書いた通りhfsパスで取得するライブラリが残ってます。
と言うかposix指定しないと基本的にhfsパスです。
path to me って拘るが、それも単にAppleScriptの話だろうが。ライブラリ??
API=OS APIの話をしてるんだが。ファイルシステムの話を言い出してるのにわからないのか。Carbonって言われてもわからないようなのか...??
AppleScript -> OS API -> ファイルシステム
HFS形式/POSIX形式をどう扱うかはAppleScriptの中での話でしかない、AppleScriptの実装がどのOS APIを使うかだが、MacOSXの主流はPOISX形式でしかないってこと。AppleScriptの実装で場合によってはHFS形式/POSIX形式相互変換もしてるだろう
もちろんHFS形式とPOSIX形式の変換をするAPIはあるかもね(使ったことはないけど)
APFSが出る前、HFSが出る前からの話でファイルシステムなんて関係ない、MacOSXの主流はPOISX形式って話での話だからな
>hfsパスを要求する事があります。(特にNS系)
>特にNS系
特にNS系????あったっけ。単なる互換性の極一部ではなく??なに?
(NS = NeXT Step だよ。イミフw)
名残でもあるな。ScriptEditorの結果表示は別にPOSIX形式で表されて何も困らないだろう
いや、今時、HFS形式ではほぼあんま書かんだろうから(お前もそう言ってるようだけど)
>結果彼はventura(veanturaだから私の知らないosかもしれません)のapfsに見事hfsパスを書きました。
なに言い出してるの??
「彼」は書いてないだろうし、そもそもそこの文が何を言い出してるのか全くわからんわ
気持ち悪すぎwww >>44
>APFSが出る前、HFSが出る前からの話でファイルシステムなんて関係ない、
APFSが出る前、HFSしか(?)の頃からの話で、ファイルシステムなんて関係ない、 >>44
しっかり読んだら只の口ごもりな愚痴やん。
お前マジで何しに来たん? >>46
口ごもりwww
ながーくなるからある程度「知ってるだろう」と言う前提になるだけだよ
トンチンカンなこと言ってるから違うよってのと、なんか無茶苦茶絡むから違うよって言ってる。根性と絡み方がキモいってお話をしてるんですけどw
でさー、ちょっとマニアックな調査しようとして、同じようなスクリプトを再度書いてたんだわ
そしたらさー、fileもaliasも無くても動いてしまったんだわぁ
wwww
>>32もそういうことだったのね
いや、本当に、>>30はfileとaliasを付けた外したで明らかに動く動かなかったんだけど
なんかあるなあwなんなんかわからんけど。まあ、確実にはfileとaliasは付けましょうってことで
(なんか色々残念だったなwwwww) >誰かさんの誇らしげな書き込みがどんな転末を迎えるか楽しみだったのにw
www ついていけなくなって爆発して消えるのもいつものこと どうせステレオタイプとか妄想人は救われないから
気づいたら距離置くわ 自覚のない無知が知ったかで妄想ばら撒いただけ
馬鹿の典型 時間を無駄にした老人とAI信奉者と連投妄想奇人とよりどりみどり 人をバカにしちゃいけないよその行為がmacを使うヤツは愚か者だと紹介していることになる まるでmacではない何か、なんでもいいが、ではそんなことは無いような言いよう
この頭の悪さはいったい 一定の悟性持ってなきゃ扱いは最低なのは普通でしょ
学習しなと促した結果が未成熟AIと連投に縋ったんだから 前スレでVenturaのシステム設定でpaneが使えなくなってるって書いたけど最新13.3.1だと使えるようになってる
ただ書き方はちょっと変えないといけない
tell application id "com.apple.systempreferences"
--set current pane to pane "com.apple.settings.PrivacySecurity.extension" --これだとエラーになる
set current pane to (first pane that id is "com.apple.settings.PrivacySecurity.extension")
end tell 配列listXには、複数のフォルダーのフルパスが登録されてます。これらのフォルダーを
すべてcolumnViewOptionsで開きたいのですが、次のスクリプトだと失敗します。
ご指導いただけると幸いです。(macOS: 13.3(22E252))
var finder = Application('Finder');
finder.Prerences.foldersOpenInNewWindows = true
finder.Prerences.columnViewOptions = true
listX.forEach(function(element){
fullPath2 = Path(element);
finder.open(fullPath2);
}); >>66
気づいていると思うけど
finder.Prerences.❌
finder.Preferences.⭕
それにjavaはここじゃ無いよ >>66
finder.finderPreferencesな。ちゃんと用語説明に書いてあるから。
だが結局は>>69の通りr/o >>67-70
ご指導、ありがとうございました。
>それにjavaはここじゃ無いよ
jxaは、ここのスレッドでよろしいでしょうか? java java 言ってるけど、javaとjsは別物だからな
それにjs関係のスレで聞く方が内容的にスレ違いなんで聞くとしたらココでしょ 本当はAppleScriptでやりたいのに、AppleScriptでサポートせずJXAに丸投げのもあるし、AppleScriptでJXA書ける呼べるからなあw
言語が違うだけでやりたい本質は同じだよね do shell script "tail ..." do shell script 使わずに AS のみで tailを取りたい
before 使えば1行目取れるから最終行なんとかならん AppleScriptで位置を指定するときに負数の場合は後ろからというのは何のときだったかなあ
そゆことでしょ。何のときだったけ ああ、thru の時か、これでいいんじゃないの??
何に使いたいのかさぱりだから、これではダメかも知れんが あ、thru だけじゃなく、普通の位置指定でもだな
位置指定でマイナスは後ろか。thruはそれに則ってるだけとも言えるか 追加さてれ行くファイルの差分を取りたいんです
無限ループで飲み込むのにdo shell script使ってます
ASで直接お尻から読めたら速くなりませんか イマイチ何したいのかわからんw
速くなるかもしれないしならないかもしれない
読むファイルのサイズ、およびファイル数、差分判定のステップ数によるだろうしな ああ、追加されていく行 なのか
だったら、元のファイルの バイト数 以降のを read で読めばいいだけのような、後ろからとはちょっと違うような。元のはバイト数ではなく行で管理保存してるとかか
シェルスクリプトでもそう変わらないような read f from eof to -10 using delimiter "
"
バイト単位しか取れません、行で取りたい 行で取りたい時点で、ファイルの最初から読まなければならない
readで全て読んでその後でもそれほど変わりはないだろう。
バイト単位ならまだ読み飛ばしはできる、効果は顕著にもなる期待はできるがな >行で取りたい時点で
(先頭からの)行番号行数を指定したい時点で
が、より正確か
後ろから何行文ファイルから読むというのは逆に面倒なのでサポートしてなくても何ら不思議ではないな > from eof to -10
なんでこんな少量ぽっち読んでんの、ていうか値の根拠はなに
毎度小出しな感じがしてなんかイマイチ それはさすがに単なるテストだろってわかりそうなもんじゃないの
10行分取れなかった、10バイトだったってだけでしょ
それで行単位で指定できるのかの確認はできるんだから、何をつっこんでるんだかイマイチ Script Editor の Library から見る説明では、明確に byte と書いてるのは for でしかない(関連性ある for from to で)が、
>>84のではちゃんと逐一 byte って書いてるね。書いてるんだからそうでしかないのはまあ当たり前かな >>89
俺にはわからん、ろくに説明なしじゃ
わからんから tail -f ぽいの。欲しいのと全然違うだろうけど
a.scptとして保存したらターミナルで osascript a.scpt /var/log/system.log 等
property LINEMAX : 2048 -- sysctl user.line_max
global lastpos
on run argv
set lastpos to 0
set f to POSIX file (item 1 of argv)
repeat
set ll to getnewlines(f)
if ll is not {} then
repeat with l in ll
log l
end repeat
else
delay 1
end if
end repeat
end run
-- 続く -- 続き
on getnewlines(f)
if lastpos = 0 then
set eofpos to get eof f
if eofpos > LINEMAX * 11 then
set pos to eofpos - LINEMAX * 11
else
set pos to 1
end if
set ll to read f from pos using delimiter "
"
set lastpos to eofpos
if (count of ll) > 10 then
set ll to items -10 thru -1 of ll
end if
else
set eofpos to get eof f
if eofpos > lastpos then
set ll to read f from lastpos + 1 using delimiter "
"
set lastpos to eofpos
else
set ll to {}
end if
end if
return ll
end getnewlines >>91
ありがとうございます、良いヒントになりました
ループ内のシェル呼び出し減らせそうです
正規表現やワンライナーだけシェルに任せます property kBackwardsReadBlockSize : 1
on openBackwardsBlockReading(theFile)
script instance
property _fileRef : open for access theFile
property _readPos : (get eof of _fileRef) + 1
property _pendingPrevious1stItem : ""
on closeFile()
try
close access _fileRef
end try
set {_fileRef, _pendingPrevious1stItem} to {missing value, missing value}
end closeFile
on readNext()
if _readPos is 1 then return missing value
local readLen, readItems
set readLen to kBackwardsReadBlockSize
if _readPos is not greater than readLen then set readLen to _readPos - 1
set _readPos to _readPos - readLen
set readItems to paragraphs of (read _fileRef from _readPos for readLen)
set last item of readItems to last item of readItems & _pendingPrevious1stItem
set _pendingPrevious1stItem to ""
if _readPos is 1 then return readItems
set _pendingPrevious1stItem to first item of readItems
if (count of readItems) is 1 then return {}
return items 2 thru -1 of readItems
end readNext
end script
return instance
end openBackwardsBlockReading >>95
素晴らしいです、シェル呼び出しの30倍以上速いです、早速使わせて頂きます
シェル呼び出しは負荷が高いのでASで全て表現出来れば良いのですが難しいですね
コマンドプロセス確認の取得方法がわからないので ps aux
不特定行に現れる特定の文言があればエラーにする部分は sed
前後する数値の特定は sed と uniq と perl ワンライナー <= こいつの負荷が高い
ループ内のシェル呼び出し消せたので随分軽くなりました、感謝です 誤った歳の取り方、馬鹿な誤魔化しの人生が透けて見える感じ ヒント出してるのに、コードイメージ出来ないとは、薄っぺらい人生が透けて見える感じ それを本人が気づいてないんだからそのまま
余計な口を開くほど薄っぺらさが出るだけなのにな ぷっ笑 反応速いなー、寂しいんだね
しばらく付き合ってあげようか? そらこんなマイナーな言語のスレに貼り付いて……いないな Venturaで
システム設定.app>一般>ストレージ>すべてのボリューム
を開くスクリプトって可能でしょうか >>107
tell application "System Events" to get every disk ありがとうございます
>>108さんのアドバイスで解決しました
頑張る、なんてコマンド、リファレンスのどこにも書かれていない...(´・ω・`)
on run {input, parameters}
tell application "System Settings"
activate
reveal pane id "com.apple.systempreferences.GeneralSettings" -- works as expected
delay 1
tell application "System Events"
tell process "System Settings"
click button 3 of group 1 of scroll area 1 of group 1 of group 2 of splitter group 1 of group 1 of window "一般"
delay 4 --接続している外部機器がスリープしている場合、すべてのストレージ機器がウェィ苦するまでに要する時間にする
click button 1 of group 1 of scroll area 1 of group 1 of group 1 of group 2 of splitter group 1 of group 1 of window "ストレージ"
end tell
end tell
end tell
end run
ショートカット化して「cmd-F19」で起動可能にして便利になたよ(`・ω・´) JavaScript(JXA)をAutomatorで効率的に実行する方法についての
質問です。現在は同じ内容のJavaScript(JXA)を
「ライブラリー==>JavaScriptを実行」で複数回
次のようにAutomatorに書き込んでいます。
function run(input, parameters) {
[50行の同一のJXA]
return input;
}
この[50行の同一のJXA]を外部ファイルに書き出して,それをAutomator
から実行する(呼び出す)方法はございますか?
なお「同じ内容のJavaScript(JXA)」の前後には,Automatorで
JXA以外のコマンドを実行しております。 ご教示ありがとうございます。(1)フォルダーを作成し:
mkdir ~/Library/Script Libraries/
(2)そこにQuickTimeを制御するplayQt.scpt起き
function playMov() {
quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
途中省略
}
(3)Automatorの方には次のようなJXAを書き込み
function run(input, parameters) {
toolbox = Library('playQt');
toolbox.playMov();
return input;
}
Automatorを実行すると,「Automatorが予期しない理由で終了しました」となりエラーが発生しました。
試しに(2)のスクリプトを次のように実質空にしても
function playMov() {
;
}
同じエラーメッセージが発生するので,(3)に問題があるようです。 (3)の中の2行は、Automatorでなしに、スクリプトエディタ上では動くの?
toolbox = Library('playQt');
toolbox.playMov(); >>115
>スクリプトエディタ上では動くの?
スクリプトエディタ上で(3)を実行すると
「スクリプトエディタが予期しない理由で終了しました。」と
エラーメッセージが表示され,クラッシュします。
2行目のtoolbox.playMov();を削除して
toolbox = Library('playQt');だけを実行すると
クラッシュはせず,エラーメッセージも表示されませんが
(予想通り)何も起こりません。 >>113
ここに紹介されているtoolbox.scptをコピペして
スクリプトエディタから,同じく紹介されている:
toolbox = Library('toolbox')
toolbox.log('Hello world')
を実行しても,「スクリプトエディタが予期しない理由で終了しました。」
と表示されて,クラッシュします。
どこかで致命的なミス・思い違いをしているかもしれません。 JXAの実行環境がぶっ壊れてるのかも
作りかけのJXAスクリプトであっけなくクラッシュしてしまうことは時々あるけど、今回のスクリプトは間違ってるわけでなし、うちでは動く ご報告
別OSで試してみたらクラッシュしたw
どちらも古いけど
High Sierraでは動く
Catalinaではクラッシュ >>120
ありがとうございます。家に帰り次第,試してみます! >>122
「実効専用」の「scptd (Script Bundle)で保存」して
見事,動きました!!! Ventura13.4.1では
「実効専用」のチェックボックスを
チェクしないと,動かないようです。 (2)のJXAで,動画ファイル/Users/taro/13.mp4を開こうとすると,
(1)「書類“13.mp4”を開けませんでした。
このファイルはQuickTime Playerと互換性がありません。」
というエラーが表示されます。
(2) quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
result1 = quickTimePlayer.open("/Users/taro/13.mp4");
しかし(2)を実行する直前に:
(3) この動画ファイル13.mp4をQuickTime Player.appで開き
次にQuickTime Player.appを終了(Quit)する
作業を行い,その後に(2)を実行すると,(1)のエラーは表示されずに
正常に動画13.mp4が再生されます。
ご教示いただきたいのは,(3)の作業を行わずに,直接(2)の
ようなJXAだけで正常に動画13.mp4を再生する方法です。
よろしくお願いします。 >>124
>quickTimePlayer.open("/Users/taro/13.mp4");
quickTimePlayer.open(Path("/Users/taro/13.mp4"));
JXAでファイルパスは単なる文字列表現で済ますのではなく、Pathで明示した方がいいだろう 変数が 0 なら 1 を代入するスマートな方法ある? try
A * 1
on error
set A to 1
end try
---
item ((A / A) + 1) of {1, A}
set A to result 結局ベタが一番な気が
if x is 0 then set x to 1
x = x === 0 ? 1 : x; Dockから特定のアプリを削除
Dockに特定のアプリを登録
これわかんねー DockもAppleScript対応して欲しいもんだ SonomaでNight-shiftをapplescriptで実行する方法ご存知ありませんか?
https://github.com/ravicious/toggle-night-shift
これは試してみましたがダメでした。
本当は「カラーを反転」の状態でNight-Shiftをやりたいのですが
デフォルトではNight-Shiftで自動的にカラー反転が戻ってしまいます。
そこでカラープロファイルを2つ用意してトグルするともう一度反転が起こって
Night-Shiftとカラー反転を両立できるところまで分かっているのですが、
それをスクリプトで実行したくて質問したものです。 GUI scriptingでコントロールセンターを操作するとか ご返事ありがとうございます。
Python は無知ですのでハードルが高そうですけど試してみます。 そこのグレースケールを操作するところの話、JXAで
var bundle = $.CFBundleCreate($.kCFAllocatorDefault, $.NSURL.fileURLWithPath('/System/Library/PrivateFrameworks/UniversalAccess.framework'));
var UAGrayscaleSetEnabled = $.CFBundleGetFunctionPointerForName(bundle, $('UAGrayscaleSetEnabled'));
ObjC.bindFunction('UAGrayscaleSetEnabled', ['void', ['bool']]);
$.UAGrayscaleSetEnabled(true); Night Shiftの設定、JXAで
ObjC.import('CoreBrightness') が使えなかったんでこんな風にしてみた
合ってんだか合ってないんだか
ObjC.import('objc');
$.NSBundle.bundleWithPath('/System/Library/PrivateFrameworks/CoreBrightness.framework').load;
$.CBBlueLightClient = $.objc_getClass('CBBlueLightClient');
var client = $.CBBlueLightClient.alloc.init;
client.setEnabled(true); システム環境設定を開かずに優先する言語を逆順に入れ替えるJXA一行
$.NSLocale.setPreferredLanguages($.NSLocale.preferredLanguages.reverseObjectEnumerator.allObjects)
普段は英語を優先してて日本語にすることもあるものの、毎度システム環境設定を開いて入れ替えるのが面倒になった
なお10.13 High Sierraではメニューバーの時計の表示は(システム環境設定を開いて変更したときのように)連動して変わってくれないのが難点 >>134
>SonomaでNight-shift
画面の明るさの話題が出たので関連質問です。
スクリプトエディター.appの真っ白な背景色を
変更する方法などはございますでしょうか?
システム設定>アクセシビリティ>カラーを反転
だと,スクリプトエディターはダークになりますが
他のダークモード対応のアプリ・画面が白く輝き
目が疲れてしまいます。 Script Debugger 8 試したら
8でDark Mode対応
試用期限20日後は"lite"モードになって使える > 試用期限20日後は"lite"モードになって使える
Dark Mode対応がどうなるかは不明 存在を知りませんでした! ここを見ると:
http://piyocast.com/as/archives/tag/script-debugger
背景が黒にできるので,これを使います!
貴重な情報をありがとうございます。 ターミナルで
printf 'あ' | pbcopy -pboard find
ってやると検索文字に入るのにdo shell scriptだと入らないのなんなん 自決
これで逝けました
do shell script "export LANG='ja_JP.UTF-8'; printf 'あ' | pbcopy -pboard find" JXAで、ObjC.import('signal')すると、定数宣言されてるsys_signame(やsys_siglist)が見えそうなんだけど、$.sys_signameでクラッシュしてしまって(Segmentation fault: 11)何もできない
どうにか中の文字列を読めないか悩んでたのがとりあえず解決したので記録(元々これ使って何がしたかったって訳でもなく、import関係なくなっちゃったけど)
結論としては、dlsym()の戻り値を本来の'void*'から'void**'に変えてみるとポインタが指す先の文字列を読めた('void*'のままだとポインタそのものは見えるけど、その先はどうにもできなかった)
なお、このimportで参照されるのは/System/Library/PrivateFrameworks/JavaScriptAppleEvents.framework配下、BridgeSupportCache下signal.plistで、sys_signame(やsys_siglist)のtypeは[32*]
元となるsignal.hでの宣言は
extern __const char *__const sys_signame[NSIG]; 等、内容は https://opensource.apple.com/source/Libc/Libc-1244.50.9/gen/FreeBSD/siglist.c.auto.html のように
const char *const sys_signame[NSIG] = {
"Signal 0",
"hup", /* SIGHUP */
"int", /* SIGINT */ 等、これは/usr/lib/system/libsystem_c.dylib内にある 続き
読み出し例:
ObjC.bindFunction('dlopen', ['void*', ['char*', 'int']])
ObjC.bindFunction('dlsym', ['void**' /* 本来は 'void*' */, ['void*', 'char*']])
libref = $.dlopen('/usr/lib/libc.dylib', 2 /* RTLD_NOW */)
ptrref = $.dlsym(libref, 'sys_signame' /* または 'sys_siglist' */)
strs = []
for (i = 0; i < 32; i++) {
str = ''
for (j = 0; ; j++) {
if (ptrref[i][j] == 0) {
strs.push(str)
break
}
str += String.fromCharCode(ptrref[i][j])
}
}
strs.forEach((str, i) => console.log(i, str))
結果:
/* 0 Signal 0 */
/* 1 hup */
/* 2 int */ 等
他にも似たようなのあるけど、import用の.plistって、.hから機械的に変換、生成してるだけで、簡単に使えないのも混ざってるぽい 今更ながら前スレ https://egg.5ch.net/test/read.cgi/mac/1491018171/669 のJXA版
ObjC.import('AppKit')
ObjC.import('IOKit') // NX_KEYTYPE_SOUND_UP, etc.
ObjC.import('objc')
var fkey = $.NX_KEYTYPE_SOUND_UP
function fkeydown(fkey, down = true) {
var nil = $()
var flags = down ? 0xa00 : 0xb00
var event = $.NSEvent.otherEventWithTypeLocationModifierFlagsTimestampWindowNumberContextSubtypeData1Data2($.NSSystemDefined, $.NSZeroPoint, flags, 0, 0, nil, 8, ((fkey << 16) | flags), -1)
// $.CGEventPost($.kCGHIDEventTap, event.CGEvent)では動かない。無視される(システムログにエラー'Invalid event'が出る)か、クラッシュする
$.CGEventPost($.kCGHIDEventTap, event.performSelector($.sel_registerName('CGEvent')))
}
fkeydown(fkey)
fkeydown(fkey, false) // fkeyup
時々思い出しては解決できずにもやもやしてたけど、これでどうにか気が晴れた MBPが壊れて買い換えて大幅に環境が変わったらAppletが動かなくなってた。色々影響あるのかな? すいません独り言の愚痴でした 再保存、Script Editorで開いて保存しなければ動かないってあったな iTermで現在のフォルダ名を記述するスクリプトを作りたいのですが
https://daeudaeu.com/finder-terminal/
を参考に下記を実行してみましたが
動作してくれません。
どなたか解決方法ご存知ありませんか?
iTermがデフォルトのTerminalでなくても実行できるようにしたいのですが。
on run {input, parameters}
tell application "Finder"
set hfsCurrentFolder to insertion location as Unicode text
set currentFolder to get POSIX path of hfsCurrentFolder
end tell
set command to "cd " & currentFolder
tell application "iTerm"
do script command
activate
end tell
end run iTermの用語説明を調べるなりhttps://iterm2.com/documentation-scripting.html調べるなりした方がいいと思うけど
do scriptってTerminalの用語じゃないの 見たところcreate tabかcreate windowにcommand "command"あるけど、それを実行してもsession終わって閉じちゃうようだし、write text "text"の方かな
create window with default profile
tell current session of current window
write text "cd ~/Desktop"
end tell
とか ご教示ありがとうございます。
下記を試してみましたが上手く行きませんでした。
mycommandをテキスト化できていないと思うのですが。
----------------------------------------
on run {input, parameters}
tell application "Finder"
set hfsCurrentFolder to insertion location as Unicode text
set currentFolder to get POSIX path of hfsCurrentFolder
end tell
set mycmd to "cd " & currentFolder
tell application "iTerm"
create window with default profile
tell current session of current window
write text mycmd
end tell
end run tell と end が対になってないじゃん
それに、動作してくれません、上手くいきませんじゃなくて、エラーメッセージちゃんと書かないと
それと、いきなり組み込むんじゃなくて、あの程度なら、外から渡す変数もないようだし、スクリプトエディタで確認した方がいい
すまん、文句しか出ないw ありがとうございます!
end tell を追記したら上手く行きました。