上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

環境
Mac OS X 10.4.11 (PPC; 日本語優先)
BathyScaphe 1.6

BathyScaphe が 1.6 になって、3 ペインでも選択文字列を簡単に取得できるようになりました。

selected text of document 1

これだけで OK。
というわけで久しぶりに AppleScript を書いてみました。

BathyScaphe の選択文字列をテキストファイルに書き出す

set dq to (ASCII character 34) as Unicode text
set bs to «data utxt005C» as Unicode text
set orc to «data utxtFFFC» as Unicode text
set rgx to "/^" & bs & "d{1,4}" & bs & "s名前.+" & orc & "*.*(Mail)*.+投稿日.+/"
--またはこう書いた方が「レス番...名前...Mail...投稿日」の行を見つけやすいかも
--set rgx to "/^" & bs & "d{1,4}" & bs & "s名前:" & bs & "s.+" & orc & "*" & bs & "s(?:Mail)*:" & bs & "s.*" & bs & "s投稿日:.+/"

set rbscript to "if $stdin.lineno == 1; print $_.gsub(/" & orc & "/, ''); else; print $_.gsub(" & rgx & ") { | line |; " & dq & bs & "n" & dq & " + line; }.gsub(/" & orc & "/, ''); end"
--または本文をインデントしたい場合
--set rbscript to "if $stdin.lineno == 1; if " & rgx & " =~ $_; print $_.gsub(/" & orc & "/, ''); else; print ' ' + $_; end; else; if " & rgx & " =~ $_; print $_.gsub(" & rgx & ") { | line |; " & dq & bs & "n" & dq & " + line; }.gsub(/" & orc & "/, ''); else; print ' ' + $_; end; end"

tell application "BathyScaphe" to activate

tell application "System Events"
tell process "BathyScaphe"
click menu item "情報をコピー" of menu "スレッド" of menu bar 1
end tell
end tell

tell application "BathyScaphe"
activate
set the_text to selected text of document 1
set info to (the clipboard as Unicode text)
if not the_text is "" then
set file_path to (choose file name default location (path to desktop folder) default name "res.txt")
set file_path_posixpath to (POSIX path of file_path)
else
return
end if
end tell

set str to (do shell script "echo -n " & quoted form of the_text & " | tr '" & bs & "r' '" & bs & "n' | ruby -Ku -ne " & quoted form of rbscript)
set str to str & return & return & "------------------------------------------------------" & return & info

--'情報をコピー'で得た文字列は最後に改行が入っているので echo -n でちょうどよい.
--UTF-8
do shell script "echo -n " & quoted form of str & " | tr '" & bs & "r' '" & bs & "n' > " & quoted form of file_path_posixpath
--UTF-16
--do shell script "echo -n " & quoted form of str & " | tr '" & bs & "r' '" & bs & "n' | iconv -f UTF-8 -t UTF-16 > " & quoted form of file_path_posixpath

こんな感じで書き出せます。
res1.txt
res2.txt (インデントした場合)

また、これは iTunes でもたまにあることですが、このスクリプトは BathyScaphe 専用のスクリプトメニューからは実行できません。グローバルスクリプトメニュー (メニュー右の時計近くの) からなら動きます。
上記スクリプトの場合だと System Events の

click menu item ...

の行で引っかかっている模様。
ちなみにグローバルな方のメニューは '/Applications/AppleScript/AppleScript ユーティリティ' の設定で表示させることができます。


スポンサーサイト
12/07|AppleScriptコメント(0)トラックバック(0)TOP↑

環境:
Mac OS X 10.4.9 (PPC)
OnMyCommand 1.8.0

OnMyCommand 用です。
以下のリンク先テキストファイルをディスクに保存して、OMCEdit で読み込むと実行できるようになります。
(メニューから読み込もうとしてエラーになる場合は OMCEdit のアイコンにドラッグアンドドロップでいけるようです。)
google_dialog.plist.txt

例えば、

As If a Million AppleScripters Cried Out In Horror (For Four Years) And Were Suddenly Silenced

waffle

という見出しを読んで、「なんだか意味不明。有名な言葉のもじりかな?」と思ったとします。
そうしたらテキストを選択して
sw1.png
コンテクストメニューから「Google で検索 (dialog)」を実行。
こんなダイアログが出るので
sw2.png

適当に編集して検索にヒットしそうな語句を抜き出し
sw3.png

OK ボタンを押してググる。
"As If a Million" "Cried Out In Horror" "And Were Suddenly Silenced" - Google 検索

どうやらスター・ウォーズらしい。

"I felt something, a disturbance in the network, as if a million mac zealots cried out in horror and were suddenly silenced," wrote poster "m50d," an allusion to a quote from the Star Wars movie series.

CIO Asia - Apple faithful learning to like oranges

もうちょっとググってみましょうか。
sw4.png

あったあった。

Ben: I felt a great disturbance in the Force, as if millions of voices suddenly cried out in terror, and were suddenly silenced. I fear something terrible has happened. You'd better get on with your exercises.
フォースに大きな騒乱を感じた。まるで何百万もの声が突然恐怖の悲鳴に変わり、突然静かになったような。何か恐ろしいことが起こったのだ。練習を続けなさい。

スター・ウォーズの鉄人!/スクリプト

あー、オビワンのセリフかー!

といった使い方をします。


06/18|AppleScriptコメント(0)トラックバック(0)TOP↑

環境:
Mac OS X 10.4.9 (PPC)
GNU bash, version 2.05b.0(1)-release (powerpc-apple-darwin8.0)

日本語などを含むパスを osascript -e で AppleScript に渡そうとしてエラーになる場合、何らかの方法で ASCII 文字の羅列に変換したものを AppleScript の中で戻すような書き方をすればいいのですが、パスが複数あるときはその度に変換を行うよりも、改行区切りで戻せるような形で一気に渡してテキストを行単位で処理する repeat 文を実行する方が速いです。
以下のスクリプトの場合、パスとパスの間に %0a が入った形で渡されています。

"~/Desktop/怡红快绿" というフォルダ以下にある JPEG ファイルを再帰的に検索して見つかったものに赤ラベルをつける。
ファイルは UTF-8 で保存。

#!/bin/sh
found_jpgs=$(find ~/Desktop/怡红快绿 -iname "*.jpg" -or -iname "*.jpeg")
escaped_paths=$(echo -n "${found_jpgs}" | ruby -n -e 'require '\''uri'\''; print URI.escape($_)')

osascript -e 'set percents to "'"${escaped_paths}"'"
set pathNames to (do shell script "echo " & quoted form of percents & " | ruby -n -e '\''require \"uri\"; print URI.unescape($_)'\''")
repeat with i from 1 to (count paragraph of pathNames)
set curPath_alias to (POSIX file (paragraph i of pathNames)) as alias
tell application "Finder" to set label index of curPath_alias to 2
end repeat'

osax を使う方法もあるようですがよく知りません。

非英語環境で、とくに Finder 項目に対して AppleScript でなければできないことをしたいときは、osascript よりも最初から AppleScript で書いて、必要に応じて do shell script で sh を呼ぶ方が楽です。複雑なシェルスクリプトをそのまま記述して実行するのは無理だと思いますが。
わかりやすい解説もあるし。
do shell script in AppleScript (日本語)
Technical Note TN2065: do shell script in AppleScript (英語。こっちの方が新しい。読んでないけど)
AppleScript PARK / Introduction (入門。みんなお世話になってる)

えー、あと毎度のことですが一部のブラウザではバックスラッシュが円記号に化けてます。
でもエディタにコピペするとバックスラッシュになるという不思議。
charset に UTF-8 が使えるとこに移転しようかな。。。


06/11|AppleScriptコメント(0)トラックバック(0)TOP↑

環境:
Mac OS X 10.4.9 (PPC)
Safari 2.0.4

Safari のアクティブなウインドウで
http://ブログID.blog数字.fc2.com/blog-entry-数字.html
という URL を開いているときに、そのエントリーに対応した編集ページを開く AppleScript。
管理画面からでは過去のエントリーを見つけにくいときなどに使います。
FC2 ブログにログインしている状態であれば URL を並べ替えて location.href で一発。
しかし最近なぜかログイン状態を長く維持できなくなってしまったため、自動ログインも含めて長めのスクリプトになりました。
※実行する前にスクリプト中の "hogemaru@hage.com" を FC2 ID の自分のメールアドレスに、"password" という部分を自分のパスワードに書き換えておかないとログインに失敗します。

--スクリプトここから
--http://ブログID.blog数字.fc2.com/blog-entry-数字.html
--という URL を開いてから実行。
tell application "Safari"
activate
try
set theURL to (URL of document 1)
theURL
on error
return
end try
set bs to (ASCII character 128)
set aBool to (do shell script "echo -n " & quoted form of theURL & " | ruby -n -e 'print %r|^http://.+" & bs & ".blog" & bs & "d+" & bs & ".fc2" & bs & ".com/blog-entry-" & bs & "d+" & bs & ".html$| =~ $_'")
if aBool is "0" then
set rbScript to "str1 = $_.split('/'); str2 = str1[2].to_s.split('.'); str3 = str1[3].gsub(/[^" & bs & "d]/, ''); print 'http://' + str2[1]+ '.' + str2[2] + '.' + str2[3] + '/' + str2[0] + '/' + 'admin.php?mode=editentry&no=' + str3"
set adminURL to (do shell script "echo -n " & quoted form of theURL & " | ruby -n -e " & quoted form of rbScript)
do JavaScript "location.href='" & adminURL & "'" in document 1
else
return
end if
if not my readyStateComplete(90) then return
if "admin.php?mode=admin" is in (source of document 1) then return
--(*
do JavaScript "location.href='http://id.fc2.com/'" in document 1
if not my readyStateComplete(90) then return
if (name of document 1) does not contain "管理パネル" then
do JavaScript "document.form_login.email.value='" & "hogemaru@hage.com" & "'" in document 1
--hogemaru@hage.com を FC2 ID のメールアドレスに書き換える
do JavaScript "document.form_login.pass.value='" & "password" & "'" in document 1
--password を FC2 ID のパスワードに書き換える
do JavaScript "document.form_login.submit()" in document 1
--*)
if not my readyStateComplete(90) then return
end if
set blogLink to ""
repeat 10 times
set linkCnt to (do JavaScript "document.links.length" in document 1)
repeat with i from 1 to linkCnt
set curLink to (do JavaScript ("document.links[" & (i - 1) as string) & "].href" in document 1)
if curLink starts with "http://blog" and curLink contains "/admin.php?mode=admin" then
set blogLink to curLink
exit repeat
end if
end repeat
if blogLink is not "" then exit repeat
end repeat
if blogLink is "" then return
do JavaScript "location.href='" & blogLink & "'" in document 1
if not my readyStateComplete(90) then return
do JavaScript "location.href='" & adminURL & "'" in document 1
end tell

on readyStateComplete(timeoutValue)
with timeout of 120 seconds
set bs to (ASCII character 128)
tell application "Safari"
repeat 4 times
set theState to (do JavaScript "document.readyState" in document 1)
if theState is "uninitialized" or theState is "loading" or theState is "interactive" then
exit repeat
else
delay 1
end if
end repeat
repeat timeoutValue times
if (do JavaScript "document.readyState" in document 1) is "complete" then
delay 1
return true
else
delay 1
end if
end repeat
do JavaScript "alert('ページの読み込み完了を確認できませんでした。" & bs & "nスクリプトを中断します。')" in document 1
return false
end tell
end timeout
end readyStateComplete
--スクリプトここまで

どうも document.readyState の使い勝手が良くないなあ。
たまに location.href の後にジャンプがなかなか始まらないことがあると移動前のページの complete が返ってしまうし、始まったら始まったで完全に読み込まないうちに complete を返してくる。
大事をとって delay や repeat を使わざるをえないので次の実行に移るまでに無駄な待ち時間が発生してしまいます。
結局、手動でログインしてから実行するのが確実。


06/02|AppleScriptコメント(0)トラックバック(1)TOP↑

環境:
Mac OS X 10.4.9 (PPC)
Quicksilver 1.0b51 (QS.3800)
Bwana 2.1

前回のつづき。

using terms from application "Quicksilver"
on process text anyString

set commName to anyString
tell application "Bwana" to run
tell application "System Events"
repeat while not (exists application process "Bwana")
end repeat
tell process "Bwana"
set value of text field 1 of window 1 to commName
click button "Search" of window 1
end tell
end tell

end process text
end using terms from

これをコンパイル済みスクリプトとして保存したら
~/Library/Application Support/Quicksilver/Actions/
に置いて、Quicksilver を再起動。
何かのドキュメント上で文字列を選択して ⌘esc で Quicksilver を呼び出し、2 番目のペインで上記スクリプトをアクションとして実行すると、(渡された文字列に該当するマニュアルがあれば) Bwana がコマンドのマニュアルページの HTML を生成し、デフォルトブラウザで開いてくれます。


05/10|AppleScriptコメント(2)トラックバック(0)TOP↑
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。