OS X禁用NSTextView的引号替换
来源:互联网 发布:湖州华为云计算产业园 编辑:程序博客网 时间:2024/06/03 21:01
4th,August,2016
问题描述
在NSTextView中输入json的双引号时,输入法为英文,但显示的是中文的引号。而且在输入过程中能感觉到英文引号替换成中文引号。顺便试了下NSTextField,不存在该问题。再试了下单引号也存在该问题,而!,@,#等字符不存在该问题。
猜测:是系统对引号做了特殊处理,在输入引号的时候将输入法更改为中文输入法吗?
于是按着这个思路去查看了NSTextView.h头文件,查找跟输入法相关的API,并没有找到。(r:这里都不懂如何输入关键字,typewriting?纠结啊)。
尝试1:实在是不知从何入手,查看了下NSTextView中的API,尝试了下重写-insertText,识别到输入中文引号,就重写成insertText:@”\”“,但是其实在输入英文引号的时候,insertText识别的也是英文的引号。所以这种思路其实是不可行的,是在显示时(insertText后)则切换成中文引号了。
尝试2: 在storyboard中,NSTextView属性smart Quotes,智能引号默认是开启的,尝试了下禁用。但仍然没有解决!难道是系统bug?
好吧,揭晓谜底的时候到了…
直引号与弯引号
弯引号:「typographic, or curly quotation marks」
直引号:「neutral, vertical, straight, typewriter, or dumb quotation marks」,又叫dumb quotes傻瓜引号
直引号本是打字机时代为了尽量节约键盘空间而制作出来的。–from 《西文字体》
现代的键盘和 ASCII 字符集都继承了这个传统——ASCII 中只有一个单直引号(U+0027 ’ apostrophe)和一个双直引号(U+0022 ” quotation mark)。
主要是因为一些文字处理软件(如 Word),能自动将直引号转换为弯引号–from 知乎-Francis Feng许多编辑环境下(包括 OS X 的默认系统设置)会根据上下文将直引号转换为弯引号。中文输入法也是普遍使用弯引号(主要其实是因为简中弯引号占一字宽并偏向内侧,和比例宽度的直引号差别过大)。 –from 知乎-梁海
也是看了这个之后,大体明白了为什么会从直引号切换成弯引号。大体是系统做了处理,根据上下文将直引号转换为弯引号。然后再去Google了smart quotes,于是看到这篇资料NSTextView with Smart Quotes disabled, still replaces quotes。
NSTextChecking
反思: 其实一开始就有尝试禁用smart Quotes特性,无法禁用成功后,有常识去系统API中查找该属性,但搜索关键字是smartQuotes并未找到,也没多想就错过了解决问题的契机。还是应该静下心慢慢的认真查看系统API,以及搜索关键字的技巧还需提高。
automaticQuoteSubstitutionEnabled属性
If YES, automatic quotation mark substitution is enabled; if NO, it is disabled.
Automatic quote substitution causes ASCII quotation marks and apostrophes to be automatically replaced, on a context-dependent basis, with more typographically accurate symbols. – Apple
解决方案:将automaticQuoteSubstitutionEnabled设为NO,即可禁用引号的智能替换功能。(ps:storyboard中NSTextView的smart Quotes属性对应的应该就是这一属性,照理禁用后应该是不会智能替换。目前怀疑是Xcode的问题[如若知晓,欢迎指正!])
也可通过enabledTextCheckingTypes将所有自动转换类型禁用。
参考资料
Apple-NSTextView-automaticQuoteSubstitutionEnabled
NSTextView with Smart Quotes disabled, still replaces quotes
MacOSX: how to disable accented characters input
为什么 iOS 自带的输入法中的英文引号采用的是「”」
- OS X禁用NSTextView的引号替换
- OS X文本编辑器引号自动变化的问题
- Mac OS X 禁用 Dashboard
- 禁用 OS X 下的仪表盘教程 转自 少数派
- 如何禁用 Mac OS X 的系统完整性保护
- NSTextView的textDidChange消息
- NSTextView
- Mac 教程:告别 Dashboard,教你禁用 OS X 下的仪表盘教程
- asp中奇怪的替换错误,引号导致替换失败
- 引号机制 命令替换
- shell的命令替换形式(反引号和$(命令))
- linux bash里的反引号和$内容替换
- NSTextView收不到keyDown事件的问题解决
- OS X 文本编辑等应用为何会自动转换引号,如何解决?
- centos6.x禁用ipv6的方法
- centos6.x完全禁用IPv6的方法
- MAC OS X 的基本常识
- Mac OS X的内核
- supermap 绘制不同颜色的线条
- IDEA使用--字体、编码和基本设置
- 记录一下android studio获取key值方法
- 整理笔记---基础的HQL
- 5-6 列出连通集
- OS X禁用NSTextView的引号替换
- tensorflow/cifar10.py权重损失
- java调用javascript代码
- mysql主从不同步、数据不一致解决办法
- 罗马数转换成整数
- 51波特率计算方法
- 文件操作:重命名,复制,删除,创建
- POJ 3258 River Hopscotch(二分·最小距离最大)
- java中异常