コーディング時に厄介なMavericksのテキスト自動置換まとめ
前回紹介したAutomatorを作っている時に、突然AppleScriptがエラーを吐くことがありました。
これぞ、かの悪名高いMavericksのスマート引用符の仕業。しかし、悪名高い割には、日本語のウェブサイトには具体的すぎるトラブル例しか見当たらないようです。そこで、関連する各種機能について、概要をまとめておこうと思います。
以下の内容は、Mac OS X 10.9.3準拠です。
基本と問題点
- OS X Mavericks: 書類のテキストを置き換える
- OS X Mountain Lion: 書類のテキスト、ピクチャ、ムービーをコピーする
- ASCII.jp:Leopardアプリケーションガイド(後編) (2/8)
基本的な内容は、上記のサポートドキュメントに記載されていますが、一部内容が古くなっています。
Mac OS Xには、テキストを自動的に「適切な」体裁に置き換える機能があります。大きく分けると、
- テキストの置換
- スマート引用符/ダッシュ記号
- スマートリンク
- スマートコピー/ペースト
問題は、本当に「適切な」体裁は状況によって異なるということです。
たとえば、大ざっぱには「二重引用符」と表現される記号は、半角のものだけでも、文字コード的には3種類に分かれます。
上記記事でいうところの、「ストレートクォーテーションマーク」「ダブルクォート(左、右)」です。
英文の記述において正しいのは「ダブルクォート(左、右)」ですが、例えばHTMLにおけるaタグのhref属性は、「ストレートクォーテーションマーク」で囲む必要があります。しかし、Mavericksのスマート引用符が働くと、「ストレートクォーテーションマーク」を入力したつもりでも、「ダブルクォート(左、右)」に置き換えられてしまいます。
複雑なオン/オフ切り替え
そこで、要らなきゃ切ればいいだろという話になるのですが、そこが簡単にいかないところなのです。
まず、上記の自動置換機能は、「システムレベル」と「アプリケーションレベル」で個別に設定されます。それぞれの切り替え方法は以下の通りです。
- システムレベル
- システム環境設定 > ユーザ辞書
- 英字入力中にスペルを自動変換
- スマート引用符とスマートダッシュを使用
- システム環境設定 > ユーザ辞書
- アプリケーションレベル(「テキストエディット」の例。アプリケーションによって異なる)
- 編集 > 自動置換
- スマートコピー/ペースト
- スマート引用符
- スマートダッシュ記号
- スマートリンク
- テキストの置換
- (コンテクストメニュー)自動置換
- (「編集 > 自動置換」と同様)
- 編集 > 自動置換
ここで、アプリケーションレベルの設定はシステムレベルの設定に優越します。すなわち、システムレベルで自動置換をオフにしてもムダです。ばかじゃないの。
さらに、アプリケーションレベルの設定はなぜかしょっちゅうリセットされます。ほんとうにいみがわかりませんかんべんしてください。
では、これらの機能は、実際にはどのように振る舞うのでしょうか。
テキストの置換
これは、簡単に言えば「ユーザー辞書(ことえりの辞書)」に基づく自動変換です。「システム環境設定 > ユーザ辞書」に登録されている単語のうち、入力が半角英数のみであるものにおいて機能します。変換が半角英数である必要はありません。
IMEのサジェストのように変換テキストが表示されます。リターンまたはスペースキーで確定、エスケープキーでキャンセルされます。
自分が意図した変換結果にしかならないので、致命的なトラブルにつながることはほとんどないでしょう。ただし、微妙なタイムロスが発生するので、うっとうしいこともあります。
スマート引用符/ダッシュ記号
これらの機能は、キーボードから入力される記号を、「適切な」記号に置換します。スマート引用符の置換先記号は、「システム環境設定 > ユーザ辞書」で設定されます。
置換前の記号に「開始」「閉じ」の区別はありませんが、前方に引用符がある場合、閉じ引用符に置換されます。
特に引用符は、マークアップ/プログラム言語において特殊な意味を持つため、意図せずに置換されるとコードがエラーを起こすことがしばしばあります。そのため、最も厄介だといえます。
スマートリンク
URL などの文字列をクリック可能なリンクに変換します。つまり、置換後のテキストはリッチテキストです。
そのため、コーディング用のアプリケーションで有効であることが少なく、深刻なトラブルにつながることは少ないでしょう。
スマートコピー/ペースト
メール、テキストエディット、メッセージ、スティッキーズなど、多くのアプリケーションでは、単語をペーストしたり削除したりしたときに、スペースを自動的に挿入または削除して適切な間隔を確保することができます。この機能を「スマートコピー/ペースト」といいます。
と書かれていますが、発動条件がよくわかりません。英文のスペースを不自然に増やしたり削除したテキストをコピペしても、何も起こりませんでした。
とりあえず、なにかをコピペしてなにかが起こった場合、この機能を疑ってみてはいかがでしょう。
まとめ
- スマート引用符やばすぎ。
- システム環境設定で殺しても油断するな。アプリケーションレベルで殺さない限り奴らは動き続ける
- 一度殺しても油断するな。奴らは何度でも甦る