「Xamarin.MacでNSTextViewのスマートクォートを無効化する」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Administrator
 
(2人の利用者による、間の4版が非表示)
2行目: 2行目:
 
== 概要 ==
 
== 概要 ==
 
NSTextViewのスマートクォートを無効化したい。
 
NSTextViewのスマートクォートを無効化したい。
 +
 +
[[Xamarin.Mac]]で開発している社内アプリの設定画面に、アプリ起動時に実行する[[AppleScript]]を入力する欄をNSTextViewで作ったわけだが、ここにクォートを入力するとスマートクオートが発動して実行できないAppleScriptに勝手に置き換えられてしまう[[不具合]]が発生した。
 +
 +
たとえば以下のようなAppleScriptのダブルクォート部分がダメになる。
 +
<source lang="applescript">
 +
tell application "Safari"
 +
    activate
 +
end tell
 +
</source>
  
 
== 解決策:OSレベルで無効化する ==
 
== 解決策:OSレベルで無効化する ==
13行目: 22行目:
  
 
== 解決策:NSTextView単位で無効化する ==
 
== 解決策:NSTextView単位で無効化する ==
[[Xamarin.Mac]]で開発している社内アプリの設定画面に、アプリ起動時に実行する[[AppleScript]]を入力する欄をNSTextViewで作ったわけだが、ここにクォートを入力するとスマートクオートが発動して実行できないAppleScriptに勝手に置き換えられてしまう[[不具合]]が発生した。
+
OSレベルでの解決方法が確実なのだろうが今から社内にある500台くらいの[[Mac]]に設定して回るとか正気の沙汰とは思えないので自動アップデートを搭載したアプリ単位で解決したい。
  
 
XIBファイルを開きNSTextViewの設定項目を眺めているとスマートクォート関連の設定があったわけだが、なぜかこのチェックを付けても外しても無効化できない。古い[[Mac OS X]]では動くようだが最近のやつはダメなようだ。
 
XIBファイルを開きNSTextViewの設定項目を眺めているとスマートクォート関連の設定があったわけだが、なぜかこのチェックを付けても外しても無効化できない。古い[[Mac OS X]]では動くようだが最近のやつはダメなようだ。
27行目: 36行目:
 
             // disable Smart Quotes  
 
             // disable Smart Quotes  
 
             // よくわからんのでAutomaticで始まるプロパティ全部にfalseを設定してみた
 
             // よくわからんのでAutomaticで始まるプロパティ全部にfalseを設定してみた
             _startupScript.AutomaticDashSubstitutionEnabled = false;
+
             _nsTextView.AutomaticDashSubstitutionEnabled = false;
             _startupScript.AutomaticDataDetectionEnabled = false;
+
             _nsTextView.AutomaticDataDetectionEnabled = false;
             _startupScript.AutomaticLinkDetectionEnabled = false;
+
             _nsTextView.AutomaticLinkDetectionEnabled = false;
             _startupScript.AutomaticQuoteSubstitutionEnabled = false;
+
             _nsTextView.AutomaticQuoteSubstitutionEnabled = false;
             _startupScript.AutomaticSpellingCorrectionEnabled = false;
+
             _nsTextView.AutomaticSpellingCorrectionEnabled = false;
             _startupScript.AutomaticTextReplacementEnabled = false;
+
             _nsTextView.AutomaticTextReplacementEnabled = false;
             _startupScript.EnabledTextCheckingTypes = 0;
+
             _nsTextView.EnabledTextCheckingTypes = 0;
 
         }
 
         }
 
     }
 
     }

2019年5月22日 (水) 05:11時点における最新版

概要[編集 | ソースを編集]

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

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

たとえば以下のようなAppleScriptのダブルクォート部分がダメになる。

tell application "Safari"
    activate
end tell

解決策:OSレベルで無効化する[編集 | ソースを編集]

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

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

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

解決策:NSTextView単位で無効化する[編集 | ソースを編集]

OSレベルでの解決方法が確実なのだろうが今から社内にある500台くらいのMacに設定して回るとか正気の沙汰とは思えないので自動アップデートを搭載したアプリ単位で解決したい。

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を設定してみた
            _nsTextView.AutomaticDashSubstitutionEnabled = false;
            _nsTextView.AutomaticDataDetectionEnabled = false;
            _nsTextView.AutomaticLinkDetectionEnabled = false;
            _nsTextView.AutomaticQuoteSubstitutionEnabled = false;
            _nsTextView.AutomaticSpellingCorrectionEnabled = false;
            _nsTextView.AutomaticTextReplacementEnabled = false;
            _nsTextView.EnabledTextCheckingTypes = 0;
        }
    }

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]