Tue, 01 Feb 2011
スケジュールを組んでMacをスリープから復帰させる方法を知ったのはつい最近だ
朝は目覚まし時計なんかじゃなく優しい音楽で目覚めたい。iTunes.appの自動運転について知識は得た。でもスケジュールを組んでMacをスリープから復帰させる方法が分らなかった。つい最近その方法を知った。恥しいです。
System PreferenceからEnergy Saver、Scheduleってボタンあるやん。でも、これって簡単なんしか作れんやんなあ…以下は、iTunes.app用に作ったAppleScriptです。備忘のため。
set somePlayList to {"クラシック-ドイツ-古典-ハイドン", "クラシック-古典以前-ヘンデル・テレマン", "クラシック-フランス-古典以前-クープラン・ラモー", "クラシック-イタリア", "クラシック-フランス-古典以前"}
set aPlayList to some item of somePlayList
tell application "iTunes"
set aOldSound to sound volume
set sound volume to aOldSound - 40
set aCount to count tracks of playlist aPlayList
set aRandomNum to random number from 1 to aCount
set aTrackNum to track number of track aRandomNum of playlist aPlayList
play track (aRandomNum - aTrackNum + 1) of playlist aPlayList
reveal current track
delay 10
set sound volume to aOldSound - 20
delay 10
set sound volume to aOldSound
end tell
いくつかのプレイリストからランダムに選び、音量を下げ、プレイリストの曲数の範囲でランダムな数字を作り、プレイリストの該当する曲を選択する。その曲がそのアルバムの何曲目か調べ、アルバムの途中でなく最初から再生するようにする。そのままだと再生はするけれどブラウザ上で表示してくれないので、revealする。音量を戻していく。最後まで分らなかったのは再生中の曲をrevealする箇所。
Mon, 06 Oct 2008
Leopardで使えるASLfontとNiigataを作ってみた
Classic Mac OSの時代のフォントには、何というか味のあるというか趣きのあるものが少なくありません。Chicago、Geneva、Monaco等々。日本語フォントにおいても、いくつか。そうしたフォント達の中には、今のシステムにも受け継がれているものもあり、またそうでないものもあります。タイトルにあるASLfontやNiigataは、後者に属するものです。
ASLfontにせよNiigataにせよ、丸漢フォントの時代からある古いフォントです。これらが現在使われることがないのは、ひとつにはClassic Mac OS時代の独自フォーマットのフォントであるためです。Mac OS Xで使える形式に変換する方法も公開されていますが、それが公開されたのはMac OS Xの時代になってかなり経ってからでした。今となっては、その変換方法を行なえる環境が手元にある人も少ないと思います。そしてもうひとつの理由は、Mac OS Xにおいてアンチエイリアスされた美麗なフォント環境が主流となったこと。ヒラギノの表示を見てしまった後では、日本語ビットマップフォントを使う意味が見出せない…でも最近、何でもアンチエイリアスがかかっていれば良いというものでもない、と思い始めました。切っ掛けは、Leopardのターミナルのデザインのひとつ、Proというものを見てからです。アンチアイリアスのかかっていないMonacoによる表示は、新鮮でした。
…ハードディスクの中を漁っていると、以前に丸漢フォントから変換したASLfontとNiigataが出てきました。9ポイントか12ポイントでないと表示が崩れてしまうのと、チルダやバックスラッシュの問題があって、放ってあったものです。自分の考え方は、以前とは違っています。今回、これを使って、fontforgeというオープンソースのフォントエディタで修正してみようと思い立ちました。特に変ったことや難しいことはしていないので中略…以下のようになりました。十分に味も趣きもあり、結構見易い感じになっていると思います。
Sun, 14 Sep 2008
フォルダにパスワードをかけて管理する
AppleScriptは書き方にクセがあるので、集中して書かないとすぐ書けなくなるのです。ということで、Folder Actionを使って、フォルダにパスワードロックをかける、というのを書こうと思いたちまして…でわさっそく。
…ところが、フォルダを開けなくする、というのがそもそも上手くいきません。妥協点として、フォルダは開けちゃうけどすぐ閉じちゃうよ、一瞬だし良く見えなかったよね、ね?という感じで、以下のように書いてみました。
on opening folder this_folder
tell application "Finder"
close every Finder window
display dialog "Enter Password." default answer "" buttons {"OK"} default button "OK"
set aPass1 to text returned of result
set aPass2 to "pass" as string
if not aPass1 = aPass2 then
beep
display dialog "Password does not match." buttons {"OK"} default button "OK" with icon stop
--close this_folder
make new Finder window
set target of Finder window 1 to home
set bounds of Finder window 1 to {10, 48, 1671, 893}
set (icon size of icon view options of window 1) to 96
else
make new Finder window
set target of Finder window 1 to this_folder
set bounds of Finder window 1 to {10, 48, 1671, 893}
set (icon size of icon view options of window 1) to 96
end if
end tell
end opening folder
スクリプトがアタッチされたフォルダを開こうとすると、一瞬フォルダは開くけれどすぐ閉じてしまう。パスワードを要求するダイアログが表示され、あらかじめ決められたパスワードと入力されたパスワードが異なっていた場合は、何事もなかったようにホームフォルダを開く。入力されたパスワードが一致していれば、開こうとしたフォルダが開く。ウィンドウのサイズやら何やらは個人的な話しですが、これで目的は達成している…のかな。フォルダを開けなくする方法をご存じの方はお教えください。
最全面のウィンドウをカレントディレクトリとしたターミナルを開く
いわゆるひとつの、BeOSにおけるSummon(召喚)のようなコンテキストメニューが欲しいと思ったので作りました。Terminal.app用とiTerm.app用。ありがち。
on run {input, parameters}
tell application "Finder"
try
set aFolder to (the target of the front window) as alias
set aPath to POSIX path of aFolder
end try
end tell
tell application "Terminal"
activate
try
if front window is busy then
display dialog "Terminal is busy. Try later." buttons {"OK"} default button 1
else
do script with command "cd " & quoted form of aPath in window 1
do script with command "clear" in window 1
end if
end try
end tell
return input
end run
on run {input, parameters}
tell application "Finder"
try
set aFolder to (the target of the front window) as alias
set aPath to POSIX path of aFolder
end try
end tell
tell application "iTerm"
activate
try
tell current terminal
launch session "Default Session"
tell the last session
write text "cd " & quoted form of aPath
write text "clear"
end tell
end tell
end try
end tell
return input
end run
Terminal.appでは、最全面のウィンドウがビジーであるかどうかを調べ、もしビジーであるならスクリプトの実行を止めています。System Eventsを使って新たにタブを開くこともできたのですが、何となくイヤだったのでそうしていません。iTerm.appでは逆に、最全面のウィンドウがビジーであるかどうか調べられなかったので、常に新しいタブを開いて、そこでコマンドを実行させています。実行速度に不満があって、実行してからターミナルが開くまでに一呼吸どころか三呼吸ほど待たされますが、それいがいは問題ありません。
ブックマークを特定のアプリケーションに縛りつけない
ウェブブラウザは自分的にはOmniWeb.appで決りなのですが、今後もそうであるかは分りません…Safari.appは常に、システムとの親和性や速度でOmniWeb.appを脅かしています。ということで、ブックマークはWeb Locationファイルとしてそれらの外に置いておこうと思いました。
最初がOmniWeb.appの例、次がSafari.appの例です。最初の部分以外は共用です。ベージのタイトルに「:」が入っていると、名前を付けるときにまっきんのファイルシステムの規則とかちあってしまうので、全角文字に置き換えています。ハマったのはここくらいでしょうか。
できあがったhoge.weblocはダブルクリックしても良し、Dockのアイコンにドロップしても良し。
set aURL to ""
set aTitle to ""
tell application "OmniWeb"
if not (browser 1 exists) then
beep
return
end if
set aFrontMostDocument to browser 1
set aURL to address of aFrontMostDocument
set aTitle to name of aFrontMostDocument
end tell
--set the clipboard to aTitle & return & aURL
set aOldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set aTitle to every text item of aTitle
set AppleScript's text item delimiters to ":"
set aTitle to text of aTitle as text
set AppleScript's text item delimiters to aOldDel
tell application "Finder"
--activate
set webloc to make new internet location file to aURL at "hoge:Users:hoge:Bookmarks" with properties {name:aTitle}
end tell
tell application "Safari"
if not (document 1 exists) then
beep
return
end if
set aFrontMostDocument to document 1
set aURL to URL of aFrontMostDocument
set aTitle to name of aFrontMostDocument
end tell
Page 1 of 35 >>