美文网首页
macOS禁用NSTextView的引号替换

macOS禁用NSTextView的引号替换

作者: 捡书 | 来源:发表于2020-04-13 10:51 被阅读0次

    问题描述

    在NSTextView中输入json的双引号时,输入法为英文,但显示的是中文的引号。而且在输入过程中能感觉到英文引号替换成中文引号。再试了下单引号也存在该问题,而!,@,#等字符不存在该问题。

    猜测:是系统对引号做了特殊处理,在输入引号的时候将输入法更改为中文输入法吗?

    尝试1:实在是不知从何入手,查看了下NSTextView中的API,尝试了下重写-insertText,识别到输入中文引号,就重写成insertText:@”\”“,但是其实在输入英文引号的时候,insertText识别的也是英文的引号。所以这种思路其实是不可行的,是在显示时(insertText后)则切换成中文引号了。

    尝试2: 在storyboard中,NSTextView属性smart Quotes,智能引号默认是开启的,尝试了下禁用,但仍然没有解决(其实就是这个原因,但这里是因为xcode的bug,导致属性失效)。


    直引号与弯引号

    弯引号:「typographic, or curly quotation marks」
    直引号:「neutral, vertical, straight, typewriter, or dumb quotation marks」,又叫dumb quotes傻瓜引号

    直引号本是打字机时代为了尽量节约键盘空间而制作出来的。

    现代的键盘和 ASCII 字符集都继承了这个传统——ASCII 中只有一个单直引号(U+0027 ’ apostrophe)和一个双直引号(U+0022 ” quotation mark)。

    一些文字处理软件(如 Word),能自动将直引号转换为弯引号。
    许多编辑环境下(包括 OS X 的默认系统设置)会根据上下文将直引号转换为弯引号。
    中文输入法也是普遍使用弯引号(主要其实是因为简中弯引号占一字宽并偏向内侧,和比例宽度的直引号差别过大)。

    解决方案

    这个解决方案在Stack Overflow上已经有了


    将automaticQuoteSubstitutionEnabled设为NO,即可禁用引号的智能替换功能。
    Storyboard中NSTextView的smart Quotes属性对应的应该就是这一属性,照理禁用后应该是不会智能替换,怀疑是Xcode的Bug

    当然也可通过enabledTextCheckingTypes将所有自动转换类型禁用。

    相关文章

      网友评论

          本文标题:macOS禁用NSTextView的引号替换

          本文链接:https://www.haomeiwen.com/subject/kkfgmhtx.html