Xamarin.MacでNSTextViewのスマートクォートを無効化する

提供: MonoBook
2016年3月30日 (水) 06:37時点におけるimported>Administratorによる版
ナビゲーションに移動 検索に移動

概要

NSTextViewのスマートクォートを無効化したい。

解決策:OSレベルで無効化する

スマートクォートはMac OS Xに標準搭載されているビッグなお世話なゴミ機能であり、OSレベルで根本から止めるのであれば以下の手順になる。

  • システム環境設定
  • キーボード
  • ユーザ辞書
  • スマート引用符とスマートダッシュを使用 (このチェックをはずす)

これにより全ての文字入力でビッグなお世話なスマートクォートが動かなくなって幸せになれる。

解決策:NSTextView単位で無効化する

Xamarin.Macで開発している社内アプリの設定画面にアプリ起動時に実行するAppleScriptを入力する欄をNSTextViewで作ったのだが、スマートクオートが発動して実行できないAppleScriptに勝手に置き換えられてしまう不具合が発生した。

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;
        }
    }

関連項目

参考文献