Home>History>

2009.06

2009-06-23

2009-06-23T10:48:07+09:00

TerminalCommander 2.0.2

ターミナルでのシェルコマンドの実行を支援するモジュールです。以下のような、複雑な処理を行いたいときにこのスクリプトはお役に立てるでしょう。

  • ターミナルウィンドウを追跡して、同じターミナルで何度もシェルコマンドを実行したい。
  • シェルコマンドの終了を待ってから、次の処理に移りたい。
  • シェルコマンドを実行するターミナルのシェルを指定したい。
  • ターミナルウィンドウの、色の設定、タイトルの設定、もしくは設定セットを指定したい。

修正点は、

  • Mac OS X 10.5.7 が必要。
  • カスタムタイトルの設定に TerminalControl.osax を使わないようにした。
    • Mac OS X 10.5.7 でターミナル.app のバグが修正された為です。
  • TerminalColors で background color の透明度を設定するときだけ、TerminalControl.osax が必要になります。
  • TerminalCommander に ttyname を追加。
  • タブを別のウインドウに分離したとき、対象とするウインドウを正しく追跡できない不具合を修正。

2009-06-19

2009-06-19T23:01:04+09:00

Mac OS X 10.5.7 の ターミナル 2.0.2

Mac OS X 10.5.7 では、ターミナル.app もアップデートされて 2.0.2 になっていることに気がついた。さらに、以前苦しめられた AppleScript に関するバグが修正されているようだ。

一つ前の ターミナル 2.0.1 では、ウインドウ(もしくはタブ)ごとにカスタムタイトルを設定できなかった。ウインドウ/タブのタイトルを変更したつもりでも、プロファイルのタイトル設定を変更したことになってしまっていた。ターミナル 2.0.2 ではウインドウ/タブ個別のタイトルが設定できるようになっている。

このバグは僕に取ってはかなり致命的で、バグを回避する為にスクリプティング機能追加 TerminalControl.osax を開発した。こいつは、Input Manager みたいにアプリケーションプロセスにコードを侵入させて(基本的にスクリプティング機能追加はそういうもの)、ターミナルの内部のメソッドを実行しちゃう OSAX だ。ハックだから作るのに苦労したぜ。Mac OS X 10.5.7 では、カスタムタイトルの設定に TerminalControl.osax は必要ない。TerminalControl.osax が無いとできないことは、ウインドウの透明度の設定だけ。

バグを直してくれるのはうれしいけど、苦労して作ったものの価値が失われるのは悲しい。まあ、バグ回避が主目的だったからしょうがないけど。

さらに、AppleScript 経由でターミナルタブ個別の設定を変更した時、設定ウインドウを選択するとプロファイルの設定に戻っちゃうバグも修正されているみたい。Mac OS X 10.5.7 のリリースノートには、ターミナルのことなどこれっぽちも書いていないからやんになっちゃうぜ。

TerminalCommander をアップデートして、Open in TerminalTeX Tools for miUnixScriptTools for mi は TerminalControl.osax に依存しないようにした方がいいな。まあ、次のアップデートで。

2009-06-18

2009-06-18T13:52:13+09:00

フォルダに含まれているエイリアスファイルのリンクが壊れていないかどうかチェックする。

指定したフォルダ(サブフォルダも含む)に含まれているエイリアスファイルのリンクが壊れていないかどうかチェックする AppleScript を紹介します。

実行すると Finder で選択しているフォルダの中に含まれているエイリアスファイルをチェックします。オリジナル項目が見つからないエイリアスファイルをダイアログにリストアップしてを表示します。リストダイアログで壊れたエイリアスファイルを選ぶと、 それを Finder で表示します。

僕は、ソフトの配布パッケージを作る時に、CopyMagic を利用しています。CopyMagic はフォルダに含まれているエイリアスファイルをそのオリジナルのコピーと置き換える AppleScript です。ソフトの配布パッケージのテンプレートとなるフォルダを用意して、その中に配布物のエイリアスファイルを入れておきます。パッケージを作る場合は、そのフォルダをコピーして CopyMagic を実行すれば配布に必要なファイルが全部収集されるという寸法です。で、このテンプレートフォルダの中のエイリアスファイルを事前にチェックするために使っています。

コンパイルをするには、ModuleLoaderFinderSelection を用意しておく必要があります。

property parent : proxy() of application (get "ModuleLoader")
property FinderSelection : load("FinderSelection")

on run
try
|main|()
on error msg number errno
if errno is not -128 then
activate
display alert msg message "Error Number : " & errno
end if
end try
end run

on |main|()
set a_picker to FinderSelection's make_for_folder()
tell a_picker
set_prompt_message("Choose a folder containing alias files : ")
set_use_insertion_location(true)
set a_list to get_selection()
end tell
open a_list
end |main|

on open a_list
repeat with a_folder in a_list
find_broken_aliasfiles(a_folder)
end repeat
end open

on find_broken_aliasfiles(a_folder)
set no_originals to {}
set folder_path to a_folder as Unicode text
set folder_path_len to length of folder_path
tell application "Finder"
set alias_files to alias files of entire contents of a_folder
repeat with an_alias in alias_files
try
original item of an_alias
on error
set a_path to an_alias as Unicode text
set end of no_originals to text (folder_path_len + 1) thru -1 of a_path
end try
end repeat
end tell
if length of no_originals is 0 then
display alert "No broken alias files."
return
end if
set a_result to choose from list no_originals with title ("Broken alias files in " & folder_path) ¬
with prompt "Choose items to reveal :" with multiple selections allowed

if class of a_result is not list then return

tell application "Finder"
repeat with subpath in a_result
reveal (folder_path & subpath)
end repeat
end tell
end find_broken_aliasfiles

2009-06-15

2009-06-15T23:04:05+09:00

AppleScriptHTML 2.0.7

AppleScript のソ−スコードを、スタイルを再現する HTML に変換するアプリケーションです。

以下のような特徴があります。

  • スタイルシートファイルを使って、ソースコードのカラーリングを行う XHTML を生成します。
    • スタイル情報がコードのマークアップと分離されているので、後からカラーリングや文字サイズなどの微調整を行うことが容易です。
    • (たぶん)非常にスマートな XHTML を生成します。
  • スクリプトリンク機能
    • XHTML に変換したソースコードをスクリプトエディタで開くリンクを付け加えます。サンプルコードを表示する時に使うと、ユーザーにとっては便利だと思います。
    • ソースコードに日本語が含まれていても正しく動作します。

2009-06-11

2009-06-11T03:38:12+09:00

Putaway Disk Image File 1.1.3

マウントされているディスクイメージボリュームをアンマウントして、そのボリュームのディスクイメージファイルをゴミ箱に入れます。オンラインソフトのインストール作業の後片付けに便利です。

多くのオンラインソフトはディスクイメージファイルとして配布されております。必要なものをコピーした後は、ディスクイメージファイルは不必要になるので、

  1. ディスクイメージボリュームをアンマウント
  2. Finder でディスクイメージファイルを表示させる。
  3. ディスクイメージファイルをゴミ箱に入れる。

という手順で後片付けをされているかと思います。煩雑な作業だと思うのは僕だけでしょうか?Putaway Disk Image File は、上記の作業を一気に行います。

2009-06-07

2009-06-07T12:49:41+09:00

HASEGAWA さん、寄付ありがとうございました。

久々に、寄付を頂きました。47 人目。

お気軽にご意見など頂ければ幸いです。

2009-06-05

2009-06-05T16:39:31+09:00

フローティングウインドウ化したスティッキーメモを作る。

スティッキーズは、とりあえずのデータの置き場として便利です。何かの資料を参照しながらメモを取る時に、フローティングウインドウ化したスティーキーメモをシュパッと開けたら便利だと思いませんか?テンポラリなスクラップブックにもなります。新しいフローティングウインドウ形式のスティキーズメモを作成する AppleScript を紹介します。スティキーズは AppleScript に対応していないので、GUI スクリプティングを駆使しています。AppleScript ユーティリティーで GUI スクリプティングを使用可能にしてくださいね。

スクリプティング機能追加 SmartActivate が必要です。

バックグラウンドで動作させる必要があります。スクリプトファイルとして保存して、スクリプトメニューから実行するか適当なランチャーユティリティー(DragThing とか)に登録して、ショートカットキーで実行してください。

アプリケーションとして保存して使いたい場合は、そのアプリケーションをバックグラウンドアプリケーションにする必要があります。バンドル形式のアプリケーションとして保存して、Info.plist に LSUIElement という項目を追加して 1 と設定してください。

on run
try
|main|()
on error msg number errno
if errno is not -128 then
activate
display alert msg message "Error Number : " & errno
end if
end try
end run

on |main|()
set frontapp to path to frontmost application
set appid to bundle identifier of (info for frontapp)
tell application "System Events"
if not (exists application process "Stickies") then
launch application "Stickies"
end if
tell application process "Stickies"
set frontmost to true
keystroke "n" using command down
keystroke "f" using {command down, option down}
end tell
end tell

activate process identifier appid
end |main|

2009-06-01

2009-06-01T23:24:17+09:00

Finder でコンテキストメニューをショートカットキーで開く。

最近、更新が滞っているぜ。要するに、忙しいということだ。ソフト開発の為のまとまった時間をとる余裕が無い。仕様がないから、小ネタを紹介します。

Windows だと、コンテキストメニューをキーボードから開くことができるよね。キーボードに専用のキーがあるぐらいの厚遇ぶり。Mac OS X では・・・そんなことできないぜ!!。というわけで、Finder でショートカットキーでコンテキストメニューを開く Tips です。

次の AppleScript は、Finder の選択項目に対して、コンテキストメニューを表示するスクリプトです。これをスクリプトファイルとして保存し、何らかのユーティリティー(DragThing とか)に登録して、ショートカットキーを割り当てて実行してください。AppleScript ユーティリティで、GUI スクリプティングを使用可能にする必要があります。いまいち反応が鈍いのが玉に傷。

on run
try
main()
on error msg number errno
if errno is not -128 then
activate
display alert msg message "Error Number : " & errno
end if
end try
end run

on main()
--activate application "Finder"
tell application "System Events"
tell application process "Finder"
--set frontmost to true
set ui to value of attribute "AXFocusedUIElement"
set a_class to class of ui
--return a_class
if a_class is scroll area then
tell outline 1 of ui
set a_row to item 1 of (rows where it is selected)
tell UI element 1 of group 1 of a_row
perform action "AXShowMenu"
end tell
end tell
else if a_class is group then
--value of attribute "AXSelectedChildren" of ui
tell ui
set an_item to item 1 of (UI elements where it is selected)
tell an_item
perform action "AXShowMenu"
end tell
end tell
else if a_class is browser then
tell scroll area 1 of ui
set n_list to count scroll areas
repeat with n from n_list to 1 by -1
tell list 1 of scroll area n
set selected_elements to (UI elements whose selected is true)
if length of selected_elements > 0 then
tell item 1 of selected_elements
perform action "AXShowMenu"
end tell
exit repeat
end if
end tell
end repeat
end tell
--return ui
end if
end tell
end tell
end main