Xamarin.MacでNSTextViewのスマートクォートを無効化する
2016年3月30日 (水) 06:39時点におけるimported>Administratorによる版
概要
NSTextViewのスマートクォートを無効化したい。
Xamarin.Macで開発している社内アプリの設定画面に、アプリ起動時に実行するAppleScriptを入力する欄をNSTextViewで作ったわけだが、ここにクォートを入力するとスマートクオートが発動して実行できないAppleScriptに勝手に置き換えられてしまう不具合が発生した。
解決策:OSレベルで無効化する
スマートクォートはMac OS Xに標準搭載されているビッグなお世話なゴミ機能であり、OSレベルで根本から止めるのであれば以下の手順になる。
- システム環境設定
- キーボード
- ユーザ辞書
- スマート引用符とスマートダッシュを使用 (このチェックをはずす)
これにより全ての文字入力でビッグなお世話なスマートクォートが動かなくなって幸せになれる。
解決策:NSTextView単位で無効化する
XIBファイルを開きNSTextViewの設定項目を眺めているとスマートクォート関連の設定があったわけだが、なぜかこのチェックを付けても外しても無効化できない。古いMac OS Xでは動くようだが最近のやつはダメなようだ。
上記と似たようなことをプログラムから叩いてやると最近のMac OS X (Yosemite)でも無効化できた。なぜかは知らん。たぶんこの方法はMonoMacでも行けると思うが試してはいない。
public partial class PreferenceWindowController : MonoMac.AppKit.NSWindowController
{
public override void WindowDidLoad()
{
base.WindowDidLoad();
// disable Smart Quotes
// よくわからんのでAutomaticで始まるプロパティ全部にfalseを設定してみた
_startupScript.AutomaticDashSubstitutionEnabled = false;
_startupScript.AutomaticDataDetectionEnabled = false;
_startupScript.AutomaticLinkDetectionEnabled = false;
_startupScript.AutomaticQuoteSubstitutionEnabled = false;
_startupScript.AutomaticSpellingCorrectionEnabled = false;
_startupScript.AutomaticTextReplacementEnabled = false;
_startupScript.EnabledTextCheckingTypes = 0;
}
}