本ブログの更新は停止しています。更新は新しいサイトの Travellers Tales で行なっています。

月 - 2月 13, 2006

AppleScript Studio での Universal Binary 化


拙作の PingTrackback という AppleScript Studio で作ったトラックバック送信用のツールがあるのですが、これをユニバーサルバイナリ化しようと思ったら、ちょっとつまづいたので、やり方をメモっておきます。

一般的には Xcode で作ったプロジェクトは、「ビルド対象アーキテクチャ」のところで、

□ PowerPC
□ Intel

の両方にチェックするだけで、Universal Binary になると、Apple は簡単に説明しています。(もちろんコードの書き方によっては、うまくいかない場合も多いのですが)

AppleScript Studio で作ったソフトウェアはどうなんだろう?と思って、PingTrackback でやってみたところ、「Intel」にチェックを入れただけではユニバーサルになりませんでした。

で、検索してみると、Apple の開発者用メーリングリストのログに答えを発見。以前の Xcode プロジェクトから引き継いでいるプロジェクトに関しては、「Intel」にチェックを入れるだけでなく、ターゲットをアップグレードする必要もあることがわかりました。文字で書いてもわかりづらいので、以下にスクリーンショット付きで、手順を紹介してみます。

1) SDK の確認

基本中の基本ですが、SDK が Universal であることを確認します。




2) ビルド対象アーキテクチャで Intel にチェックを入れる

WWDC なんかでは、これだけであなたのアプリケーションは Universal になっちゃうんだよ!みたいな宣伝がされていますね。;-)




3) ターゲットのアップグレード

今回必要だったのが、この手順。



この後にビルドしたら、ビルド時に何やら警告はいっぱいでたけど、ビルドしたアプリケーデョンは「情報を見る」で、(Universal) と表示されるようになりました。

# とはいうものの、ビルドしてみただけで、ちっとも機能改善・追加のほうは手つかずなのですが‥‥。

以上、ここでは AppleScript Studio のプロジェクトの例として取り上げましたが、普通の Cocoa アプリケーションでも同じなんじゃないかな (試してないけど)。

Posted at 01:15 AM       Permalink       Hatena Bookmark

木 - 2月 2, 2006

Mail.app で送信済みメールにルールを適用する


Mail.app のルールは、受信するメールにしか適用されません。しかし、送信メールにもルールを適用して、メールを整理したいことは多いと思います。

実は自動でなければ、送信済みメッセージにもルールを適用する方法はあります。Mail.app の「メッセージ」メニューに「ルールを適用」という項目があります。これを選ぶと、そのとき選択しているメッセージに対してルールを適用してくれます。

ということは、送信済みメールボックスの中のメッセージをすべて選択して、「ルールを適用」すればいいのですが、これを毎回やるのは面倒くさいので、とりあえず AppleScript を使って、一連の動作を1回でできるようにしたのが "ApplyRules.scpt" です。

GUI Scripting を使っていますので、「システム環境設定」の「ユニバーサルアクセス」において「補助装置にアクセスできるようにする」をオンにしておく必要があります。

また、標準のキーボードショートカットを前提にしているので、キーボードショートカットをカスタマイズしている場合は動きません。

やっていることは以下の一連の動作です。これに含まれるキーボードショートカットをカスタマイズしていなければ問題ありません。
  1. メールボックス > 移動 > 送信済み (command + 4)
  2. 編集 > すべてを選択 (command + A)
  3. メッセージ > ルールを適用 (command + L)

送信済みメッセージ用のルールの設定には、ちょっと注意が必要です。下手に設定すると、普通にメールを受信したときにも適用されてしまうからです。

以下の画像は、メーリングリスト (Yahoo! Groups) 宛に送ったメールをゴミ箱に移動するルールの設定例です。メーリングリスト宛に送ったメールは自分にも配信されてくるため、送信済みのメッセージは重複してしまい無駄です。



ここで、条件を
To yahoogroups.jp で終わる

だけにしてしまうと、受信するメッセージもゴミ箱に移動してしまいます。そこで、
Received from を含まない

という条件を追加しています。「以下のすべての条件に一致した場合」に変更しておくのを忘れないで下さい。

Received は標準ではルールの条件に含まれていないので「ヘッダリストを編集…」で、Received を追加する必要があります。送信済みメールボックスにあるメールには、この Received は付いていないので、それによって受信メールと送信メールを区別しています。Received を使わなくても他の指定のしかたも工夫次第でできます。

上の設定例では、実際にルールが適用されたメッセージを区別するために、ゴミ箱に移動するだけでなく、メッセージに色を付けるように設定しています。

なお、スクリプトを実行してもうまくルールが働かない場合は、お使いのマシンの実行速度のために、スクリプトの実行のタイミングが合っていない可能性があります。その場合は、スクリプトを開いて、冒頭に書いてある
property sec : 3

の 3 を少し増やしてみて下さい。単位は秒です。

ここで配布している "ApplyRules.scpt" はスクリプトメニューにインストールされるようになっていますが、いちいちスクリプトメニューから実行するのは面倒だという方もいるでしょう。

その場合は、Butler はものすごく便利!に書いたように、スクリプトにショートカットを割り当てるのも手です。

また、常に Mail.app を起動しているなら、1日1回とかの頻度でスクリプトを自動的に実行する方法もあります。"AppleRules.scpt" をアプリケーション形式で保存し直して、cron で実行させます。cron の設定ファイルを直接いじるのは未経験の人にはちょっと難しいかもしれませんから、CronniX のような cron 設定ユーティリティを使うとよいでしょう。

Posted at 01:58 AM       Permalink       Hatena Bookmark

AppleScript の日本語表示の文字化け解消法


これはきっと OS X の AppleScript のバグなんだろうけど、display dialog なんかで日本語のメッセージを表示させようとすると、文字化けしてしまいます。

"Title+URI+Text.scpt" 用に AppleScript で日本語のインストーラを作ったのですが、確かこの文字化けを回避する方法があったよなーと思って検索したら、やっぱりありました。

AppleScript for OS X - 日本語の文字化け

スクリプトを保存するときに「アプリケーションバンドル」にして、アプリケーションのパッケージの中の info.plist を編集すればよいのです。
「<string>English</string>」を「<string>Japanese</string>」

にすればよいです。

Posted at 01:22 AM       Permalink       Hatena Bookmark

水 - 2月 1, 2006

Safari で URL とタイトルをクリップボードにコピー


Safari で表示しているウェブページの URL とタイトル、および選択テキストをクリップボードにコピーする AppleScript "Title+URI+Text.scpt" をアップデートしました。

自分で言うのもなんですが、これめちゃ便利ですよ。自作したものでは一番使用頻度高いかも。Butler と組み合わせて使うと、やめられません。

Firefox では似たような機能拡張として、Copy URL+ というのがあります。

今回の変更点は、以下の通りです。
  • 選択テキスト取得時に小さなウインドウが表示されていたのを、表示されないようにした
  • インストーラを Tiger (Mac OS 10.4) 対応させた
  • 日本語版のインストーラも作った

スクリプトメニューから選択して使うのが、オーソドックスな使い方ですが、工夫次第でその他の呼び出し方もできます。

コンテキストメニューから呼び出す場合は、Miko さんちのホームページにある AmScriptsCMX を使うとよいでしょう。

# ところで、Contextual Menu の日本語表記は、「コンテキストメニュー」と「コンテクストメニュー」のどちらが正しいのでしょう?アップルのサイトには両方の表記があるみたいですが。(統一しきれてない?)

キーボードショートカットで呼び出す方法もあります。私がいちばんお勧めする方法です。AppleScript 等にキーボードショートカットを割り当てるユーティリティはいくつかあるのですが、いろいろ使ってみて、私は Butler がいちばんだと思います。別記事にて Butler を使った方法を説明します

Posted at 12:43 AM       Permalink       Hatena Bookmark

火 - 4月 19, 2005

Safari 関連 AppleScript を 10.3.9 対応にアップデート


OS 10.3.9 でバージョン 1.3 になった Safari ですが、変更が大きく、影響を受けるツールが多いようです。当方で公開しているスクリプトも、選択テキストを取得できなくなっていたので、なんとか解決してみました。

Safari 1.3 で外部からの JavaScript 呼び出しに対する脆弱性に対処したそうで、これまで AppleScript 中で window.getSelection を呼び出すことででできた選択テキストの取得ができなくなっています。

回避策を考えたのですがうまい方法がなく、多少強引な手法ですが、選択テキストを含む小さなウインドウを表示させ、そのウインドウのテキスト全体を AppleScript で取得させてみました。

アップデートしたものは以下で公開しています。

Software: Script Menu Items

今回アップデートしたスクリプトは3つです (バージョン 1.2)。
  • Title+URI+Text.scpt
  • Blockquote.scpt
  • Link+Blockquote.scpt

OS 10.3.9 にアップデートしていない場合は差し替える必要はありませんが、新しいスクリプトは 10.3.8 以前でも問題なく動作します。10.3.8 以前を使った場合は、window.getSelection が普通に使えるので、テキスト取得用の小さなウインドウ表示することはありません (バージョン 1.1 と同じ動作)。

今回のスクリプトは 10.3.9 上では強引なことをしているので、環境によっては動かないかもしれません。その場合は、不具合報告をよろしくお願いいたします。

追記
なお、当サイト配布のスクリプトに関係ありませんが、OS 10.3.9 アップデートで Safari で不具合が出ている場合は、以下を試してみて下さい。
  • ツールを入れている場合 (AcidSearch 等):10.3.9 対応版に差し替える
  • 10.3.9 対応版ツールがない場合:ツールを外す。SIMBL を使うものは怪しい
  • リンククリックがおかしい場合:ICeCoffEE を使っていたら、Safari を除外アプリケーションに
  • Java を使ったサイトが動かない場合:Security Update 2005-002 を当て直す

Posted at 03:15 AM       Permalink       Hatena Bookmark

土 - 4月 9, 2005

デフォルトのブラウザを調べる方法


デフォルトのブラウザは、Safari の環境設定で変更しないといけないわけですが、この情報は、ユーザのライブラリ/Preferences の中の com.apple.LaunchServices.plist に保存されています。それを AppleScript でどう処理すればいいのでしょうか。

英語ですが、AppleScript - Open at URL in a (default) browser window and take focus に情報がありました。

それによると、以下のような感じです。
set defaultBrowser to word -1 of ¬
(do shell script "defaults read com.apple.LaunchServices | grep -C5
E:html | grep -w LSBundleSignature")
set {text:defaultBrowser} to (text of defaultBrowser) as text
tell application "Finder" to set the defaultBrowser to the name of
application file id defaultBrowser as text

ターミナルで defaults read com.apple.LaunchServices を打つとわかりますが、各プロトコルに対応するアプリケーションについては、以下のような2箇所からデータを得られそうです。

LSBundleIdentifier = "com.apple.safari";
LSBundleSignature = sfri;

後者はアプリケーションのクリエータになりますね。上に挙げたサンプルコードでは後者を使ってアプリケーションを特定しています。

しかし、前者の LSBundleIdentifier からもアプリケーションは特定できます。Stuffitの存在確認.scpt にスクリプト例が載っていましたが、Finder に対して、application file id sfri、となるところを、application file id "com.apple.safari" としてもだいじょうぶです。

CotEditor 用 a href タグ生成スクリプトでは、LSBundleIdentifier を使ってデフォルトブラウザを判別しています。

ただし、この方法では一度も起動したことのないアプリケーションに関しては、Finder が情報をもっていないらしく、エラーが出てしまいました。クリエータコードを使っても同じかもしれません。もっとも、デフォルトのアプリケーションを一度も起動していないことは普通あり得ないでしょうから、あまり気にしなくてよいと思います。

以上のような方法を使えば、デフォルトのブラウザに限らず、メーラやその他各プロトコルに対応したアプリケーションは何か調べることができます。

でも、シェルのコマンドでも、AppleScript でもいいから、もっと簡単にデフォルトアプリケーションを調べられるといいんですけどねー。

Posted at 01:30 AM       Permalink       Hatena Bookmark

CotEditor 用 a href タグ生成スクリプト


CotEditor に付属している XHTML 用スクリプトになぜか存在していない、ハイパーリンクのタグを生成するスクリプトを作ってみました。

href 属性にいれる URI の取得のしかたは以下の3通り。

  • 手入力、またはクリップボードから取得
  • ファイルを選択し、相対リンクを取得
  • デフォルトブラウザの最前面ウインドウから取得

技術情報

相対リンクの取得のしかたは、CotEditor 用 img タグ生成スクリプトと同じです。

ブラウザから表示しているページのタイトルや URI を取得する部分は、Safari、Firefox、Internet Explorer に対応しています。

Firefox からのデータ取得方法は、kaoru_ari  さんの「Firefox 版アンカータグを作成する AppleScript 」を参考にしました。

IE については、Internet Explorer AppleScript リファレンスが参考になるでしょう。しかし、IE の AppleScript 用語はどうやって調べたんだろう?

ダウンロード先AppleScript for CotEditor

Posted at 12:53 AM       Permalink       Hatena Bookmark

金 - 4月 1, 2005

CotEditor 用 img タグ生成スクリプト


画像ファイルの縦横のサイズを取得して、height と width 属性に入れたタグを生成するスクリプトです。

AppleScript for CotEditor からダウンロードして下さい。(今回から CotEditor 用スクリプトの専用ページを設けました。)

CotEditor に付属している XHTML 用の <img> スクリプトの代替品としてご利用ください。


技術的なこと

画像の縦横を取得するために Image Events を使っています。今回のスクリプトでは使っていない機能ですが、Image Events を使うと、サイズを取得するだけでなく、画像の変換・加工などいろいろなことが可能です。

参考サイト:
AppleScript で画像を?
Image Events を使う! - [Mac OSの使い方]All About

Posted at 02:05 AM       Permalink       Hatena Bookmark

土 - 3月 26, 2005

CotEditor 用スクリプトアップデート


先日公開した、HTML 用の外部ファイルを取り込むスクリプトをアップデートし、新たに選択部分のファイル名のファイルを CotEditor で開くスクリプトを公開しました。

CotEditor Include

同梱の2つのファイルのうち、Paste Include Tag.applescript の方だけの更新です。

変更点としては、
  • (前回書き忘れたのですが) 読み込むファイルの文字コードは Shift JIS だけだったのを、UTF 8 でもだいじょうなようにした
  • 完全に PageSpinner 互換にした (PageSpinner を使っている人は、ソースを一切書き換えずに、外部ファイルの読み込みが可)
  • その他細かい動作の改善

タグの閉じ忘れ、書き間違い等は、現段階ではチェックしていませんので、ミスがないように注意して下さい。


CotEditor Open Selection

テキスト上で選択したファイル名のファイルを、CotEditor で開きます。(スクリプトを開いていじれば、CotEditor ではなく、デフォルトのアプリケーションで開くようにも改造できます。いずれ別途公開しますが。)

例えば HTML の中に以下のような箇所があったとします。

<link rel="stylesheet" href="../../styles-site.css" type="text/css" />

このスタイルシート、styles-site.css を編集したくなったら、通常は Finder で該当のある場所を開いてファイルを見つけなければいけません。しかし、このスクリプトがあれば、ファイルの場所が書かれた部分 ../../styles-site.css を選択して、メニューからスクリプトを実行すれば、styles-site.css が CotEditor によって開かれます。

実はこの機能も PageSpinner にある機能なんですけどね。


Software: Script Menu Items - For CotEditor からダウンロードして下さい。

Posted at 01:04 AM       Permalink       Hatena Bookmark

火 - 3月 22, 2005

Script Menu 用の AppleScript をアップデート


今まで公開した Safari や iBlog で使う AppleScript をアップデートしました。

今回の変更点としては、以下の通りです。
  • Safari での選択テキストの取得を URI Script から JavaScript に変更
  • インストーラを添付
  • 細かい不具合修正

これまでは Safari で選択したテキストを取得するのに、URI Script によってテキストをコピーするユーザの動作をシミュレートしていたのですが、その方法だと不確定要素が多く、スクリプトがうまく働かないことがありました。今回から、AppleScript 経由で Safari の JavaScript を呼び出すことでテキストを取得しているので、安定して動作するようになりました。

ついでに、今まで公開したものを整理して、公開している AppleScript をまとめたページを作りました。詳しくは下記リンク先を見て下さい。

Software: Script Menu Items

Posted at 03:12 AM       Permalink       Hatena Bookmark














©