« 2010年9月 | トップページ | 2010年11月 »

2010年10月21日 (木)

Mac OS X (Snow Leopard) における非アクティブウィンドウ操作のまとめ

Windows ではアクティブでないウィンドウに対してマウスで何らかの操作を加えた場合でも常に普通に操作が反映されるが、Mac OS ではそうではない。

例えば、アクティブでないウェブブラウザのウィンドウに、あるウェブページが表示されており、そこに他のページへのリンクが記述されているような場合、Windows ならそのリンクをクリックすれば他のページに飛ぶことができる。一方、Mac OS では一度クリックしただけではウィンドウがアクティブになるだけ、二度目のクリックで他のページに飛ぶ、という仕様になっている。

Mac OS ではどのような時に有効なのか、まとめておく。

非アクティブウィンドウでの操作有効?Windows
との差異
閉じる/最小化/最適化ボタンを左クリック
ツールバーボタンを左クリック
デスクトップ/Finderアイコンを左クリック/ドラッグ
文字記入欄(注1)を左クリック/ドラッグ
スクロールバーを左クリック/ドラッグ
任意の場所を右クリック
(注2)

(注2)
上記以外の、ウィンドウの中を左クリック/ドラッグ×
(注3)
ホイールによるスクロール
(注4)
  • 注1……ウェブブラウザのウェブページ内に表示されている文字入力欄を除く。
  • 注2……但し、Mac では右クリックではウィンドウがアクティブ化されない。Windows ではアクティブ化される。
  • 注3……一度目のクリック(ドラッグを含む)ではウィンドウがアクティブになるだけ、二度目のクリックで操作が有効になる。
  • 注4……Mac OS では非アクティブウィンドウ上でのホイールスクロールが有効。Windows 上では無効。

最も重要な違いは、注3の項目であろう。Mac OS のこの仕様は、例えば Photoshop のような画像編集ソフトで画像を編集中に誤ってクリックしてしまうことを避ける狙いがあると思われる。

なお、筆者がインストールしている Parallels Desktop 4.0 においては、上記の法則が全く適用されず、右クリックでアクティブ化するなど、Windowsと全く同じ挙動となっているようだ。

文字記入欄に関しては、アプリケーションによって一度目の左クリックで有効になる場合とならない場合がある模様。Mail.app のメール作成ウィンドウの場合、非アクティブの状態の時にアドレス記入欄を左クリックすると、ウィンドウがアクティブ化された上にカーソルがアドレス記入欄内に表示される。しかしながら、同ウィンドウのメール本文記入欄を一度クリックした場合においては、ウィンドウはアクティブ化されるもののカーソルは記入欄内に表示されない。おそらくAPI の仕様によるものと思われる。なお Thunderbird のメール作成ウィンドウでは、アドレス記入欄も一度目のクリックでは有効にならない。

(10月23日追記) 上記の Parallels Desktop 4.0 の事例は Carbon アプリ一般についていえることのようだ。iTunes や Leopard の Finder も Carbon のため、同様の挙動となっている。

2010年10月 8日 (金)

正規表現でHTMLタグをマッチさせる

Perl スクリプトで HTML ファイルからとある Javascript 部分を除去しようと思い、<script></script> の間に hogehoge という文字列が含まれていることに着目して

/<script [¥w¥W]+?hogehoge[¥w¥W]+?<¥/script>/

というような正規表現を記述して実行してみたところ、見事に失敗した。

原因は、hogehoge を含む<script>タグの前に、hogehogeを含まない<script>タグがあったことである。具体的に言うと

<html>
<head>
   <script>※1
   nanigashi
   </script>
</head>
<body>
iroiro
   <script>※2
   hogehoge
   </script>※3
</body>
</html>

という HTML に上記の正規表現を適用したのだが、※2から※3をマッチさせるつもりが、※1から※3までマッチしてしまったのである。

そこで、ウェブ上の情報を頼りに試行錯誤してみたところ、

/<script ((?!<script)[¥w¥W])+?hogehoge[¥w¥W]+?<¥/script>/

のように書けばよいことがわかった。((?!<script)[¥w¥W])の部分が「<scriptという文字列を含まない任意の1文字(改行を含む)」を表す。こうすれば、確実に「あるタグではさんだ部分だけ」をマッチさせることができる。

なお、改行を含まない場合は ((?!<script).) となる。

« 2010年9月 | トップページ | 2010年11月 »